相比IPv4地址,IPv6地址具有更大地址空间,更高的安全性。本文介绍如何创建IPv6地址的ASM网关,和为已有ASM网关添加IPv6地址。
前提条件
已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
创建IPv6地址的ASM网关
您需要在创建ASM网关时添加service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "ipv6"
注解,声明该网关使用IPv6地址。
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在入口网关页面,单击使用YAML创建。
- 在创建页面,设置命名空间为istio-system,在文本框中输入以下内容,然后单击创建。
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 设置SLB的网络类型。可选: - internet:公网。
- intranet:私网。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec 设置SLB规格。可选:slb.s1.small、slb.s2.small、slb.s2.medium、slb.s3.small、slb.s3.medium、slb.s3.large。 service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version 设置值为 "ipv6"
,表示该SLB采用IPv6地址。网关创建成功后,在入口网关页面,可以查看网关Kubernetes服务列下的IPv6地址。
为已有ASM网关添加IPv6地址
如果您已创建ASM网关,且该网关使用的是IPv4地址,可以通过创建SLB的方式为已有ASM网关添加IPv6地址。配置后,您既可以使用IPv4地址,也可以使用IPv6地址。
- 登录容器服务管理控制台,在左侧导航栏中选择集群。
- 在集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择 。
- 在服务页面顶部,设置命名空间为istio-system,在右上角单击使用YAML创建资源。
- 在创建页面,设置示例模板为自定义,将以下内容复制到模板文本框中,单击创建。重要 nodePort不能与已有端口重复。
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 设置SLB的网络类型。可选: - internet:公网。
- intranet:私网。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec 设置SLB规格。可选:slb.s1.small、slb.s2.small、slb.s2.medium、slb.s3.small、slb.s3.medium、slb.s3.large。 service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version 设置值为 "ipv6"
,表示该SLB采用IPv6地址。创建服务成功后,在ACK集群的服务页面,可以查看istio-ingressgateway和istio-ingressgateway-2外部端点列下的IPv4地址和IPv6地址。这两个地址即为ASM网关的IPv4地址和IPv6地址。
FAQ
如何获取客户端原始IPv6地址?
- 对IPv6地址关联的SLB 实例进行配置,修改80和443端口对应的监听配置,在高级配置下开启对Proxy Protocol协议的支持。具体操作,请参见通过Proxy Protocol获取客户端真实IP(四层监听)。
- 创建Envoy过滤器模板。
- 将上一步创建的Envoy过滤器模板应用到ASM网关,使ASM网关支持Proxy Protocol协议。
- 在Envoy过滤器模板页面,单击目标模板右侧操作列下的编辑模板。
- 在编辑Envoy过滤器模板页面,单击绑定工作负载页签,然后单击选定工作负载绑定。
- 在选定工作负载绑定对话框,选择目标命名空间为istio-system、工作负载类型为Deployment,在未绑定区域,单击目标网关右侧的绑定,然后单击确定。
- 在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}