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

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

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

關於疊加檔案

本頁面的疊加檔案位於 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-operator 和 attached-cluster。如需選項清單,請參閱 anthos-service-mesh 套件。

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

    ./asmcli install \
      OTHER_FLAGS \
      --custom_overlay PATH_TO_FILE
    

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

選用功能的 YAML

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

mTLS STRICT 模式

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

Distroless Proxy 映像檔

Istio 提供以無發行版基礎映像檔為基礎的 Proxy 映像檔。

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

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

Distroless 映像檔不含 Proxy 以外的任何二進位檔。因此,您無法在容器中 exec 殼層,或使用 curl、ping 或其他偵錯公用程式。

如果執行 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

如果執行殼層指令,系統會顯示下列錯誤:

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

透過註解變更 Deployment 的映像檔類型後,應重新啟動 Deployment。

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

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

使用自訂疊加層建立自訂登錄檔

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

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

以下是 Cloud Service Mesh 的映像檔清單,您需要將這些映像檔鏡像至自訂 Container Registry:

  • Install-cni - gke.gcr.io/asm/install-cni:1.30.5-asm.11
  • 代管資料層 - gke.gcr.io/asm/mdp:1.30.5-asm.11
  • 前測 - gke.gcr.io/asm/pilot:1.30.5-asm.11
  • Proxyv2 - gke.gcr.io/asm/proxyv2:1.30.5-asm.11

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

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

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

  • 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 時修改 Pod 規格。您可以使用插入功能,為網格服務新增 Envoy Proxy sidecar 設定,或設定閘道的 Envoy Proxy。

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 外部使用 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"

在 ingress 閘道上管理外部憑證

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