全部產品
Search
文件中心

Alibaba Cloud Service Mesh:使用ASM Serverless網關提升高可用性和彈性

更新時間:Jun 30, 2024

ASM Serverless網關是ASM推出的全新Service Mesh網關形態,更適合應對突發流量,降低計算成本,提升穩定性。相比運行於資料面ACK Kubernetes叢集之上的ASM網關形態,ASM Serverless網關具有高穩定性、高彈性和低成本的優勢,以Serverless的形式單獨部署,並完全由ASM管理,具備獨立於ACK Kubernetes叢集的高可用性。本文介紹如何使用ASM Serverless網關,以及相關的網關日誌以及監控指標介紹。

前提條件

適用情境

ASM Serverless網關更適合應對突發流量,降低計算成本,提升穩定性。典型的情境包括:

  • 有明顯波峰波穀的線上業務:例如線上教育、電商等業務通常有明顯的波峰波穀,ASM Serverless網關可以更快速的應對突發流量,顯著減少固定資源集區的維護,降低計算成本。

  • 多叢集情境:例如有兩個ACK叢集同時加入了某一個ASM執行個體,ASM Serverless網關並不部署在某個ACK Kubernetes叢集中,可以提供獨立於Kubernetes叢集的高可用性。

步驟一:部署ASM Serverless入口網關

目前僅支援使用YAML建立。與運行於資料面ACK Kubernetes叢集之上的ASM網關形態相比,ASM Serverless網關增加了一個註解 asm.alibabacloud.com/managed-by-asm: 'true',並且無需填寫資料面ACK Kubernetes叢集ID。如果需要採集監控指標,可以通過註解 asm.alibabacloud.com/export-metrics將該網關的監控指標匯出到對應的目標資料面ACK Kubernetes叢集。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

  3. 入口網關頁面,單擊使用YAML建立,輸入網關名稱,配置如下YAML,然後單擊建立

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      annotations:
        asm.alibabacloud.com/managed-by-asm: 'true'
        asm.alibabacloud.com/export-metrics: 'ack-cluster-id'
      name: ingressgateway
      namespace: istio-system
    spec:
      gatewayType: ingress
      dnsPolicy: ClusterFirst
      externalTrafficPolicy: Local
      hostNetwork: false
      ports:
        - name: http
          port: 80
          protocol: TCP
          targetPort: 80
        - name: https
          port: 443
          protocol: TCP
          targetPort: 443
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 100%
      rollingMaxUnavailable: 25%
      runAsRoot: true
      serviceType: LoadBalancer

    注意:當前Serverless網關支援LoadBalancer和ClusterIP類型的Service。如果選擇了ClusterIP,需要保證用戶端與網關Pod網路互相打通,例如Terway網路外掛程式預設同一VPC下的Pod可以互相訪問。

步驟二:建立流量規則

  1. 建立HTTP網域名稱。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

    3. 入口網關頁面,單擊目標網關,在網關導覽列,單擊網域名稱/認證,然後在網域名稱頁簽,單擊建立

    4. 建立網域名稱頁面,配置網域名稱*協議HTTP連接埠名稱http連接埠80,然後單擊建立

  2. 匯入productapge服務。

    1. 在網關導覽列,單擊上遊服務,然後單擊匯入服務

    2. 匯入服務頁簽,選擇default命名空間,選中productapge,單擊Dingtalk_20230302182310.png表徵圖,然後單擊確認

  3. 建立路由規則。

    1. 在網關導覽列,單擊路由管理,然後單擊建立

    2. 設定路由資訊設定精靈,配置路由類型http命名空間default路由名稱productapge,在匹配規則地區,匹配方式選擇首碼匹配內容/,然後單擊下一步

    3. 設定路由目的地設定精靈,配置選擇上遊服務productapge,然後單擊下一步

    4. 進階選項設定精靈,單擊建立

步驟三:通過Serverless網關訪問productpage應用

在瀏覽器地址欄輸入{網關IP地址}/productpage,可以看到productpage的應用介面。關於如何擷取網關,請參見擷取入口網關地址

步驟四:配置Serverless網關的訪問日誌

重要

配置網關訪問日誌會導致網關重啟,請在業務低峰期操作。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

  3. 入口網關頁面,在目標網關右側,單擊查看YAML,在YAML輸入框中增加註解 asm.alibabacloud.com/aliyun-logs-project: k8s-log-****,配置Log ServiceProject。

    本樣本將網關日誌採集到ASM對應的LogProject。對應的YAML樣本如下:

    展開查看ingressgateway.yaml

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      annotations:
        asm.alibabacloud.com/managed-by-asm: 'true'
        asm.alibabacloud.com/aliyun-logs-project: mesh-log-c4e1bbed247634d0482000d94e947****
      name: ingressgateway
      namespace: istio-system
    spec:
     ....
  4. 單擊確定,更新Serverless網關。

