全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:部署和配置Terway网络插件

更新时间:Jul 25, 2023

混合集群中的容器网络插件包括本地数据中心中运行的容器网络插件和云上计算节点上运行的容器网络插件两部分。本文将介绍如何在混合集群中部署和配置Terway网络插件。

前提条件

场景一:本地数据中心容器网络模式为覆盖(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配置

  1. 在本地安装配置onectl。具体操作,请参见使用onectl管理注册集群

  2. 执行以下命令,为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授权策略

展开查看自定义权限策略内容

{
    "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"
        }
    ]
}

步骤二:安装Terway插件

通过onectl安装

执行以下命令,安装Terway插件。

onectl addon install terway-eniip

预期输出:

Addon terway-eniip, version **** installed.

通过控制台安装

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面单击网络页签,在terway-eniip组件区域单击安装

步骤三:配置Terway插件

执行以下命令编辑ConfigMap eni-config并配置eni_conf.access_keyeni_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": {{.PodVswitchId}},      
   "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,请跳过该步骤。更多信息,请参见使用网络策略Network Policy

重要

Terway组件的NetworkPolicy功能依赖Calico CRD。若您的集群已经使用了Calico容器网络插件,开启Terway的NetworkPolicy功能时可能导致已有Calico容器网络异常。若有问题,请提交工单咨询。

  1. 使用以下示例部署CRD资源。

    展开查看部署CRD资源的YAM示例

    kubectl apply -f - <<EOF ---
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: felixconfigurations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      version: v1
      names:
        kind: FelixConfiguration
        plural: felixconfigurations
        singular: felixconfiguration
    ---
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: bgpconfigurations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      version: v1
      names:
        kind: BGPConfiguration
        plural: bgpconfigurations
        singular: bgpconfiguration
    ---
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: ippools.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      version: v1
      names:
        kind: IPPool
        plural: ippools
        singular: ippool
    ---
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: hostendpoints.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      version: v1
      names:
        kind: HostEndpoint
        plural: hostendpoints
        singular: hostendpoint
    ---
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: clusterinformations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      version: v1
      names:
        kind: ClusterInformation
        plural: clusterinformations
        singular: clusterinformation
    ---
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: globalnetworkpolicies.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      version: v1
      names:
        kind: GlobalNetworkPolicy
        plural: globalnetworkpolicies
        singular: globalnetworkpolicy
    ---
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: globalnetworksets.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      version: v1
      names:
        kind: GlobalNetworkSet
        plural: globalnetworksets
        singular: globalnetworkset
    ---
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: networkpolicies.crd.projectcalico.org
    spec:
      scope: Namespaced
      group: crd.projectcalico.org
      version: v1
      names:
        kind: NetworkPolicy
        plural: networkpolicies
        singular: networkpolicy
    EOF
  2. 执行以下命令编辑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"