Copyright © 2020 新华三技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
本文档中的信息可能变动,恕不另行通知。
随着云计算的快速发展和不断演进,容器技术因为其资源利用率高、易于迁移等特点得到了广泛的应用,在容器管理编排领域,由Google开源的Kubernetes发展迅速,成为了该领域的事实标准。
Kubernetes使用CNI (Container Network Interface) 作为其开放网络接口,不同厂商和个人可以通过开发遵循CNI规范的网络插件对接Kubernetes,实现其容器网络方案。
CNI (Container Network Interface) 是 Google 和 CoreOS 主导制定的容器网络标准,CNI 设计模型简单,仅关注容器的网络连接,在容器创建时分配网络资源,并在删除容器时删除分配的资源。
容器网络相比传统的IaaS网络,存在以下新的技术难点,并提出了相应的挑战:
· 容器数量庞大,一台计算主机可以虚拟上千个容器,主机间的ARP泛洪占用大量带宽
· 容器生命周期短,需要有效地对容器进行IP地址管理(IPAM)
为了攻克以上技术难点,提高容器网络的安全性和灵活性,我们推出了基于SeerEngine-DC和CNI接口规范的容器网络方案对接Kubernetes容器网络。
SeerEngine-DC容器网络方案主要有以下技术优点:
· 基于VXLAN的多租户网络隔离
· 统一的IP地址管理
· 支持不同VXLAN下IP地址重叠
· 基于主机的动态VLAN-VXLAN映射,突破4K网络限制
· 提供容器、虚机、裸机之间的二层、三层互访
· 安全组、QoS功能
· 提供IPv6支持
· 支持访问ClusterIP类型Service
· 支持使用第三方DNS(如CoreDNS)进行服务发现
· 支持Pod健康检测
· SeerEngine-DC提供的其他网络功能
SeerEngine-DC容器网络方案提供主机Overlay、网络Overlay和混合Overlay三种网络模型。
主机Overlay模型如图1所示:
Kubernetes Node节点安装H3C S1020V虚拟交换机,并作为一个独立的VTEP,容器报文在出Node节点时进行VXLAN封装。
SeerEngine-DC管控S1020V虚拟交换机,并通过OpenFlow和OVSDB向S1020V下发容器网络、安全组和QoS相关配置。
网络Overlay模型如图2所示:
Kubernetes Node节点安装Open vSwitch虚拟交换机,并通过物理网卡连接到Leaf交换机,Leaf交换机作为一个VTEP,容器报文在出Node节点时进行VLAN封装,进入Leaf交换机后根据动态的VLAN-VXLAN映射进行转发。
Net Master分配基于主机的动态VLAN,并通知SeerEngine-DC VLAN-VXLAN映射配置和端口创建消息,SeerEngine-DC给容器分配IP地址。
Net Agent根据分配的动态VLAN和IP地址向节点的Open vSwitch虚拟交换机下发容器网络、安全组和QoS相关配置。
混合Overlay模型如图3所示:
在主机Overlay和网络Overlay的混合组网下实现互通。
Net Agent下发容器网络配置,实现跨Node容器互通,如图4所示,位于Node1的Pod1访问Node2的Pod2时,Net Agent将向OVS下发流表指导报文通过Uplink口转发,流量在Node上经过安全组,并通过VXLAN Fabric实现跨Node通信。
图4 跨Node流量
Service是Kubernetes提供的集群内负载均衡服务,其中ClusterIP是分配的集群内虚拟IP。
Service后端成员可以是集群内的Pod(容器网络),也可以是集群外部服务(非容器网络),下面对这两种业务场景进行描述。
访问容器后端ClusterIP类型Service流量走向如图5所示:
访问容器后端ClusterIP类型Service场景下,目的地址为ClusterIP的报文通过OpenFlow packet-in上送到Net Agent, Net Agent根据负载策略选择到对应的后端Pod,下发相关流表实现负载均衡。
访问集群外服务后端ClusterIP类型Service流量走向如图6所示:
访问集群外服务后端ClusterIP类型Service场景下,目的地址为ClusterIP的报文通过OpenFlow packet-in上送到Net Agent, Net Agent根据负载策略选择到对应的集群外服务地址,下发相关流表实现负载均衡,容器通过NAT规则访问到集群外服务。
Kubelet可通过Probe检测Pod网络状态,其流量走向如图7所示:
图7 Node访问容器
Pod网络健康检测场景下,Node发起对容器的访问匹配到相应的自学习流表,生成相关放行回程流量的规则。
SeerEngine-DC容器网络方案对接SeerEngine-DC和Kubernetes容器网络,提供基于VXLAN的多租户网络隔离和容器、虚机、裸机之间的网络互通,并且支持Service负载均衡和Node节点访问Pod等Kubernetes容器网络特性,在保留容器网络原有设计理念的前提下实现了容器网络和SDN网络相结合,大大提高了容器网络的安全性和灵活性。