使用网络插件Terway
Terway是阿里云开源的基于专有网络VPC的容器网络接口CNI(Container Network Interface)插件,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。Terway网络插件是ACK自研的网络插件,将原生的弹性网卡分配给Pod实现Pod网络,支持基于Kubernetes标准的网络策略(Network Policy)来定义容器间的访问策略,并兼容Calico的网络策略。
在Terway网络插件中,每个Pod都拥有自己网络栈和IP地址。同一台ECS内的Pod之间通信,直接通过机器内部的转发,跨ECS的Pod通信、报文通过VPC的弹性网卡直接转发。由于不需要使用VxLAN等的隧道技术封装报文,因此Terway模式网络具有较高的通信性能。以网络插件为例,围绕K8s实现的CNI插件种类丰富,数量繁多。而如何选择一款稳定、高性能,并能支持流量控制、网络策略等高级特性的网络插件,对于K8s的网络运行至关重要。
以阿里云容器服务的Terway插件为例,它遵循业界的CNI设计方式,针对阿里云VPC网络进行优化,在K8s场景下使用,支持网络策略,可以实现Pod之间的访问隔离。同时,通过在Pod上声明annotation: K8s.aliyun.com/ingress-bandwidth和k8s.aliyun.com/egress-bandwidth可以限制Pod的入网和出网带宽。
按照部署和调用方方式划分,Terway包含Daemon和Binary两部分,如下图所示。
Daemon:供Binary调用,分配和管理网络资源。
Binary:与Kubelet交互及Daemon交互,配置Pod的网络连接。
Kubelet监听到Pod创建在自己的节点上时,会通过容器运行时创建Sandbox容器,然后通过cni调用Terway Binary来处理网络命名空间,Terway Binary调用Terway Daemon来获取网络资源,Terway Daemon调用Aliyun Open API分配网络资源并返回给Terway Binary,最后Terway Binary为容器的网络命名空间配置网络和联通网络。
使用Flannel网络插件
Flannel是社区提供的一款简单稳定的CNI插件。Flannel网络基于阿里云VPC的自定义路由能力,来实现跨节点的Pod直接与VPC的互相访问。本文介绍如何使用阿里云容器服务Kubernetes版ACK集群的Flannel网络插件。
背景信息
Flannel网络模式中Pod的网段独立于VPC的网段。Pod网段会按照掩码(节点IP数量)均匀划分给每个集群中的节点,每个节点上的Pod会从节点上划分的网段中分配IP地址。
Terway与Flannel对比
在创建集群时,ACK提供Terway和Flannel两种网络插件:
Terway:是阿里云容器服务ACK自研的网络插件。Terway将阿里云的弹性网卡分配给容器,支持基于Kubernetes标准的网络策略来定义容器间的访问策略,支持对单个容器做带宽的限流。Terway拥有更为灵活的IPAM(容器地址分配)策略,避免地址浪费。如果您不需要使用网络策略(Network Policy),可以选择Flannel,其他情况建议选择Terway。
Flannel:使用的是简单稳定的社区Flannel CNI插件。配合阿里云的VPC的高速网络,能给集群高性能和稳定的容器网络体验。Flannel功能偏简单,支持的特性少。例如,不支持基于Kubernetes标准的网络策略(Network Policy)。