Sidecar代理用於增強服務調用之間的網路安全性、可靠性以及可觀測性。ASM對Istio中的Sidecar代理配置進行了細化,提供了命名空間層級的配置能力,協助您更好的管理Sidecar代理。本文介紹如何按照命名空間設定Sidecar代理的資源、生命週期、終止等待時間長度等。
前提條件
- 已建立ASM執行個體,且ASM執行個體為1.10.5或以上版本。具體操作,請參見建立ASM執行個體。
已建立Kubernetes託管版叢集。具體操作,請參見建立ACK託管叢集。
已添加叢集到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。
- 已開啟自動注入。具體操作,請參見配置Sidecar注入策略。
背景資訊
ASM按照命名空間設定的Sidecar代理功能的詳細描述如下:功能 | 描述 |
設定注入的Istio代理資源 | 設定注入的Istio代理所需資源和資源限制。 |
設定istio-init初始化容器資源 | 設定istio-init初始化容器所需資源和資源限制。 |
按連接埠和地址來啟用或禁用Sidecar代理 | 設定攔截對外訪問地址、不攔截對外訪問地址、按連接埠使入口流量免於經過Sidecar代理和按連接埠使出口流量免於經過Sidecar代理。 |
設定Sidecar代理生命週期 | 設定Sidecar代理生命週期。更多資訊,請參見Container Lifecycle Hooks。 |
設定Sidecar代理終止等待時間長度 | 自訂terminationDrainDuration串連時間長度,表示Pod停止時,存量的串連最多等待多長時間後強制銷毀Sidecar代理。 |
啟用DNS代理功能 | 啟用DNS代理功能,當收到來自應用程式的DNS查詢時,Istio代理將進行透明地攔截並提供解析能力。 |
優先順序關係
您可以使用Pod Annotation的方式、按照命名空間層級和全域設定Sidecar代理。這三種方式具有以下優先順序關係:
使用Pod Annotation的方式>命名空間層級設定Sidecar代理配置>全域的Sidecar代理設定的優先順序
設定注入的Istio代理資源
登入ASM控制台。
在左側導覽列,選擇 。
在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
- 在網格詳情頁面左側導覽列選擇 。
- 在Sidecar代理配置頁面單擊命名空間頁簽。
- 選擇配置的命名空間,單擊注入的Istio代理資源設定左側的表徵圖,設定Istio資源參數,然後單擊更新設定。
參數 描述 資源限制 Istio代理資源最大能申請到的CPU和記憶體,本文設定為CPU為2,記憶體為1025。 所需資源 Istio代理資源運行時最小使用的CPU和記憶體,本文設定為CPU為0.1,記憶體為128。 - 重啟Pod,使Sidecar配置生效。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇 。
- 在容器組頁簽單擊目標Pod右側操作列下的刪除。
- 在刪除容器組對話方塊中單擊確定。稍等一段時間,容器重啟後配置生效。
- 查看設定的Istio代理資源。
- 在容器組頁簽單擊目標Pod名稱。
- 在容器頁簽下單擊istio-proxy左側的表徵圖。可以看到Istio代理資源,與所設定的值相同,說明設定Istio代理資源成功。
設定istio-init初始化容器資源
登入ASM控制台。
在左側導覽列,選擇 。
在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
- 在網格詳情頁面左側導覽列選擇 。
- 在Sidecar代理配置頁面單擊命名空間頁簽。
- 選擇配置的命名空間,單擊istio-init初始化容器資源限制左側的表徵圖,設定Istio資源參數,然後單擊更新設定。
參數 描述 資源限制 Istio-init初始化容器資源最大能申請到的CPU和記憶體。本文設定COU為0.916 Core,記憶體為512 MiB。 所需資源 Istio-init初始化容器資源運行時最小使用的CPU和記憶體。本文設定COU為0.016 Core,記憶體為18 MiB。 - 重啟Pod,使Sidecar配置生效。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇 。
- 在容器組頁簽單擊目標Pod右側操作列下的刪除。
- 在刪除容器組對話方塊中單擊確定。稍等一段時間,容器重啟後配置生效。
- 執行以下命令,查看設定的istio-init初始化容器資源。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
- name: DNS_AGENT image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:1.10.5 imagePullPolicy: IfNotPresent name: istio-init resources: limits: cpu: 916m memory: 512Mi requests: cpu: 16m memory: 18Mi securityContext: allowPrivilegeEscalation: false
按連接埠和地址來啟用或禁用Sidecar代理
登入ASM控制台。
在左側導覽列,選擇 。
在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
- 在網格詳情頁面左側導覽列選擇 。
- 在Sidecar代理配置頁面單擊命名空間頁簽。
- 選擇配置的命名空間,單擊按連接埠和地址來啟用/禁用Sidecar代理左側的表徵圖,根據實際情況設定攔截對外訪問的地址訪問、不攔截對外訪問的位址範圍、設定連接埠使入口流量經過Sidecar代理、設定連接埠使出口流量經過Sidecar代理、設定連接埠使入口流量免於經過Sidecar代理、設定連接埠使出口流量免於經過Sidecar代理,然後單擊更新設定。本文設定攔截對外訪問的地址訪問為192.168.1.2/32,不攔截對外訪問的位址範圍192.168.1.1/32,設定連接埠使入口流量經過Sidecar代理為*,設定連接埠使出口流量免於經過Sidecar代理為7015,7016,設定連接埠使入口流量免於經過Sidecar代理為7015,7016,設定連接埠使出口流量免於經過Sidecar代理為7011,7012,
- 重啟Pod,使Sidecar配置生效。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇 。
- 在容器組頁簽單擊目標Pod右側操作列下的刪除。
- 在刪除容器組對話方塊中單擊確定。稍等一段時間,容器重啟後配置生效。
- 執行以下命令,查看容器啟用或禁用Sidecar代理情況。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
- "15001" - -z - "15006" - -u - "1337" - -m - REDIRECT - -i - 192.168.1.2/32 - -x - 192.168.0.1/32,192.168.1.1/32 - -b - '*' - -d - 15090,15021,15081,9191,7013,7014 - -o - 7011,7012
設定Sidecar代理生命週期
登入ASM控制台。
在左側導覽列,選擇 。
在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
- 在網格詳情頁面左側導覽列選擇 。
- 在Sidecar代理配置頁面單擊命名空間頁簽。
- 選擇配置的命名空間,單擊Sidecar代理生命週期左側的表徵圖,根據實際情況修改以下內容,然後複製到文字框中,然後單擊更新設定。
{ "postStart": { "exec": { "command": [ "pilot-agent", "wait" ] } }, "preStop": { "exec": { "command": [ "/bin/sh", "-c", "sleep 13" ] } } }
- postStart參數下的command:設定啟用Sidecar容器後的操作,本文設定為啟用Sidecar容器後等待pilot-agent啟動。
- preStop參數下的command:設定停止Sidecar容器前的操作,本文設定為停止Sidecar容器前休眠13秒。
- 重啟Pod,使Sidecar配置生效。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇 。
- 在容器組頁簽單擊目標Pod右側操作列下的刪除。
- 在刪除容器組對話方塊中單擊確定。稍等一段時間,容器重啟後配置生效。
- 執行以下命令,查看設定的Sidecar代理生命週期。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
- name: TERMINATION_DRAIN_DURATION_SECONDS value: "5" image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:1.10.5 imagePullPolicy: IfNotPresent lifecycle: postStart: exec: command: - pilot-agent - wait preStop: exec: command: - /bin/sh - -c - sleep 13 name: istio-proxy
設定Sidecar代理終止等待時間長度
登入ASM控制台。
在左側導覽列,選擇 。
在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
- 在網格詳情頁面左側導覽列選擇 。
- 在Sidecar代理配置頁面單擊命名空間頁簽。
- 選擇配置的命名空間,單擊Sidecar代理終止等待時間長度左側的表徵圖,然後輸入等待時間長度,本文設定Sidecar代理終止等待時間長度為10s,然後單擊更新設定。
- 重啟Pod,使Sidecar配置生效。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇 。
- 在容器組頁簽單擊目標Pod右側操作列下的刪除。
- 在刪除容器組對話方塊中單擊確定。稍等一段時間,容器重啟後配置生效。
- 查看Sidecar代理終止等待時間長度。
- 在容器組頁簽單擊目標Pod名稱。
- 在容器頁簽下單擊istio-proxy左側的表徵圖。可以看到Sidecar代理終止等待時間長度,與所設定的值相同,說明設定Sidecar代理終止等待時間長度成功。
啟用DNS代理功能
登入ASM控制台。
在左側導覽列,選擇 。
在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
- 在網格詳情頁面左側導覽列選擇 。
- 在Sidecar代理配置頁面單擊命名空間頁簽。
- 選擇配置的命名空間,單擊啟用DNS代理功能左側的表徵圖,選中啟用DNS代理功能,然後單擊更新設定。
- 重啟Pod,使DNS配置生效。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇 。
- 在容器組頁簽單擊目標Pod右側操作列下的刪除。
- 在刪除容器組對話方塊中單擊確定。稍等一段時間,容器重啟後配置生效。
- 執行以下命令,查看設定的DNS代理。
kubectl get pod -n <命名空間名稱> <Pod名稱> -o yaml
預期輸出:
- name: TRUST_DOMAIN value: cluster.local - name: DNS_AGENT - name: TERMINATION_DRAIN_DURATION_SECONDS value: "10" - name: ISTIO_META_DNS_AUTO_ALLOCATE value: "true" - name: ISTIO_META_DNS_CAPTURE value: "true" image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:v1.10.5-33-gba0adb2df7-pro-aliyun imagePullPolicy: IfNotPresent -- -- - 7011,7012 - -q - 7015,7016 env: - name: DNS_AGENT - name: ISTIO_META_DNS_AUTO_ALLOCATE value: "true" - name: ISTIO_META_DNS_CAPTURE value: "true" image: registry-vpc.cn-hangzhou.aliyuncs.com/acs/proxyv2:v1.10.5-33-gba0adb2df7-pro-aliyun