步驟五:配置HTTPS訪問

  1. 執行以下命令,產生認證。

    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt 
    openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
    openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
  2. 建立認證。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 認證管理

    3. 在認證管理頁面,單擊建立,然後在認證資訊面板,配置相關資訊,然後單擊確定。

      配置項

      說明

      名稱

      認證名稱,本樣本為myexample-credential。

      密鑰憑證

      步驟五.1產生的aliyun.com.crt內容。

      私密金鑰

      步驟五.1產生的aliyun.com.key內容。

  3. 建立HTTPS網域名稱。

    1. 在左側導覽列,單擊入口網關,單擊目標網關,在網關導覽列,單擊網域名稱/認證,然後在網域名稱頁簽,單擊建立

    2. 建立網域名稱頁面,配置網域名稱*協議HTTPS連接埠名稱https連接埠443認證選擇myexample-credential,選中是否使用TLS保護串連,然後單擊建立

  4. 執行以下命令,通過HTTPS協議訪問Serverless網關。

    curl -k -H Host:aliyun.com --resolve aliyun.com:443:{替換成真實的入口網關IP地址}  https://aliyun.com/productpage -I

步驟六:查看Serverless網關日誌

  1. 登入Log Service控制台

  2. Project列表地區,單擊目標日誌名稱(步驟四.1配置的日誌名稱),然後在左側導覽列,單擊Dingtalk_20231122151017.png表徵圖(日誌儲存),在日誌庫單擊mesh-ingress-log,在搜尋方塊輸入productpage,然後單擊查詢/分析

    託管網關日誌.png

FAQ

如何匯出Serverless網關的監控指標?

  1. 已開啟ASM的指標產生和採集,且可以在可觀測管理中心 > 監控指標頁面看到指標大盤。具體操作,請參見將監控指標採集到可觀測監控Prometheus版

  2. 在Serverless網關的YAML中配置指標匯出的annotations,格式為asm.alibabacloud.com/export-metrics: ${ack-cluster-id}

    該功能僅支援ASM執行個體版本為1.18.0.147或以上。關於如何升級版本,請參見升級ASM執行個體

    annotations配置後,會將網關的Service和Endpoint同步到指定的ACK叢集,然後在Prometheus的抓取配置中添加對應Endpoint的採集配置即可。

  3. 在ARMS控制台,添加Endpoint的採集配置。

    1. 登入ARMS控制台
    2. 在左側導覽列,單擊Prometheus 監控 > 執行個體列表,然後在頁面左上方選擇目標地區。

    3. 執行個體列表頁面,單擊Prometheus執行個體名稱,然後在左側導覽列,單擊設定

    4. 設定頁面的設定頁簽,單擊編輯Prometheus.yaml,添加如下配置,然後單擊儲存

      展開查看YAML

      scrape_configs:
      - job_name: istio-system/managed-envoy
        honor_timestamps: true
        honor_labels: false
        scrape_interval: 30s
        scheme: http
        metrics_path: /stats/prometheus
        relabel_configs:
        - regex: 'true'
          action: keep
          source_labels:
          - __meta_kubernetes_service_labelpresent_asm_sync_target
          replacement: $1
          separator: ;
        - regex: http-envoy-prom
          action: keep
          source_labels:
          - __meta_kubernetes_endpoint_port_name
          replacement: $1
          separator: ;
        - regex: (.*)
          action: replace
          source_labels:
          - __meta_kubernetes_namespace
          replacement: $1
          separator: ;
          target_label: namespace
        metric_relabel_configs:
        - regex: envoy_.*
          action: drop
          source_labels:
          - __name__
          replacement: $1
          separator: ;
        kubernetes_sd_configs:
        - role: endpoints
          namespaces: {}
          follow_redirects: true
        scrape_timeout: 10s

Serverless網關無法訪問後端應用該如何處理?

  1. 確保資料面叢集的安全性群組沒有攔截來自Serverless網關的流量。

    1. 查看ASM的vSwitch網段。

      1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

      2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格執行個體 > 基本資料

      3. 基本資料頁面,單擊交換器右側的連結,然後在交換器詳情頁面,查看對應的網段。

    2. 查看資料面叢集的安全性群組資訊。

      1. 登入Container Service管理主控台,在左側導覽列選擇叢集

      2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

      3. 叢集資訊頁面,單擊叢集資源頁簽,然後單擊安全性群組右側的連結。

      4. 在安全性群組詳情頁面,查看安全性群組的入方向規則,確保該規則包含ASM的vSwitch網段,以及後端服務的Pod連接埠。

  2. 如果返回404、503等錯誤,請檢查流量規則配置及後端服務是否正常運行。