天天看點

阿裡雲注冊叢集—混合叢集—安裝和配置容器網絡插件

混合叢集中的容器網絡插件包括本地資料中心中運作的容器網絡插件和雲上計算節點上運作的容器網絡插件兩部分。本文将介紹混合叢集中的容器網絡插件配置。

場景一:本地資料中心容器網絡模式為覆寫(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