容器服务ACK支持IPv6双栈模式,您可以通过额外配置IPv6类型的LoadBalancer Service访问Nginx Ingress Controller,达到在公网使用IPv6的目的。本文介绍如何在Nginx Ingress上使用公网IPv6地址。

前提条件

  • 已创建IPv6双栈集群。创建集群时,选中IPv6双栈。具体操作,请参见创建Kubernetes专有版集群创建Kubernetes托管版集群
  • 已安装Nginx Ingress Controller组件。
    • 若需要新创建集群,请在创建集群时的组件配置向导页面,Ingress参数右侧选择Nginx Ingress。具体操作,请参见组件配置
    • 若已创建集群,但未安装Nginx Ingress Controller组件,请参见管理组件

背景信息

在创建IPv6集群时,集群中Nginx Ingress Controller所使用的LoadBalancer Service(默认为kube-system命名空间下的nginx-ingress-lb)已经通过双栈ClusterIP的形式支持了集群内的双栈访问。您可以直接通过kube-system命名空间下nginx-ingress-lb的ClutserIP或使用服务DNS名称来访问集群。示意图如下。Ingress IPv61.png
但默认的LoadBalancer Service上只绑定了IPv4的CLB,且同一个Service上只允许绑定一个CLB。因此,需要创建一个新的LoadBalancer Service来绑定IPv6 CLB对外提供公网IPv6地址。如下图所示。Ingress IPv62.png
说明 本文示例的操作会创建一个新的IPv6 CLB实例,因此会产生额外费用。计费详情请参见CLB按量计费说明

操作步骤

  1. 使用以下YAML示例,创建IPv6类型的LoadBalancer Service。
    对于默认Nginx Ingress Controller组件,推荐您在kube-system命名空间下使用nginx-ingress-lb-v6来作为IPv6类型的Service名称。YAML示例如下。
    apiVersion: v1
    kind: Service
    metadata:
     name: nginx-ingress-lb-v6
     namespace: kube-system
     labels:
       app: nginx-ingress-lb
     annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s2.small  #指定CLB的规格。
        service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet   #指定CLB的类型为公网。
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: ipv6    #在CLB上使用IPv6地址对外提供访问。
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-ip-version: ipv6  #使用IPv6作为CLB后端挂载地址。
    spec:
     type: LoadBalancer
     externalTrafficPolicy: Local
     ipFamilyPolicy: PreferDualStack
     ports:
     - port: 80
       name: http
       targetPort: 80
     - port: 443
       name: https
       targetPort: 443
     selector:
       app: ingress-nginx
    说明
    • 关于CLB实例规格的更多信息,请参见实例规格
    • 当前暂不支持创建IPv6类型的私网CLB。
  2. 执行以下命令,创建名为nginx-ingress-lb-v6的服务,并通过其公开应用。
    kubectl apply -f nginx-ingress-lb-v6.yaml

验证结果

您可以通过以下任意一种方式验证外部端点是否已经分配成功:
  • 通过容器服务管理控制台,查看外部端点。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择网络 > 服务
    5. 服务页面,查看外部端点Ingress IPv6.png
  • 执行以下命令,通过Kubectl查看服务状态。
    kubectl get svc -n kube-system nginx-ingress-lb-v6
    预期输出:
    NAME                  TYPE           CLUSTER-IP       EXTERNAL-IP          PORT(S)                      AGE
    nginx-ingress-lb-v6   LoadBalancer   192.168.252.52   2408:XXXX:1f8::205   80:30587/TCP,443:30217/TCP   13m
    由预期输出的EXTERNAL-IP可得外部端点。
说明 若外部端点没有更新,请参见Service FAQ

相关操作

云解析控制台上为您的域名添加AAAA记录。具体操作,请参见添加解析记录