混合集群中的容器网络插件包括本地数据中心中运行的容器网络插件和云上计算节点上运行的容器网络插件两部分。本文将介绍如何在混合集群中部署和配置Terway网络插件。
前提条件
对于场景二:本地数据中心容器网络模式为BGP网络及场景三:本地数据中心容器网络为Host网络,在创建注册集群时需要配置Terway网络的参数。
根据您的需要选择是否选中IPvlan。
配置Pod虚拟交换机。
配置Service CIDR。
具体操作,请参见通过控制台创建注册集群、通过onectl创建注册集群。
场景一:本地数据中心容器网络模式为覆盖(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插件配置RAM权限
通过onectl配置
在本地安装配置onectl。具体操作,请参见通过onectl管理注册集群。
执行以下命令,为Terway插件配置RAM权限。
onectl ram-user grant --addon terway-eniip
预期输出:
Ram policy ack-one-registered-cluster-policy-terway-eniip granted to ram user ack-one-user-ce313528c3 successfully.
通过控制台配置
创建RAM用户并为其授予以下自定义权限策略。具体操作,请参见自定义RAM授权策略。
步骤二:安装Terway插件
通过onectl安装
执行以下命令,安装Terway插件。
onectl addon install terway-eniip
预期输出:
Addon terway-eniip, version **** installed.
通过控制台安装
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面单击网络页签,在terway-eniip组件区域单击安装。
步骤三:配置Terway插件
执行以下命令编辑ConfigMap eni-config并配置eni_conf.access_key
和eni_conf.access_secret
。
kubectl -n kube-system edit cm eni-config
eni-config的示例如下所示。
kind: ConfigMap
apiVersion: v1
metadata:
name: eni-config
namespace: kube-system
data:
eni_conf: |
{
"version": "1",
"max_pool_size": 5,
"min_pool_size": 0,
"vswitches": {"AZoneID":["VswitchId"]},
"eni_tags": {"ack.aliyun.com":"{{.ClusterId}}"},
"service_cidr": "{{.ServiceCIDR}}",
"security_group": "{{.SecurityGroupId}}",
"access_key": "",
"access_secret": "",
"vswitch_selection_policy": "ordered"
}
10-terway.conf: |
{
"cniVersion": "0.3.0",
"name": "terway",
"type": "terway"
}
您可以使用KubeConfig连接注册集群并查看Terway网络插件守护进程集,在混合集群扩容云上节点之前,它将不会被调度到任何一个云下节点上。
执行以下命令查看Terway网络。
kubectl -nkube-system get ds |grep terway
预期输出:
terway-eniip 0 0 0 0 0 alibabacloud.com/external=true 16s
开启Terway组件的NetworkPolicy
在注册集群中Terway组件默认关闭NetworkPolicy。若您不需要开启NetworkPolicy,请跳过该步骤。更多信息,请参见在ACK集群使用网络策略。
Terway组件的NetworkPolicy功能依赖Calico CRD。若您的集群已经使用了Calico容器网络插件,开启Terway的NetworkPolicy功能时可能导致已有Calico容器网络异常。若有问题,请提交工单咨询。
使用以下示例部署CRD资源。
执行以下命令编辑ConfigMap eni-config,添加networkpolicy配置。
kubectl -n kube-system edit cm eni-config
eni-config的示例如下所示:
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: eni_conf: | { ... ... } 10-terway.conf: | { ... ... } disable_network_policy: "false"