全部產品
Search
文件中心

Container Service for Kubernetes:為Pod配置IPv6公網頻寬

更新時間:Nov 15, 2024

預設情況下,IPv6地址只具備私網訪問能力。如果Pod需要訪問公網IPv6地址,則需要使用IPv6網關對IPv6地址進行頻寬配置。本文介紹如何為Pod的IPv6地址配置頻寬包,以及出訪問規則。

前提條件

重要

僅部分ECS執行個體支援IPv6功能。詳細資料,請參見執行個體規格類型系列

使用限制

  • 本功能僅支援普通ECS節點,不支援ECI執行個體。

  • 頻寬大小、配置條目數受限於IPv6網關能力,使用約束請參見使用限制

在ack-extend-network-controller中開啟IPv6 gateway功能

ack-extend-network-controller需要訪問阿里雲OpenAPI來建立資源,您需要在RAM中配置相應的許可權,然後在應用市場中安裝ack-extend-network-controller,並通過Annotation為指定Pod建立和關聯IPv6 Gateway。

步驟一:配置IPv6所需的RAM許可權

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

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

  3. 叢集資訊頁面的基本資料頁簽下,單擊Worker RAM角色右側連結。

  4. 建立自訂權限原則,策略內容如下。具體操作,請參見步驟一:建立自訂權限原則

    {
          "Effect": "Allow",
          "Action": [
            "vpc:DescribeIpv6Addresses",
            "vpc:CreateIpv6EgressOnlyRule",
            "vpc:DeleteIpv6EgressOnlyRule",
            "vpc:DescribeIpv6EgressOnlyRules",
            "vpc:AllocateIpv6InternetBandwidth",
            "vpc:DeleteIpv6InternetBandwidth"
          ],
          "Resource": [
            "*"
          ],
          "Condition": {}
        }
  5. 為叢集的Worker RAM角色授權。具體操作,請參見步驟二:為叢集的Worker RAM角色授權

步驟二:為ack-extend-network-controller組件開啟ipv6gw控制器

安裝ack-extend-network-controller組件,並且開啟ipv6gw控制器。您可以在ACK應用市場中選擇安裝,請參見應用市場

ipv6gw控制器配置參數如下。

clusterID: "c11ba338192xxxxxxx"          # 請按實際情況填寫。
regionID: "cn-hangzhou"                  # 請按實際情況填寫。
vpcID: "vpc-bp1rkq0zxxxxxx"              # 請按實際情況填寫。
enableControllers:
  - ipv6gw                               # 啟用IPv6網關。
networkController:
  ipv6GatewayController:
    maxConcurrentReconciles: 10          # 控制器並發數量。

credential:                               # 使用AK/SK,ACK託管和ACK專有叢集推薦使用RamRole模式配置。
  accessKey: ""
  accessSecret: ""

為Pod配置IPv6網路的頻寬和規則

您可以使用以下Pod Annotations配置IPv6網路的頻寬、計費方式以及規則:

Pod Annotation

Value

k8s.aliyun.com/ipv6-bandwidth

IPv6網關的公網頻寬,單位:Mbps。取值範圍:1~5000。

更多資訊,請參見AllocateIpv6InternetBandwidth

k8s.aliyun.com/ipv6-internet-charge-type

IPv6公網頻寬的計費方式,取值:

  • PayByTraffic:按使用流量計費。

  • PayByBandwidth(預設值):按頻寬計費。

更多資訊,請參見AllocateIpv6InternetBandwidth

k8s.aliyun.com/ipv6-egress-only

建立只出規則。

