混合集群中的容器网络插件包括本地数据中心中运行的容器网络插件和云上计算节点上运行的容器网络插件两部分。本文将介绍混合集群中的容器网络插件配置。
场景一:本地数据中心容器网络模式为覆盖(Overlay)网络
若本地数据中心内的容器网络模式为覆盖网络,则云上计算节点也可以复用此网络模式,您只需要保证云上计算节点能够正常拉取容器网络插件守护进程集所使用的容器镜像即可。
例如,常用的覆盖网络模式有:
- Flannel VXLAN模式。
- Calico IPIP模式。
- Cilium VXLAN模式。
场景二:本地数据中心容器网络模式为BGP网络
若本地数据中心内的容器网络模式为BGP网络,那么云上计算节点需要使用Terway网络,云上云下容器网络互通请参见云上边界路由器的BGP配置。
在此场景下,我们需要保证:
- 云下容器网络插件(如Calico BGP路由反射模式)的守护进程集不要被调度到云上计算节点。
- 同时也要保证Terway网络插件的守护进程集不要被调度到云下计算节点。
在注册集群中,通过注册集群节点池扩容的计算节点都会添加一个固定的节点标签:alibabacloud.com/external=true,它可以作为我们区分云上云下节点的过滤条件。
例如,针对云下Calico网络插件,我们就可以使用nodeAffinity设置其不被调度到拥有标签alibabacloud.com/external=true的节点上。其他任何运行于云下且不希望被调度到云上的工作负载,都可以使用这种方式设置。更新Calico网络插件的命令如下:
cat <<EOF > calico-ds.pactch spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: alibabacloud.com/external operator: NotIn values: - "true" EOF $ kubectl -n kube-system patch ds calico-node -p "$(cat calico-ds.pactch)"
对于云上Terway网络插件,我们已经默认配置其只被调度到拥有标签alibabacloud.com/external=true的节点上。
场景三:本地数据中心容器网络为Host网络
由于本地数据中心内的容器网络使用的是Host网络,所以我们只需保证云上Terway网络插件的守护进程集不被调度到云下即可。云上Terway网络插件默认只调度到拥有节点标签为alibabacloud.com/external=true的云上节点上。
安装和配置Terway网络插件
在上面描述的场景二和场景三下,我们需要为混合集群的云上节点部分安装和配置Terway网络插件。
前置条件
首先要求您在创建注册集群时,已经配置了Terway网络所需参数,包括是否勾选IPvlan,Pod虚拟交换机和Service CIDR等,参见https://developer.aliyun.com/article/781974?groupCode=kubernetes
安装Terway插件
1)登录容器服务控制台。
2)在控制台左侧导航栏中,单击集群。
3)在集群列表页面中,单击目标注册集群页面右侧的详情。
4)在集群详情页签,点击运维管理下的组件管理。
5)找到terway-eniip并点击安装。
您可以使用kubeconfig连接注册集群并查看Terway网络插件守护进程集,在混合集群扩容云上节点之前,它将不会被调度到任何一个云下节点上,如下所示:
kubectl -nkube-system get ds |grep terway terway-eniip 0 0 0 0 0 alibabacloud.com/external=true 16s
配置Terway插件
在注册集群中,所有addon组件都使用用户自定义的Access Key来获取云资源的操作权限。您需要创建RAM子账号并为子账号授予以下RAM Policy:
{ "Version": "1", "Statement": [ { "Action": [ "ecs:CreateNetworkInterface", "ecs:DescribeNetworkInterfaces", "ecs:AttachNetworkInterface", "ecs:DetachNetworkInterface", "ecs:DeleteNetworkInterface", "ecs:DescribeInstanceAttribute", "ecs:AssignPrivateIpAddresses", "ecs:UnassignPrivateIpAddresses", "ecs:DescribeInstances", "ecs:ModifyNetworkInterfaceAttribute" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Action": [ "vpc:DescribeVSwitches" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
然后编辑ConfigMap eni-config并配置eni_conf.access_key和eni_conf.access_secret