You need to enable JavaScript to run this app.
导航
配置 IPv4/IPv6 双栈网络
最近更新时间:2024.07.16 11:49:00首次发布时间:2023.08.08 20:59:44

弹性容器实例同时支持 IPv4 和 IPv6 双栈网络能力,相比 IPv4,IPv6 大大扩展了地址的可用空间。本文主要介绍如何为 VCI 实例配置 IPv4/IPv6 双栈网络。

VCI Pod 主网卡和辅助网卡均支持 IPv4 和 IPv6 双栈网络。补齐 IPv6 支持的能力,满足 Pod 在双栈模式下运行的需求。

说明

邀测·申请试用】:双栈网络功能目前处于邀测阶段,如需使用,请提交申请。

使用限制

IPv6 目前在其他火山引擎产品侧(包括 VPC、VKE、CLB、ALB 等) 均处于邀测阶段,如需使用,请在 各产品侧 一并提交邀测申请。本文示例用到的其他产品如下,请提前在相关产品侧提交 IPv6 邀测申请:

前提条件

  • 已创建 IPv4/IPv6 双栈集群。详细操作,请参见 通过 VKE 搭建 IPv4/IPv6 双栈集群
  • 已准备容器镜像。支持使用火山引擎镜像仓库(CR)中的镜像,也支持使用第三方镜像仓库中的镜像。上传镜像到 CR 的操作,请参见 推送和拉取镜像

    说明

    若使用 CR 产品中上传的镜像,请确保镜像仓库实例已添加双栈集群使用的 VPC 的访问权限。详细操作,请参见 连通本账号 VPC

配置说明

通过添加 Pod Annotation 方式,为弹性容器实例配置 IPv4/IPv6 双栈网络。

Annotation 说明,如下所示。

Annotation KeyAnnotation Value 示例值说明是否必填

vci.vke.volcengine.com/pod-ip-family

ipv4

VCI Pod 主网卡使用的协议栈。取值如下:

  • ipv4:(默认)使用 IPv4 单栈网络。
  • dualstack:使用 IPv4/IPv6 双栈网络。

本场景必填

vke.volcengine.com/preferred-network-interface对象类型VCI Pod 辅助网卡配置。数组类型,数组中每个对象均代表一张辅助网卡的配置信息。详情如本文下方 辅助网卡配置信息表 所示。非必填

辅助网卡配置信息表

Key示例值说明是否必填
Type"Secondary"弹性网卡类型,配置辅助网卡时,此处必须为"Secondary"必填

SubnetIds

["subnet-os74b******"]

子网 ID。

  • 子网必须属于当前 VCI Pod 主网卡所在的 VPC。
  • 辅助网卡与主网卡的子网可以相同,也可以不同,VPC 的 CIDR 允许重叠。

必填

SecurityGroupIds

["sg-123edf******"]

弹性网卡加入的安全组列表。

  • 指定的安全组必须与弹性网卡在同一个 VPC 内。
  • 安全组数量 >= 1。

必填

SecondaryPrivateIpAddressCount

1

辅助网卡的辅助私网 IP 数量,取值范围:1~2。
辅助网卡至少有 1 个主私网 IP,可以有 0 至多个辅助私网 IP。

注意

  • 辅助网卡仅使用主私网 IP 时,请不要填写该参数。
  • 辅助网卡所能够绑定的弹性公网 IP 总数量为:SecondaryPrivateIpAddressCount + 1

非必填

Ipv6AddressCount

1

VCI Pod 辅助网卡的 IPv6 地址数量,取值范围:1~2。
传入该参数后,系统自动从网卡所属子网中分配相应数量的空闲 IP 地址作为网卡的辅助私网 IP 地址。

非必填

配置示例

本文以指定子网创建 VCI 实例时,同时配置 IPv4/IPv6 双栈网络为例。创建 VCI 实例的详细操作,请参见 指定容器 vCPU 和内存创建实例指定 VCI 规格创建实例指定子网创建实例

Kubernetes 方式

