全部產品
Search
文件中心

Container Service for Kubernetes:部署和配置Terway網路外掛程式

更新時間:Jun 19, 2024

混合叢集中的容器網路外掛程式包括本機資料中心中啟動並執行容器網路外掛程式和雲上計算節點上啟動並執行容器網路外掛程式兩部分。本文將介紹如何在混合叢集中部署和配置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使用者或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. 登入Container Service管理主控台,在左側導覽列選擇叢集

  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": {"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容器網路異常。若有問題,請

提交工單諮詢。

  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"