背景

生产环境同时存在k8s集群的微服务与部署在虚拟机上的微服务,为了能够实现服务发现,需要做到集群内部使用和提供微服务的POD能够与K8S集群之外的主机网络互相可达。

K8S下服务发现的问题

在这里插入图片描述
在kubernetes集群里面,一般采用虚拟网络,不能直接与外部的网络进行直接通信。当在Pod里面注册微服务时,如果没有使用Node:Port暴露服务,Pod提供的服务不能被外部的访问。所以需要提供一种有效的方案,解决在Kubernetes集群内的服务发现的问题。

桥接模式

简介

在这里插入图片描述
首先,bridge是一个虚拟网络设备,所以具有网络设备的特征,可以配置IP、MAC地址等;其次,bridge是一个虚拟交换机,和物理交换机有类似的功能。

对于普通的网络设备来说,只有两端,从一端进来的数据会从另一端出去,如物理网卡从外面网络中收到的数据会转发给内核协议栈,而从协议栈过来的数据会转发到外面的物理网络中。
对于桥接模式,需要把原来Node的eth0网卡的IP赋给Linux Bridge,然后将eth0网卡的IP赋值给br0;以后每次创建一个pod,都会创建在一个veth peer。如图所示,veth1等同于物理网络的一个节点。

桥接模式的优点

  • 能够直接与物理网络使用mac地址通信。
  • 高性能,由于直接桥接在物理网络上,不需要额外的路由机制,也不是Overlay网络,网络性能完全等同于虚拟机。
  • 对物理网络无侵入,不需要对物理网络进行改造。
  • 不影响k8s的集群管理。
  • 物理网络的安全设备和安全策略可以直接使用。

桥接模式的缺点

  • 与容器网络不隔离,容器网络收到入侵后,可以直接发起二层以及二层以上的所有攻击。
  • 占用物理网络IP,由于容器网络对等物理网络,容器会占用物理机器的IP;当容器pod到达一定规模时候,IP地址资源会变得非常紧张。
  • 在创建Node时,将物理网卡eth0 桥接在master的那一刻,Node的网络会出现抖动。
  • 缺乏IP地址管理、网络访问控制的功能。

小结

如果物理网络IP地址资源充足,不需要容器具备网络隔离性,要求直接能够兼容与外部分容器环境的服务发现,可以考虑此方案。

Calico模式

简介

在这里插入图片描述
Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host都是router,把不同host的容器连接起来。与VxLAN不同的是,Calico 不对数据包做额外封装,不需要NAT和端口映射,扩展性和性能都很好。

与其他容器网络方案相比,Calico 还有一大优势:network policy。用户可以动态定义 ACL 规则,控制进出容器的数据包,实现业务需求。

如果只使用calico,在物理网络需要额外的路由机制来保证容器内部能够与物理网络互相通信。

Calico的优点

  • Calico配置部署简单,良好的水平扩展性。
  • Calico纯三层的网络方案,没用覆盖网络的封包解包的开销,具备良好的性能。
  • Calico网络模型不依赖于任何特定的虚拟化模型,实现灵活部署。
  • Calico提供丰富的IP地址管理(IPAM), 网络访问控制( Network policy)的功能。
  • 对于跨子网,跨数据中心的需求,通过开启IPIP协议可以支持。

Calico的缺点

  • 需要物理网络支持才能实现POD与外部虚拟机通信。
  • 需要动态的配置路由和iptables规则,对于大规模集群(大于1000时)需要使用其他的方案来应对。

小结

对于Calico网络,如果需要与外部通信,需要借助路由功能,需要使用一台或者若干台物理设备当做路由节点来实现POD与集群外部的IP的互通。

多网卡模式

简介

在这里插入图片描述
对于多网卡模式,容器内部会放两张虚拟网卡,一张使用Caclio网络,用于集群管理与容器内部通信;另一张使用macvlan或者SRIOV网卡,可以实现物理网络的通信。

多网卡模式的优点

  • 能够直接与物理网络使用mac地址通信,实现扁平二层网络。
  • 容器与物理网络具备一定的隔离性。
  • 由于集群内部网络使用的Calico,Calico 具备网络地址管理、网络隔离机制等丰富的功能。
  • 在创建服务时,能够选择是否开启或关闭多网卡,可以灵活配置。

多网卡模式的缺点

  • 与桥接类似,占用物理网络IP,由于容器网络对等物理网络,容器会占用物理机器的IP;当容器pod到达一定规模时候,IP地址资源会变得非常紧张。
  • 增加管理难度,每个POD需要维护两个虚拟机网卡,具备两个IP及以上地址,增加了管理和维护的难度。

小结

如果物理网络IP地址资源充足,能够接受若干Pod具备两个IP地址,要求直接能够兼容与外部分容器环境的服务发现,要求容器具备一定的隔离性,要求容器内部能够实现IP地址管理(IPAM), 网络访问控制( Network policy)等功能,可以考虑多网卡模式。由于多网卡模式可以选择是否开启多网卡,对于过渡阶段来说,可以优先考虑。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