控制台操作

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

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

  3. 無狀態頁面的右上方,單擊使用YAML建立資源,然後將如下YAML樣本粘貼至模板,然後單擊建立

    以下樣本將為Pod配置10 Mbps大小的IPv6頻寬,並且建立只出規則。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example
      labels:
        app: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            k8s.aliyun.com/ipv6-bandwidth: "10" # 設定IPv6網關的公網頻寬為10 Mbps。
            k8s.aliyun.com/ipv6-egress-only: "" # 建立只出規則。
        spec:
          containers:
          - name: example
            image: nginx
  4. 無狀態頁面,單擊名為example的Deployment,然後在example的基本資料頁面,查看已建立Pod的名稱。

  5. 執行如下命令,訪問Pod同名的資源podipv6gws.alibabacloud.com,跟蹤分配的頻寬包和只出訪問規則資訊。

    kubectl get podipv6gws.alibabacloud.com  -oyaml example-674b897446-q****

    預期輸出:

    apiVersion: alibabacloud.com/v1beta1
    kind: PodIPv6GW
    metadata:
      creationTimestamp: "2024-02-07T06:00:48Z"
      finalizers:
      - ipv6gw-controller.alibabacloud.com/finalizer
      generation: 1
      name: example-674b897446-q****
      namespace: default
      ownerReferences:
      - apiVersion: v1
        kind: Pod
        name: example-674b897446-q****
        uid: bdf86c45-7**5-4**4-b**3-9b****
      resourceVersion: "11488"
      uid: 78747d60-9**8-4**e-b**8-f7f7c****
    spec:
      bandwidth: 10
      egressOnlyRule: true
      ipv6Address: 2408:4006:1115:xxxx:xxxx:xxxx:xxxx:xxxx
     status:
        ipv6AddressID: ipv6-xxx
        ipv6EgressOnlyRuleID: ipv6py-xxx
        ipv6GatewayID: ipv6gw-xxx
        ipv6InternetBandwidthID: ipv6bw-xxx

kubectl操作

  1. 使用以下內容,建立example.yaml。

    以下樣本將為Pod配置10 Mbps大小的IPv6頻寬,並且建立只出規則。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example
      labels:
        app: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            k8s.aliyun.com/ipv6-bandwidth: "10" # 設定IPv6網關的公網頻寬為10 Mbps。
            k8s.aliyun.com/ipv6-egress-only: "" # 建立只出規則。
        spec:
          containers:
          - name: example
            image: nginx
  2. 執行以下命令,建立資來源物件。

    kubectl apply -f example.yaml

    預期輸出:

    deployment.apps/example created
  3. 執行以下命令,查看已建立的Pod名稱。

    kubectl get podipv6gws -n <example所在的命名空間>
  4. 執行如下命令,訪問Pod同名的資源podipv6gws.alibabacloud.com,跟蹤分配的頻寬包和只出訪問規則資訊。

    kubectl get podipv6gws.alibabacloud.com  -oyaml example-674b897446-q****

    預期輸出:

    apiVersion: alibabacloud.com/v1beta1
    kind: PodIPv6GW
    metadata:
      creationTimestamp: "2024-02-07T06:00:48Z"
      finalizers:
      - ipv6gw-controller.alibabacloud.com/finalizer
      generation: 1
      name: example-674b897446-q****
      namespace: default
      ownerReferences:
      - apiVersion: v1
        kind: Pod
        name: example-674b897446-q****
        uid: bdf86c45-7**5-4**4-b**3-9b****
      resourceVersion: "11488"
      uid: 78747d60-9**8-4**e-b**8-f7f7c****
    spec:
      bandwidth: 10
      egressOnlyRule: true
      ipv6Address: 2408:4006:1115:xxxx:xxxx:xxxx:xxxx:xxxx
     status:
        ipv6AddressID: ipv6-xxx
        ipv6EgressOnlyRuleID: ipv6py-xxx
        ipv6GatewayID: ipv6gw-xxx
        ipv6InternetBandwidthID: ipv6bw-xxx

常見問題

ACK Serverless叢集中如何部署ack-extend-network-controller組件?

我們不推薦您在ACK Serverless叢集部署該組件。如需部署,請先為RAM使用者產生存取金鑰(AccessKey)。具體操作,請參見建立RAM使用者建立自訂權限原則。然後,在應用市場部署組件時,配置到對應參數中。

相關文檔

關於如何在Pod中訪問外部網路的更多資訊,請參見Pod訪問外部網路時的注意事項