默认情况下,IPv6地址只具备私网访问能力。如果Pod需要访问公网IPv6地址,则需要使用IPv6网关对IPv6地址进行带宽配置。本文介绍如何为Pod的IPv6地址配置带宽包,以及出访问规则。
前提条件
- 已创建ACK托管集群、ACK专有版集群。具体操作,请参见创建ACK托管集群、创建ACK专有集群(已停止新建)。且集群满足以下条件: - 已开启IPv6双栈。关于什么是IPv6网关,请参见什么是IPv6网关。 
- 集群网络插件为Terway。 
 
- 已在VPC中创建IPv6网关并使用ipv6gw控制器。关于如何创建IPv6网关,请参见创建和管理IPv6网关。 
仅部分ECS实例支持IPv6功能。详细信息,请参见实例规格族。
使用限制
- 本文通过ack-extend-network-controller组件开启IPv6 gateway功能,并使用 - k8s.aliyun.com/ipv6-bandwidth等注解配置IPv6公网带宽的方式仅支持普通ECS节点及Pod,不支持ECI实例和ACS实例。如需为ECI和ACS配置IPv6公网带宽,请参见为ECI Pod分配IPv6地址和为ACS Pod分配IPv6地址。
- 带宽大小、配置条目数受限于IPv6网关能力,使用约束请参见使用限制。 
在ack-extend-network-controller中开启IPv6 gateway功能
ack-extend-network-controller需要访问阿里云OpenAPI来创建资源,您需要在RAM中配置相应的权限,然后在应用市场中安装ack-extend-network-controller,并通过Annotation为指定Pod创建和关联IPv6 Gateway。
步骤一:配置IPv6所需的RAM权限
- 登录容器服务管理控制台,在左侧导航栏单击集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。 
- 在集群信息页面的基本信息页签下,单击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 | 创建只出规则。 | 
控制台操作
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在无状态页面的右上角,单击使用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访问外部网络时的注意事项。