默认情况下IPv6地址只具备私网访问能力,如果需要访问公网,则需要使用IPv6网关对IPv6地址进行带宽配置。本文介绍如何为Pod IPv6地址配置带宽包、只出访问规则。
前提条件
- 创建ACK托管版或专有版集群,详细信息请参见创建Kubernetes托管版集群、创建Kubernetes专有版集群。集群满足以下条件:
- IPv6双栈已开启。
- 网络插件选择Terway。
- 您需要在VPC中创建IPv6网关后再使用ipv6gw控制器,如何创建IPv6网关请参见创建和管理IPv6网关。
背景信息
关于IPv6网关,请参见什么是IPv6网关。
使用限制
- 不支持ASK集群、ACK边缘托管版、ASI集群。
- 带宽大小、配置条目数受限于IPv6网关能力,使用约束请参见使用限制。
Pod配置
您可以使用以下Pod Annotations配置:
Pod Annotations | 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 | 创建只出规则。 |
在ack-extend-network-controller中开启IPv6 gateway功能
ack-extend-network-controller需要访问阿里云OpenAPI来创建资源,您需要在RAM中配置相应的权限,然后在应用市场中安装ack-extend-network-controller,并通过注解为指定Pod创建和关联IPv6 gateway 。
步骤一:配置DNAT所需的RAM权限
- 对于ACK集群:
- 登录容器服务管理控制台,在左侧导航栏单击集群。
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
- 在集群信息页面,单击集群资源页签,然后单击Worker RAM角色右侧链接。
- 在RAM角色页面的权限管理页签,在权限策略列,单击目标权限策略名称。
- 在权限策略页面的策略内容页签,单击修改策略内容,然后在脚本编辑页签下,将以下策略内容增加到脚本中。
{ "Effect": "Allow", "Action": [ "vpc:DescribeIpv6Addresses", "vpc:CreateIpv6EgressOnlyRule", "vpc:DeleteIpv6EgressOnlyRule", "vpc:DescribeIpv6EgressOnlyRules", "vpc:AllocateIpv6InternetBandwidth", "vpc:DeleteIpv6InternetBandwidth" ], "Resource": [ "*" ], "Condition": {} }
- 策略内容添加完成后,单击继续编辑基本信息,然后单击确定。
- 对于ASK集群:
步骤二:为ack-extend-network-controller组件开启natgw控制器
安装ack-extend-network-controller组件,并且开启natgw控制器。您可以在ACK应用市场中选择安装,请参见应用市场。
natgw控制器配置参数如下。
clusterID: "c11ba338192xxxxxxx" # 请按实际情况填写。
regionID: "cn-hangzhou" # 请按实际情况填写。
vpcID: "vpc-bp1rkq0zxxxxxx" # 请按实际情况填写。
enableControllers:
- ipv6gw # 启用IPv6网关 。
networkController:
ipv6GatewayController:
maxConcurrentReconciles: 10 # 控制器并发数量。
credential: # 使用AK/SK,ACK集群推荐使用RamRole模式配置。
accessKey: ""
accessSecret: "" ""
使用自定义资源跟踪配置
创建Pod后,控制器会创建Pod同名的自定义资源。
以下示例将为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"
k8s.aliyun.com/ipv6-egress-only: ""
spec:
containers:
- name: example
image: nginx
Pod创建成功后,执行如下命令,您可以访问Pod同名的资源
podipv6gws.alibabacloud.com
,跟踪分配的带宽包和只出访问规则信息。kubectl get podipv6gws.alibabacloud.com -oyaml example-75954794f-2****
预期输出:apiVersion: alibabacloud.com/v1
kind: PodIPv6GW
metadata:
creationTimestamp: "2022-09-20T06:46:14Z"
finalizers:
- ipv6gw-controller.alibabacloud.com/finalizer
generation: 1
name: example-75954794f-2****
namespace: default
ownerReferences:
- apiVersion: v1
kind: Pod
name: example-75954794f-2****
uid: 2f2d7a97-9b63-4bbd-a050-5bcf0990****
resourceVersion: "395890"
uid: 95ade813-9f72-40ff-b3be-9d6fc1e7****
spec:
bandwidth: 10
egressOnlyRule: true
ipv6Address: 2408:4005:39c:xxxx:xxxx:xxxx:xxxx:xxxx
status:
ipv6AddressID: ipv6-xxx
ipv6EgressOnlyRuleID: ipv6py-xxx
ipv6GatewayID: ipv6gw-xxx
ipv6InternetBandwidthID: ipv6bw-xxx