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

本頁面說明如何使用叢集內控制平面,在 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 指令提供兩種啟用選用功能的方式。您使用的做法取決於是否需要變更疊加檔案。

  • 如果不需要對疊加檔案進行任何變更,請使用 --optionasmcli 會透過 --option 從 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,請改為設定對等端驗證政策

無分發套件的 Proxy 映像檔

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

以下設定會為整個 Cloud Service Mesh 啟用無發行映像檔。圖片類型變更需要重新啟動每個 Pod,並重新注入才能生效。

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

無發行版映像檔不含代理程式以外的任何二進位檔。因此,您無法在容器中exec殼層,或使用 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.25.2-asm.3
  • 受管理的資料層 - gke.gcr.io/asm/mdp:1.25.2-asm.3
  • 前測 - gke.gcr.io/asm/pilot:1.25.2-asm.3
  • Proxyv2 - gke.gcr.io/asm/proxyv2:1.25.2-asm.3

將圖片新增至私人登錄檔

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

  1. 提取 Cloud Service Mesh 映像檔:
    docker pull gke.gcr.io/asm/install-cni:1.25.2-asm.3
    docker pull gke.gcr.io/asm/mdp:1.25.2-asm.3
    docker pull gke.gcr.io/asm/pilot:1.25.2-asm.3
    docker pull gke.gcr.io/asm/proxyv2:1.25.2-asm.3
    
  2. 建立私人註冊表網址的變數:
    export PRIVATE_REGISTRY_URL=PRIVATE_REGISTRY_URL
    
    請將 PRIVATE_REGISTRY_URL 替換為您的私人註冊表網址。
  3. 使用私人登錄檔網址標記映像檔:
    docker tag gke.gcr.io/asm/install-cni:1.25.2-asm.3 \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/install-cni:1.25.2-asm.3
    docker tag gke.gcr.io/asm/mdp:1.25.2-asm.3 \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/mdp:1.25.2-asm.3
    docker tag gke.gcr.io/asm/pilot:1.25.2-asm.3 \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/pilot:1.25.2-asm.3
    docker tag gke.gcr.io/asm/proxyv2:1.25.2-asm.3 \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/proxyv2:1.25.2-asm.3
    
  4. 將標記的映像檔推送至私人登錄檔:
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/install-cni:1.25.2-asm.3
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/mdp:1.25.2-asm.3
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/pilot:1.25.2-asm.3
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/proxyv2:1.25.2-asm.3
    
  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
              

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

增加終止耗電時間長度

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

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 Trace 可與 Cloud Service Mesh 安裝程序搭配使用:

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

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

透過輸出閘道輸出

建議您按照「安裝與升級閘道」一節所述安裝注入式閘道。插入或自動插入是指在建立時使用變異 webhook 修改 Pod 規格。您可以使用插入功能為網狀網路服務新增 Envoy Proxy 補充設定,或設定閘道的 Envoy Proxy。

Istio Container Network Interface

啟用 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 外部使用 Istio CA 安裝 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"

入站閘道上的外部憑證管理

如要瞭解如何使用 Envoy SDS 在入口網關上啟用外部憑證管理功能,請參閱「安全網關」。