默认情况下,IPv6地址只具备私网访问能力。如果Pod需要访问公网IPv6地址,则需要使用IPv6网关对IPv6地址进行带宽配置。本文介绍如何为Pod的IPv6地址配置带宽包,以及出访问规则。
前提条件
已创建ACS集群,且已开启IPv6双栈。具体操作,请参见创建ACS集群。
已在VPC中创建IPv6网关并使用ipv6gw控制器。关于如何创建IPv6网关,请参见创建和管理IPv6网关。
使用限制
带宽大小、配置条目数受限于IPv6网关能力,使用约束请参见使用限制。
在ack-extend-network-controller中开启IPv6 gateway功能
ack-extend-network-controller需要访问阿里云OpenAPI来创建资源,您需要安装ack-extend-network-controller,并通过Annotation为指定Pod创建和关联IPv6 Gateway。
安装组件并开启ipv6gw控制器
开始安装前,请确认是否已经通过Helm或者ACK应用市场安装过组件。如有请先卸载。
登录容器计算服务控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理。
在页面搜索框中搜索ack-extend-network-controller,在结果中单击组件卡片右下角的安装。
单击确定完成配置。
弹出框中ipv6gw功能默认勾选,您无需额外配置RAM权限。
为Pod配置IPv6网络的带宽和规则
您可以使用以下Pod Annotations配置IPv6网络的带宽以及规则:
Pod Annotations | Value |
network.alibabacloud.com/ipv6-bandwidth | IPv6网关的公网带宽,单位:Mbps。取值范围:1~5000。 更多信息,请参见AllocateIpv6InternetBandwidth。 |
network.alibabacloud.com/ipv6-egress-only | 创建只出规则。 |
network.alibabacloud.com/ipv6-internet-charge-type | IPv6公网带宽的计费方式,取值:
更多信息,请参见AllocateIpv6InternetBandwidth。 |
IPv6公网带宽的计费方式,默认按使用流量计费。
控制台操作
登录容器计算服务控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在无状态页面的左上角,单击使用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: network.alibabacloud.com/ipv6-bandwidth: "10" # 设置IPv6网关的公网带宽为10 Mbps。 network.alibabacloud.com/ipv6-egress-only: "" #创建只出规则。 network.alibabacloud.com/ipv6-internet-charge-type: "PayByTraffic" #按使用流量计费 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 internetChargeType: PayByTraffic 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: network.alibabacloud.com/ipv6-bandwidth: "10" # 设置IPv6网关的公网带宽为10 Mbps。 network.alibabacloud.com/ipv6-egress-only: "" #创建只出规则。 network.alibabacloud.com/ipv6-internet-charge-type: "PayByTraffic" #按使用流量计费 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-******-*****
预期输出:
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 internetChargeType: PayByTraffic ipv6Address: 2408:4006:1115:xxxx:xxxx:xxxx:xxxx:xxxx status: ipv6AddressID: ipv6-xxx ipv6EgressOnlyRuleID: ipv6py-xxx ipv6GatewayID: ipv6gw-xxx ipv6InternetBandwidthID: ipv6bw-xxx