啟用叢集內控制層的選用功能

本頁說明如何使用叢內控制層,在 Cloud Service Mesh 中啟用選用功能。

安裝叢集內 Cloud Service Mesh 時,預設啟用的功能會因平台而異。安裝 (或升級) Cloud Service Mesh 時,您可以加入疊加檔案,覆寫預設設定並啟用選用功能。疊加檔案是包含 IstioOperator 自訂資源 (CR) 的 YAML 檔案,您可使用該檔案設定控制平面。每個疊加層檔案只能指定一項功能。您可以疊加更多覆疊,每個覆疊檔案都會覆寫前幾層的設定。

關於重疊檔案

這個頁面上的疊加層檔案位於 GitHub 的 anthos-service-mesh 套件中。這些檔案包含預設設定的常見自訂項目。您可以直接使用這些檔案,或視需要進行其他變更。

使用 asmcli 指令碼安裝 Cloud Service Mesh 時,可以透過 --option--custom_overlay 選項指定一或多個疊加檔案。如果不需要變更 anthos-service-mesh 存放區中的任何檔案,可以使用 --option,腳本會為您從 GitHub 擷取檔案。否則,您可以變更疊加層檔案,然後使用 --custom_overlay 選項將其傳遞至 asmcli

請勿在一個重疊檔案中加入多個 CR 為每個 CR 分別建立疊加層檔案
一個 YAML 檔案中有多個 CR 每個 CR 各自的 yaml 檔案

如何啟用選用功能

下列範例經過簡化,僅顯示如何使用自訂疊加層啟用選用功能。將 OTHER_FLAGS 替換為必要安裝旗標

asmcli install 指令提供兩種啟用選用功能的方式。使用的方法取決於是否需要變更疊加檔案。

  • 如果不需要對疊加檔案進行任何變更,請使用 --option。使用 --option 時,asmcli 會從 GitHub 存放區擷取檔案,因此您必須連上網際網路。

    ./asmcli install \
      OTHER_FLAGS \
      --option OPTION_NAME
    

    OPTION_NAME 替換為要啟用的選項。請務必省略 .yaml 副檔名,只加入疊加檔案的名稱,例如 iap-operatorattached-cluster。如需選項清單,請參閱 anthos-service-mesh 套件。

  • 如要自訂疊加層檔案,請使用 --custom_overlay

    ./asmcli install \
      OTHER_FLAGS \
      --custom_overlay PATH_TO_FILE
    

    PATH_TO_FILE 替換為要使用的疊加層檔案路徑。

選用功能的 YAML

以下各節提供 YAML,可啟用選用和支援的功能。

mTLS STRICT 模式

為避免升級問題,並提供更彈性的安裝方式,我們已從 IstioOperator CR 中移除 global.mtls.enabled 設定。如要啟用 STRICT mTLS,請改為設定對等互連驗證政策

無 Distro 的 Proxy 映像檔

最佳做法是將容器執行階段的內容限制為僅包含必要套件。這種做法可提升安全性,並改善常見安全漏洞與揭露 (CVE) 掃描器的訊號雜訊比。 Istio 提供以 distroless 基本映像檔為基礎的 Proxy 映像檔。

下列設定會為整個 Cloud Service Mesh 啟用無發行版本映像檔。如要變更映像檔類型,每個 Pod 都必須重新啟動並重新注入,變更才會生效。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    defaultConfig:
      image:
        imageType: distroless

無發行項映像檔不含任何二進位檔 (Proxy 除外)。因此,您無法 exec shell,也無法在容器內使用 curlping 或其他偵錯公用程式。

如果您執行 curl 指令,會看到下列錯誤訊息:

error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec  "<container-id>"
OCI runtime exec failed: exec failed: unable to start container process: exec: "curl": executable file not found in $PATH: unknown

如果您執行 Shell 指令,會看到下列錯誤訊息:

error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "<container-id>"
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "sh": executable file not found in $PATH: unknown

如要存取特定 Pod 的這些工具,可以透過下列 Pod 註解覆寫 imageType

sidecar.istio.io/proxyImageType: debug

透過註解變更部署作業的圖片類型後,請重新啟動部署作業。

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

對於大多數類型的 Proxy 偵錯,應使用 istioctl proxy-cmd,這不需要偵錯基本映像檔。

使用自訂疊加層進行自訂登錄

您可以為自訂登錄檔使用自訂疊加層,例如需要從自訂容器登錄檔安裝 Cloud Service Mesh 時。例如:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  hub: {private_registry_url}

以下是 Cloud Service Mesh 的映像檔清單,您需要將這些映像檔鏡像到自訂容器登錄:

  • Install-cni - gke.gcr.io/asm/install-cni:1.21.5-asm.34
  • 代管資料層 - gke.gcr.io/asm/mdp:1.21.5-asm.34
  • Pilot - gke.gcr.io/asm/pilot:1.21.5-asm.34
  • Proxyv2 - gke.gcr.io/asm/proxyv2:1.21.5-asm.34

