ASM Serverless網關是ASM推出的全新服務網格網關形態,更適合應對突發流量,降低計算成本,提升穩定性。相比運行于數據面ACK Kubernetes集群之上的ASM網關形態,ASM Serverless網關具有高穩定性、高彈性和低成本的優勢,以Serverless的形式單獨部署,并完全由ASM管理,具備獨立于ACK Kubernetes集群的高可用性。本文介紹如何使用ASM Serverless網關,以及相關的網關日志以及監控指標介紹。
前提條件
已添加集群到ASM實例,且ASM版本為1.18.0.147或以上。
適用場景
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集群。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇
。在入口網關頁面,單擊使用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可以互相訪問。
步驟二:創建流量規則
創建HTTP域名。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇
。在入口網關頁面,單擊目標網關,在網關導航欄,單擊域名/證書,然后在域名頁簽,單擊創建。
在新建域名頁面,配置域名為*,協議為HTTP,端口名稱為http,端口為80,然后單擊創建。
導入productapge服務。
在網關導航欄,單擊上游服務,然后單擊導入服務。
在導入服務頁簽,選擇default命名空間,選中productapge,單擊圖標,然后單擊確認。
創建路由規則。
在網關導航欄,單擊路由管理,然后單擊創建。
在設置路由信息配置向導,配置路由類型為http,命名空間為default,路由名稱為productapge,在匹配規則區域,匹配方式選擇前綴,匹配內容為/,然后單擊下一步。
在設置路由目的地配置向導,配置選擇上游服務為productapge,然后單擊下一步。
在高級選項配置向導,單擊創建。
步驟三:通過Serverless網關訪問productpage應用
在瀏覽器地址欄輸入{網關IP地址}/productpage
,可以看到productpage的應用界面。關于如何獲取網關,請參見獲取入口網關地址。
步驟四:配置Serverless網關的訪問日志
配置網關訪問日志會導致網關重啟,請在業務低峰期操作。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇
。在入口網關頁面,在目標網關右側,單擊查看YAML,在YAML輸入框中增加注解
asm.alibabacloud.com/aliyun-logs-project: k8s-log-****
,配置日志服務Project。本示例將網關日志采集到ASM對應的LogProject。對應的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: ....
單擊確定,更新Serverless網關。
步驟五:配置HTTPS訪問
執行以下命令,生成證書。
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
創建證書。
創建HTTPS域名。
在左側導航欄,單擊入口網關,單擊目標網關,在網關導航欄,單擊域名/證書,然后在域名頁簽,單擊創建。
在新建域名頁面,配置域名為*,協議為HTTPS,端口名稱為https,端口為443,證書選擇myexample-credential,選中是否使用TLS保護連接,然后單擊創建。
執行以下命令,通過HTTPS協議訪問Serverless網關。
curl -k -H Host:aliyun.com --resolve aliyun.com:443:{替換成真實的入口網關IP地址} https://aliyun.com/productpage -I
步驟六:查看Serverless網關日志
FAQ
如何導出Serverless網關的監控指標?
已開啟ASM的指標生成和采集,且可以在將監控指標采集到可觀測監控Prometheus版。
頁面看到指標大盤。具體操作,請參見在Serverless網關的YAML中配置指標導出的annotations,格式為
asm.alibabacloud.com/export-metrics: ${ack-cluster-id}
。該功能僅支持ASM實例版本為1.18.0.147或以上。關于如何升級版本,請參見升級ASM實例。
annotations配置后,會將網關的Service和Endpoint同步到指定的ACK集群,然后在Prometheus的抓取配置中添加對應Endpoint的采集配置即可。
在ARMS控制臺,添加Endpoint的采集配置。
- 登錄ARMS控制臺。
在左側導航欄,單擊
,然后在頁面左上角選擇目標地域。在實例列表頁面,單擊Prometheus實例名稱,然后在左側導航欄,單擊設置。
在設置頁面的設置頁簽,單擊編輯Prometheus.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網關無法訪問后端應用該如何處理?
確保數據面集群的安全組沒有攔截來自Serverless網關的流量。
如果返回404、503等錯誤,請檢查流量規則配置及后端服務是否正常運行。