預設情況下,IPv6地址只具備私網訪問能力。如果Pod需要訪問公網IPv6地址,則需要使用IPv6網關對IPv6地址進行頻寬配置。本文介紹如何為Pod的IPv6地址配置頻寬包,以及出訪問規則。
前提條件
已建立ACK託管叢集、ACK專有版叢集。具體操作,請參見建立ACK託管叢集、建立ACK專有叢集。且叢集滿足以下條件:
已開啟IPv6雙棧。關什麼是於IPv6網關,請參見什麼是IPv6網關。
叢集網路外掛程式為Terway。
已在VPC中建立IPv6網關並使用ipv6gw控制器。關於如何建立IPv6網關,請參見建立和管理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許可權
登入Container Service管理主控台,在左側導覽列單擊叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊。
在叢集資訊頁面的基本資料頁簽下,單擊Worker RAM角色右側連結。
建立自訂權限原則,策略內容如下。具體操作,請參見步驟一:建立自訂權限原則。
{ "Effect": "Allow", "Action": [ "vpc:DescribeIpv6Addresses", "vpc:CreateIpv6EgressOnlyRule", "vpc:DeleteIpv6EgressOnlyRule", "vpc:DescribeIpv6EgressOnlyRules", "vpc:AllocateIpv6InternetBandwidth", "vpc:DeleteIpv6InternetBandwidth" ], "Resource": [ "*" ], "Condition": {} }
為叢集的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公網頻寬的計費方式,取值:
更多資訊,請參見AllocateIpv6InternetBandwidth。 |
k8s.aliyun.com/ipv6-egress-only | 建立只出規則。 |
控制台操作
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面的右上方,單擊使用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
在無狀態頁面,單擊名為example的Deployment,然後在example的基本資料頁面,查看已建立Pod的名稱。
執行如下命令,訪問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操作
使用以下內容,建立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
執行以下命令,建立資來源物件。
kubectl apply -f example.yaml
預期輸出:
deployment.apps/example created
執行以下命令,查看已建立的Pod名稱。
kubectl get podipv6gws -n <example所在的命名空間>
執行如下命令,訪問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訪問外部網路時的注意事項。