下文以在 IPv4/IPv6 双栈集群中创建无状态负载(Deployment)为例。

  1. 通过 kubectl 连接双栈集群。详细操作,请参见 连接集群
  2. 创建 Deployment 的 YAML 文件。示例文件nginx-deployment.yaml代码如下:

    说明

    下方为示例代码,实际使用中,请自行更新参数取值并删除 辅助网卡配置信息 部分的注释信息。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name:  # Deployment名称。
    spec:
      replicas: 2  # Deployment 副本数量。
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          annotations:
            vke.volcengine.com/burst-to-vci: enforce  # 强制使用 VCI。
            vke.volcengine.com/preferred-subnet-ids: subnet-3tispp1nai****  # 指定子网 ID。
            vci.vke.volcengine.com/pod-ip-family: dualstack  # 主网卡使用的协议栈。
            vke.volcengine.com/preferred-network-interface:  # 辅助网卡配置信息。
                '[{
                   "Type":"Secondary",  # 网卡类型,必须填写 "Secondary",代表辅助网卡。
                   "SubnetIds":["subnet-os74b94e***"],  # 辅助网卡的子网 ID。
                   "SecurityGroupIds":["sg-123edfgt8***"],  # 辅助网卡所在的安全组 ID。
                   "SecondaryPrivateIpAddressCount": 1,  # 辅助网卡的辅助私网 IP 数量。
                   "Ipv6AddressCount": 1  # 辅助网卡的 IPv6 地址数量。
                  }]'
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: cr-cn-beijing.volces.com/tw/nginx:1.0  # 容器镜像的地址和版本,请配置为您自己的镜像地址。
            ports:
            - containerPort: 80
    
  3. 执行以下命令,创建 Deployment。
    kubectl create -f nginx-deployment.yaml
    
  4. 执行以下命令,获取 Pod 的信息。
    kubectl get pods -owide
    
    预期输出结果如下:
    NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE                      NOMINATED NODE   READINESS GATES
    nginx-deployment-6b9cd76fb8-ht2z2   1/1     Running   0          24m   192.168.0.2   vci-node1-cn-shanghai-a   <none>           <none>
    nginx-deployment-6b9cd76fb8-m7krc   1/1     Running   0          24m   192.168.0.3   vci-node1-cn-shanghai-a   <none>           <none>	
    
  5. 执行以下命令,获取 Pod 对应的 IPv4/IPv6 地址。
    kubectl describe pod <your_pod_name>
    
    预期输出结果如下,在IPs参数下,获取当前 Pod 的 IPv4 和 IPv6 地址:
    alt

控制台方式

下文以创建无状态负载(Deployment)为例,其他工作负载的创建方法与之相似。详细的操作步骤和参数说明,请参见 创建无状态负载

说明

弹性容器实例不支持守护进程(Daemonset)。更多信息,请参见 使用限制

  1. 创建以 弹性容器实例(VCI) 方式部署的无状态负载。
    alt
  2. 在创建无状态负载过程中,配置 实例注解
    alt
  3. 无状态负载详情页实例列表 页签,获取 VCI 实例所分配到的 IPv4/IPv6 地址。
    alt

使用 IPv6 地址进行公网通信

为 VCI Pod 配置 IPv4/IPv6 双栈网络后,VCI 实例将会获得由系统自动分配的 IPv6 地址,该地址可以直接用于私有网络(VPC)内的网络通信。如果希望通过该 IPv6 地址进行公网通信,则需要使用火山引擎的 IPv6 网关功能。

  1. 创建 IPv6 网关。详细操作,请参见 创建 IPv6 网关实例

    注意

    请确保 IPv6 网关所在的私有网络,与 VKE 集群(双栈集群)私有网络相同。

  2. 为 VCI 实例(Pod)所使用的 IPv6 地址开通公网带宽。详细操作,请参见 开通 IPv6 公网带宽
    成功开通公网带宽后,您的 VCI 实例,可通过 IPv6 地址进行公网通信。
  3. (可选)您可以通过以下配置,对 IPv6 公网流量进行访问控制和成本管理。
    • 若不希望 Pod 的 IPv6 地址被公网的 IPv6 终端访问,可创建 仅主动出规则,拒绝公网的 IPv6 终端访问。详细说明,请参见 创建仅主动出规则
    • 若有多个 Pod 的 IPv6 公网带宽,可通过创建共享带宽包,共享这些 IPv6 公网带宽,实现成本节约。详细操作,请参见 管理共享带宽包