为Pod配置IPv6公网带宽

默认情况下,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来创建资源,您需要在RAM中配置相应的权限,然后在应用 > Helm中安装ack-extend-network-controller,并通过Annotation为指定Pod创建和关联IPv6 Gateway。

安装组件并开启ipv6gw控制器

  1. 您可以在ACS的应用 > Helm中选择组件ack-extend-network-controller并安装。

  2. ipv6gw控制器配置参数需要进行以下修改。

    # affinity will be ignored in ACS cluster
    affinity: null     
    
    
    enableControllers:
    #- natgw
    - ipv6gw                  // 解除ipv6gw注释
    - eip                     // 解除eip注释
    
    networkController:
      vpcid: "< vpc id >"    // 输入集群VPCID
    
    
    # use ak/sk is recommend  // ACS需要配置ak/sk
    credential:
      accessKey: ""   
      accessSecret: ""
  3. ACS集群中开启IPv6公网带宽,需要在ipv6gw控制器配置参数中指定访问密钥(AccessKey),为RAM用户生成访问密钥(AccessKey),具体操作请参见创建RAM用户创建自定义权限策略

为Pod配置IPv6网络的带宽和规则

您可以使用以下Pod Annotations配置IPv6网络的带宽以及规则:

Pod Annotations

Value

network.alibabacloud.com/ipv6-bandwidth

IPv6网关的公网带宽,单位:Mbps。取值范围:1~5000。

更多信息,请参见AllocateIpv6InternetBandwidth

network.alibabacloud.com/ipv6-bandwidth-enable

开启IPv6网关的公网带宽。取值范围:

  • "true"

  • "false"

network.alibabacloud.com/ipv6-egress-only

创建只出规则。

说明

IPv6公网带宽的计费方式,默认按使用流量计费。

控制台操作

  1. 登录容器计算服务控制台,在左侧导航栏选择集群

  2. 集群页面,单击目标集群ID,然后在左侧导航栏,选择工作负载 > 无状态

  3. 无状态页面的右上角,单击使用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:
            network.alibabacloud.com/ipv6-bandwidth: "10"  # 设置IPv6网关的公网带宽为10 Mbps。
            network.alibabacloud.com/ipv6-bandwidth-enable: "true"  #开启IPv6公网带宽。
            network.alibabacloud.com/ipv6-egress-only: ""    #创建只出规则。
        spec:
          containers:
          - name: example
            image: nginx
  4. 无状态页面,单击名为example的Deployment,然后在example的基本信息页面,查看已创建Pod的名称。

  5. 执行如下命令,访问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操作

  1. 使用以下内容,创建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-bandwidth-enable: "true"  #开启IPv6公网带宽。
            network.alibabacloud.com/ipv6-egress-only: ""    #创建只出规则。
        spec:
          containers:
          - name: example
            image: nginx
  2. 执行以下命令,创建资源对象。

    kubectl apply -f example.yaml

    预期输出:

    deployment.apps/example created
  3. 执行以下命令,查看已创建Pod的名称。

    kubectl get podipv6gws -n <example所在的命名空间>
  4. 执行如下命令,访问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
      ipv6Address: 2408:4006:1115:xxxx:xxxx:xxxx:xxxx:xxxx
     status:
        ipv6AddressID: ipv6-xxx
        ipv6EgressOnlyRuleID: ipv6py-xxx
        ipv6GatewayID: ipv6gw-xxx
        ipv6InternetBandwidthID: ipv6bw-xxx