创建IPv6网关

相比IPv4地址,IPv6地址具有更大地址空间,更高的安全性。本文介绍如何创建IPv6地址的ASM网关,和为已有ASM网关添加IPv6地址。

前提条件

已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例

方式一:创建IPv6地址的ASM网关

您需要在创建ASM网关时添加service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "ipv6"注解,声明该网关使用IPv6地址。

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

  3. 入口网关页面,单击使用YAML创建

  4. 创建页面,设置命名空间istio-system,在文本框中输入以下内容,然后单击创建

    clusterIds字段值请配置为实际数据面集群ID。

    展开查看YAML示例

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: ingressgateway
      namespace: istio-system
    spec:
      gatewayType: ingress
      clusterIds:
        - c808cdd6abd854d5ba6764da5ca2e****          # 请替换为实际数据面集群ID。
      ports:
        - name: http-0
          port: 80
          targetPort: 80
          protocol: HTTP
        - name: https-1
          port: 443
          targetPort: 443
          protocol: HTTPS
      serviceAnnotations:
        service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "ipv6"
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 4G
        requests:
          cpu: 200m
          memory: 256Mi
      serviceType: LoadBalancer
      autoCreateGatewayYaml: true                      

    字段

    说明

    service.beta.kubernetes.io/alicloud-loadbalancer-address-type

    设置CLB的网络类型。可选:

    • internet:公网。

    • intranet:私网。

    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec

    设置CLB规格。可选:slb.s1.smallslb.s2.small、slb.s2.medium、slb.s3.smallslb.s3.mediumslb.s3.large

    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version

    设置值为"ipv6",表示该CLB采用IPv6地址。

    网关创建成功后,在入口网关页面,可以看到目标网关的服务地址为IPv6地址。

方式二:为已有ASM网关添加IPv6地址

如果您已创建ASM网关,且该网关使用的是IPv4地址,可以通过创建CLB的方式为已有ASM网关添加IPv6地址。配置后,您既可以使用IPv4地址,也可以使用IPv6地址。

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务

  3. 服务页面顶部,设置命名空间istio-system,在右上角单击使用YAML创建资源

  4. 创建页面,设置示例模板自定义,将以下内容复制到模板文本框中,单击创建

    重要

    nodePort不能与已有端口重复。

    展开查看YAML示例

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "ipv6"
      labels:
        app: istio-ingressgateway
        asm-system: 'true'
        istio: ingressgateway
      name: istio-ingressgateway-2
      namespace: istio-system
    spec:
      externalTrafficPolicy: Cluster
      ports:
        - name: http-0
          nodePort: 30544
          port: 80
          protocol: TCP
          targetPort: 80
        - name: https-2
          nodePort: 30682
          port: 443
          protocol: TCP
          targetPort: 443
      selector:
        app: istio-ingressgateway
        asm-system: 'true'
        istio: ingressgateway
        provider: asm
      sessionAffinity: None
      type: LoadBalancer
                            

    字段

    说明

    service.beta.kubernetes.io/alicloud-loadbalancer-address-type

    设置CLB的网络类型。可选:

    • internet:公网。

    • intranet:私网。

    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec

    设置CLB规格。可选:slb.s1.smallslb.s2.smallslb.s2.mediumslb.s3.smallslb.s3.mediumslb.s3.large

    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version

    设置值为"ipv6",表示该CLB采用IPv6地址。

    创建服务成功后,您可以在服务页面的External IP列,查看istio-ingressgateway和istio-ingressgateway-2对应的IPv4地址和IPv6地址。这两个地址即为ASM网关的IPv4地址和IPv6地址。

    image

FAQ

如何获取客户端原始IPv6地址?

  1. 对IPv6地址关联的CLB实例进行配置,修改80和443端口对应的监听配置,在高级配置下开启对Proxy Protocol协议的支持。具体操作,请参见通过CLB四层监听获取客户端真实IP

  2. 创建Envoy过滤器模板。

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择插件扩展中心 > Envoy过滤器模板,然后单击创建Envoy过滤器模板

    3. 创建页面,输入模板名称,单击添加Envoy过滤器模板适配版本,选择适配Isito版本,配置如下YAML,然后单击创建

      apiVersion: networking.istio.io/v1alpha3
      kind: EnvoyFilter
      metadata:
        name: proxy-protocol
        namespace: istio-system
      spec:
        configPatches:
        - applyTo: LISTENER
          patch:
            operation: MERGE
            value:
              listener_filters:
              - name: envoy.listener.proxy_protocol
              - name: envoy.listener.tls_inspector
        workloadSelector:
          labels:
            istio: ingressgateway
  3. 将上一步创建的Envoy过滤器模板应用到ASM网关,使ASM网关支持Proxy Protocol协议。

    1. Envoy过滤器模板页面,单击目标模板右侧操作列下的编辑模板

    2. 编辑Envoy过滤器模板页面,单击绑定工作负载页签,然后单击选定工作负载绑定

    3. 选定工作负载绑定对话框,选择目标命名空间istio-system工作负载类型Deployment,在未绑定区域,单击目标网关右侧的绑定,然后单击确定

  4. 在IPv6网络下访问网关的IPv6 URL,查看对应的网关日志。

    网关日志示例如下。downstream_remote_address字段值为客户端的原始IPv6地址。

    {"upstream_cluster":null,"bytes_received":0,"downstream_local_address":"[2400:XXXX:1300::12d1]:80","upstream_service_time":null,"FILTER_CHAIN_NAME":null,"path":"/","x_forwarded_for":"2402:XXXX:1800:af00:0:9671:f00f:314b","upstream_host":null,"bytes_sent":0,"requested_server_name":null,"route_name":null,"response_flags":"NR","start_time":"2022-12-28T06:41:57.796Z","upstream_transport_failure_reason":null,"protocol":"HTTP/1.1","authority":"[2400:XXXX:1300::12d1]","LOCAL_REPLY_BODY":"","duration":0,"method":"GET","downstream_remote_address":"[2402:XXXX:1800:af00:0:9671:f00f:314b]:58272","request_id":"fee2b69a-b755-986b-91e4-5d228c81****","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36","trace_id":null,"authority_for":"[2400:XXXX:1300::12d1]","upstream_local_address":null,"istio_policy_status":null,"response_code":404}