全部產品
Search
文件中心

Alibaba Cloud Service Mesh:建立IPv6網關

更新時間:Jun 30, 2024

相比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. 登入Container Service管理主控台,在左側導覽列選擇叢集

  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}