默认情况下IPv6地址只具备私网访问能力,如果需要访问公网,则需要使用IPv6网关对IPv6地址进行带宽配置。本文介绍如何为Pod IPv6地址配置带宽包、只出访问规则。

前提条件

背景信息

关于IPv6网关,请参见什么是IPv6网关

使用限制

  • 不支持ASK集群、ACK边缘托管版、ASI集群。
  • 带宽大小、配置条目数受限于IPv6网关能力,使用约束请参见使用限制

Pod配置

您可以使用以下Pod Annotations配置:

Pod AnnotationsValue
k8s.aliyun.com/ipv6-bandwidthIPv6网关的公网带宽,单位:Mbps。取值范围:1~5000。

更多信息,请参见AllocateIpv6InternetBandwidth

k8s.aliyun.com/ipv6-internet-charge-typeIPv6公网带宽的计费方式,取值:
  • PayByTraffic:按使用流量计费。
  • PayByBandwidth(默认值):按带宽计费。

更多信息,请参见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集群:
    1. 登录容器服务管理控制台,在左侧导航栏单击集群
    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息
    3. 集群信息页面,单击集群资源页签,然后单击Worker RAM角色右侧链接。
    4. 在RAM角色页面的权限管理页签,在权限策略列,单击目标权限策略名称。
    5. 权限策略页面的策略内容页签,单击修改策略内容,然后在脚本编辑页签下,将以下策略内容增加到脚本中。
      {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeIpv6Addresses",
              "vpc:CreateIpv6EgressOnlyRule",
              "vpc:DeleteIpv6EgressOnlyRule",
              "vpc:DescribeIpv6EgressOnlyRules",
              "vpc:AllocateIpv6InternetBandwidth",
              "vpc:DeleteIpv6InternetBandwidth"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    6. 策略内容添加完成后,单击继续编辑基本信息,然后单击确定
  • 对于ASK集群:

    请为RAM用户生成访问密钥(AccessKey)。具体操作,请参见创建RAM用户创建自定义权限策略

步骤二:为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