全部產品
Search
文件中心

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

更新時間:Nov 06, 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許可權

通過控制台配置

  1. 建立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"
            }
        ]
    }
  2. 登入Container Service管理主控台,在左側導覽列選擇叢集

  3. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇組態管理 > 保密字典

  4. 保密字典頁面,單擊使用YAML建立資源,填入以下樣本內容,建立一個名稱為alibaba-addon-secret的Secret。

    說明

    組件會通過其中儲存的AccessKeyID和AccessKeySecret訪問雲上服務。若已存在alibaba-addon-secret,則忽略。

    apiVersion: v1
    kind: Secret
    metadata:
      name: alibaba-addon-secret
      namespace: kube-system
    type: Opaque
    stringData:
      access-key-id: <RAM使用者的AccessKeyID>
      access-key-secret: <RAM使用者的AccessKeySecret>

通過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.

步驟二:安裝Terway外掛程式

通過控制台安裝

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  3. 組件管理頁面單擊網路頁簽,在terway-eniip組件地區單擊安裝

    說明

    在安裝頁面可選擇是否啟用 NetworkPolicy,預設不開啟,若您啟用此功能,需進行額外配置。更多詳細資料,請參見開啟Terway組件的NetworkPolicy(可選)

通過onectl安裝

執行以下命令,安裝Terway外掛程式。

onectl addon install terway-eniip

預期輸出:

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

步驟三:配置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。更多資訊,請參見在ACK叢集使用網路原則

  • 若您不需要開啟NetworkPolicy,請跳過該步驟。

  • 若您已開啟NetworkPolicy,則需要根據自身環境確定是否安裝CRD,CRD資源樣本如下所示。

    重要

    Terway組件的NetworkPolicy功能依賴Calico CRD。若您的叢集已經使用了Calico容器網路外掛程式,開啟Terway的NetworkPolicy功能時可能導致已有Calico容器網路異常。若有問題,請提交工單諮詢。

    展開查看部署CRD資源的YAML樣本

    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: felixconfigurations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: FelixConfiguration
        plural: felixconfigurations
        singular: felixconfiguration
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: bgpconfigurations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: BGPConfiguration
        plural: bgpconfigurations
        singular: bgpconfiguration
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: ippools.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: IPPool
        plural: ippools
        singular: ippool
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: hostendpoints.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: HostEndpoint
        plural: hostendpoints
        singular: hostendpoint
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: clusterinformations.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: ClusterInformation
        plural: clusterinformations
        singular: clusterinformation
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: globalnetworkpolicies.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: GlobalNetworkPolicy
        plural: globalnetworkpolicies
        singular: globalnetworkpolicy
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: globalnetworksets.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: GlobalNetworkSet
        plural: globalnetworksets
        singular: globalnetworkset
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: networkpolicies.crd.projectcalico.org
    spec:
      scope: Namespaced
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: NetworkPolicy
        plural: networkpolicies
        singular: networkpolicy