將映像檔新增至私人登錄檔

如要將 Cloud Service Mesh 映像檔推送至私人登錄檔,請完成下列步驟。

  1. 提取 Cloud Service Mesh 映像檔:
    docker pull gke.gcr.io/asm/install-cni:1.21.5-asm.34
    docker pull gke.gcr.io/asm/mdp:1.21.5-asm.34
    docker pull gke.gcr.io/asm/pilot:1.21.5-asm.34
    docker pull gke.gcr.io/asm/proxyv2:1.21.5-asm.34
    
  2. 為私人登錄檔網址建立變數:
    export PRIVATE_REGISTRY_URL=PRIVATE_REGISTRY_URL
    
    PRIVATE_REGISTRY_URL 替換成您的私人登錄檔網址。
  3. 使用私人登錄檔網址標記映像檔:
    docker tag gke.gcr.io/asm/install-cni:1.21.5-asm.34 \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/install-cni:1.21.5-asm.34
    docker tag gke.gcr.io/asm/mdp:1.21.5-asm.34 \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/mdp:1.21.5-asm.34
    docker tag gke.gcr.io/asm/pilot:1.21.5-asm.34 \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/pilot:1.21.5-asm.34
    docker tag gke.gcr.io/asm/proxyv2:1.21.5-asm.34 \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/proxyv2:1.21.5-asm.34
    
  4. 將加上標記的映像檔推送至私人登錄檔:
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/install-cni:1.21.5-asm.34
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/mdp:1.21.5-asm.34
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/pilot:1.21.5-asm.34
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/proxyv2:1.21.5-asm.34
    
  5. (選用) 如果您使用標準服務,請將標準服務映像檔新增至私人登錄檔。
    1. 提取 Cloud Service Mesh 標準服務映像檔:
              docker pull gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1
              docker pull gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
              
    2. 使用私人登錄檔網址標記映像檔:
              docker tag gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 \
              ${PRIVATE_REGISTRY_URL}/gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1
              docker tag gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16 \
              ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
              
    3. 將加上標記的映像檔推送至私人登錄檔:
              docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/kube-rbac-proxy:v0.13.1
              docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
              

如果可以從私人登錄檔提取已標記的映像檔,表示程序成功。

延長終止排空時間

根據預設,當 Pod 終止時,Envoy 會等待現有連線完成作業五秒 (5s)。

Pod terminationGracePeriodSeconds 必須大於 terminationDrainDuration 值。

詳情請參閱「全域網格選項」。

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    defaultConfig:
      terminationDrainDuration: 30s

啟用存取記錄

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    accessLogFile: "/dev/stdout"

詳情請參閱「啟用 Envoy 的存取記錄」。

Cloud Trace

在下列平台上安裝 Cloud Service Mesh 時,即可使用 Cloud Trace:

  • GKE on Google Cloud
  • 如果您使用 Cloud Service Mesh 憑證授權單位安裝,則為地端的 GKE Enterprise 叢集
---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
  values:
    global:
      proxy:
        tracer: stackdriver

詳情請參閱「存取追蹤記錄」。

透過輸出閘道輸出

建議您按照「安裝與升級閘道」一文的說明,安裝插入式閘道

Istio 容器網路介面

啟用 Istio 容器網路介面 (CNI) 的方式,取決於 Cloud Service Mesh 的安裝環境。

  1. 啟用網路政策

  2. 選擇與平台相符的覆疊檔案。

在 GKE 上啟用 CNI

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    cni:
      enabled: true
      namespace: kube-system
  values:
    cni:
      cniBinDir: /home/kubernetes/bin
      excludeNamespaces:
        - istio-system
        - kube-system

在內部部署環境中啟用 CNI

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    cni:
      enabled: true
      namespace: kube-system
  values:
    cni:
      cniBinDir: /opt/cni/bin
      excludeNamespaces:
        - istio-system
        - kube-system
        - gke-system

為離線Google Cloud啟用流量記錄

在 Google Cloud 外部安裝 Cloud Service Mesh 時,預設會向 Prometheus 報告指標。使用這個選項可啟用流量記錄回報功能,或同時啟用 Prometheus 和 Stackdriver,以便使用 Cloud Service Mesh 資訊主頁。

僅限 Stackdriver

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    telemetry:
      enabled: true
      v2:
        enabled: true
        prometheus:
          enabled: false
        stackdriver:
          enabled: true

Stackdriver 和 Prometheus

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    telemetry:
      enabled: true
      v2:
        enabled: true
        prometheus:
          enabled: true
        stackdriver:
          enabled: true

啟用內部負載平衡器

建議您按照「安裝及升級閘道」一文所述,安裝注入式閘道,在 GKE 上設定內部負載平衡器。設定閘道服務時,請加入註解:networking.gke.io/load-balancer-type: "Internal"

在 Ingress 閘道上管理外部憑證

如要瞭解如何使用 Envoy SDS 在 Ingress 閘道上啟用外部憑證管理,請參閱「安全閘道」。