全部產品
Search
文件中心

Alibaba Cloud Service Mesh:設定命名空間層級的Sidecar代理

更新時間:Jun 30, 2024

Sidecar代理用於增強服務調用之間的網路安全性、可靠性以及可觀測性。ASM對Istio中的Sidecar代理配置進行了細化,提供了命名空間層級的配置能力,協助您更好的管理Sidecar代理。本文介紹如何按照命名空間設定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代理資源

  1. 登入ASM控制台

  2. 在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  4. 在網格詳情頁面左側導覽列選擇Sidecar管理(資料面) > Sidecar代理配置
  5. Sidecar代理配置頁面單擊命名空間頁簽。
  6. 選擇配置的命名空間,單擊注入的Istio代理資源設定左側的Istio代理表徵圖,設定Istio資源參數,然後單擊更新設定
    參數描述
    資源限制Istio代理資源最大能申請到的CPU和記憶體,本文設定為CPU為2,記憶體為1025。
    所需資源Istio代理資源運行時最小使用的CPU和記憶體,本文設定為CPU為0.1,記憶體為128。
  7. 重啟Pod,使Sidecar配置生效。
    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁簽單擊目標Pod右側操作列下的刪除
    6. 刪除容器組對話方塊中單擊確定
      稍等一段時間,容器重啟後配置生效。
  8. 查看設定的Istio代理資源。
    1. 容器組頁簽單擊目標Pod名稱。
    2. 在容器頁簽下單擊istio-proxy左側的Istio代理表徵圖。
      可以看到Istio代理資源,與所設定的值相同,說明設定Istio代理資源成功。Istio代理資源

設定istio-init初始化容器資源

  1. 登入ASM控制台

  2. 在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  4. 在網格詳情頁面左側導覽列選擇Sidecar管理(資料面) > Sidecar代理配置
  5. Sidecar代理配置頁面單擊命名空間頁簽。
  6. 選擇配置的命名空間,單擊istio-init初始化容器資源限制左側的Istio代理表徵圖,設定Istio資源參數,然後單擊更新設定
    參數描述
    資源限制Istio-init初始化容器資源最大能申請到的CPU和記憶體。本文設定COU為0.916 Core,記憶體為512 MiB。
    所需資源Istio-init初始化容器資源運行時最小使用的CPU和記憶體。本文設定COU為0.016 Core,記憶體為18 MiB。
  7. 重啟Pod,使Sidecar配置生效。
    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁簽單擊目標Pod右側操作列下的刪除
    6. 刪除容器組對話方塊中單擊確定
      稍等一段時間,容器重啟後配置生效。
  8. 執行以下命令,查看設定的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代理

  1. 登入ASM控制台

  2. 在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  4. 在網格詳情頁面左側導覽列選擇Sidecar管理(資料面) > Sidecar代理配置
  5. Sidecar代理配置頁面單擊命名空間頁簽。
  6. 選擇配置的命名空間,單擊按連接埠和地址來啟用/禁用Sidecar代理左側的Istio代理表徵圖,根據實際情況設定攔截對外訪問的地址訪問不攔截對外訪問的位址範圍設定連接埠使入口流量經過Sidecar代理設定連接埠使出口流量經過Sidecar代理設定連接埠使入口流量免於經過Sidecar代理設定連接埠使出口流量免於經過Sidecar代理,然後單擊更新設定
    本文設定攔截對外訪問的地址訪問為192.168.1.2/32,不攔截對外訪問的位址範圍192.168.1.1/32,設定連接埠使入口流量經過Sidecar代理為*,設定連接埠使出口流量免於經過Sidecar代理為7015,7016,設定連接埠使入口流量免於經過Sidecar代理為7015,7016,設定連接埠使出口流量免於經過Sidecar代理為7011,7012,
  7. 重啟Pod,使Sidecar配置生效。
    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁簽單擊目標Pod右側操作列下的刪除
    6. 刪除容器組對話方塊中單擊確定
      稍等一段時間,容器重啟後配置生效。
  8. 執行以下命令,查看容器啟用或禁用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代理生命週期

  1. 登入ASM控制台

  2. 在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  4. 在網格詳情頁面左側導覽列選擇Sidecar管理(資料面) > Sidecar代理配置
  5. Sidecar代理配置頁面單擊命名空間頁簽。
  6. 選擇配置的命名空間,單擊Sidecar代理生命週期左側的Istio代理表徵圖,根據實際情況修改以下內容,然後複製到文字框中,然後單擊更新設定
    {
      "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秒。
  7. 重啟Pod,使Sidecar配置生效。
    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁簽單擊目標Pod右側操作列下的刪除
    6. 刪除容器組對話方塊中單擊確定
      稍等一段時間,容器重啟後配置生效。
  8. 執行以下命令,查看設定的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代理終止等待時間長度

  1. 登入ASM控制台

  2. 在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  4. 在網格詳情頁面左側導覽列選擇Sidecar管理(資料面) > Sidecar代理配置
  5. Sidecar代理配置頁面單擊命名空間頁簽。
  6. 選擇配置的命名空間,單擊Sidecar代理終止等待時間長度左側的Istio代理表徵圖,然後輸入等待時間長度,本文設定Sidecar代理終止等待時間長度為10s,然後單擊更新設定
  7. 重啟Pod,使Sidecar配置生效。
    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁簽單擊目標Pod右側操作列下的刪除
    6. 刪除容器組對話方塊中單擊確定
      稍等一段時間,容器重啟後配置生效。
  8. 查看Sidecar代理終止等待時間長度。
    1. 容器組頁簽單擊目標Pod名稱。
    2. 在容器頁簽下單擊istio-proxy左側的Istio代理表徵圖。
      可以看到Sidecar代理終止等待時間長度,與所設定的值相同,說明設定Sidecar代理終止等待時間長度成功。終止等待時間長度

啟用DNS代理功能

  1. 登入ASM控制台

  2. 在左側導覽列,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理

  4. 在網格詳情頁面左側導覽列選擇Sidecar管理(資料面) > Sidecar代理配置
  5. Sidecar代理配置頁面單擊命名空間頁簽。
  6. 選擇配置的命名空間,單擊啟用DNS代理功能左側的Istio代理表徵圖,選中啟用DNS代理功能,然後單擊更新設定
  7. 重啟Pod,使DNS配置生效。
    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 容器組

    5. 容器組頁簽單擊目標Pod右側操作列下的刪除
    6. 刪除容器組對話方塊中單擊確定
      稍等一段時間,容器重啟後配置生效。
  8. 執行以下命令,查看設定的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