Antrea及Antrea-IPAM技术分享
一 CNI简介
1.1 定义:CNI是一个CNCF项目,用于配置容器网络。CNI和K8s的联系:K8s是CNI支持的容器编排系统之一。CNI是K8s可以使用的其中一种网络解决方案。
1.2 组成:
CNI项目由以下3个部分组成
- CNI规范 https://github.com/containernetworking/cni/blob/master/SPEC.md
- 基础库 https://github.com/containernetworking/cni
- 官方插件 https://github.com/containernetworking/plugins/tree/master/plugins
1.3 插件的分类
CNI的插件整体分为官方插件和第三方插件:
- CNI官方插件
- Main:构建配置网络接口
- IPAM :IP地址管理
- Meta:其他的插件端口映射,Qos等
- 第三方插件
- Antrea
- Cilium
- Kube-OVN
- Calico
Antrea可以认为是Main类型的插件,Antrea-IPAM是IPAM插件。
1.4 CNI代理调用和CNI调用链
CNI代理调用是指一个CNI插件在执行过程中调用另一个CNI插件的过程。如下配置中,bridge插件调用host-local插件申请释放IP。Antrea通过CNI代理调用Antrea-IPAM。
CNI调用链是指kubelet/cri 按照配置顺序链式依次调用CNI插件。如下配置中,kubelet会依次调用bridge和portmap插件。
{
"cniVersion": "1.0.0",
"name": "dbnet",
"plugins": [
{
"type": "bridge",
// plugin specific parameters
"bridge": "cni0",
"keyA": ["some more", "plugin specific", "configuration"],
"ipam": {
"type": "host-local",
// ipam specific
"subnet": "10.1.0.0/16",
"gateway": "10.1.0.1",
"routes": [
{"dst": "0.0.0.0/0"}
]
},
"dns": {
"nameservers": [ "10.1.0.1" ]
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true}
}
]
}
二 Antrea简介
Antrea是由VMware开源的K8s网络解决方案,符合CNI规范,以OVS为数据面。
主页:https://antrea.io/
github: https://github.com/antrea-io/antrea
2.1 与Kube-OVN对比
同样以OVS作为数据平面的CNI还有Kube-OVN(https://github.com/kubeovn/kube-ovn)。如上图,一个典型的SDN网络架构中,Antrea属于SDN控制器层,而Kube-OVN属于SDN网络应用层(与之对应的控制器是OVN)。两者在架构中的相对位置决定了Antrea的性能要优于Kube-OVN,功能则没有Kube-OVN丰富。
2.2 与其他主流CNI的性能测试对比
可以看到,从功能、性能、资源消耗综合来看,在考虑安全特性(即要求CNI具备网络策略和流量加密功能)的情况下Calico的表现最好,Antrea、Cilium、Weave次之,kube-router和Kube-OVN性能最差。
更加细节的数据可以到
https://docs.google.com/spreadsheets/d/12dQqSGI0ZcmuEy48nA0P_bPl7Yp17fNg7De47CYWzaM/edit#gid=1170887058
2.3 功能特性
1 提供了antctl命令行工具,集成了trace-packet等工具,易于诊断OVS网络问题
2 与VMware生态的产品集成较好,是VMware tanzu k8s的默认CNI,后期可能接入NSX
3 提供丰富的功能的同时兼顾网络拓扑简单、性能优异
三 软件架构及网络拓扑
https://github.com/antrea-io/antrea/blob/main/docs/design/architecture.md
四 OVS Pipline
https://github.com/antrea-io/antrea/blob/main/docs/design/ovs-pipeline.md