使用自動 Envoy 插入的 Google Kubernetes Engine Pod 設定選項
本指南將說明自動 Envoy 附加元件插入器的其他選項和工作。
在現有工作負載中加入補充 Proxy
在叢集中安裝補充資訊注入器後,系統會自動將補充資訊 Proxy 注入至已啟用命名空間中新建立的 Pod。如果在啟用附加元件注入器之前,工作負載已在執行,則必須重新啟動工作負載,才能進行注入。
針對由 Deployment、DaemonSet 或 StatefulSet 控制器管理的 Pod,您可以執行以下操作:
# Deployment kubectl rollout restart deployment/DEPLOYMENT_NAME --namespace NAMESPACE # DaemonSet kubectl rollout restart daemonset/DAEMONSET_NAME --namespace NAMESPACE # StatefulSet kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE
如果您未使用上述任何控制器部署 Pod,則必須個別刪除 Pod。之後,系統會自動使用新的附加 Proxy 重新建立這些檔案。
kubectl delete pod POD_NAME -n NAMESPACE
確認已在每個 Pod 中注入補充 Proxy 容器:
kubectl get pods -n NAMESPACE
舉例來說,使用上述建立的 busybox 用戶端,您應該會看到 2/2 個 Pod 正在執行,一個用於 busybox 應用程式本身,另一個用於已插入的 Envoy 附掛程式 Proxy:
NAME READY STATUS RESTARTS AGE busybox-c54f578c9-c9fk4 2/2 Running 183 7d15h
注入覆寫
根據預設,啟用命名空間會為所有駐留 pod 啟用附加元件 Proxy 插入功能。您也可以針對不同的範圍選擇性設定注入,以滿足特定需求。舉例來說,您應使用覆寫值,避免為無 Proxy gRPC 服務注入側邊 Proxy。
請注意,插入取代項目僅會在命名空間啟用時套用,且會以以下優先順序生效:Pod 註解 > NeverInjectSelector > AlwaysInjectSelector > 預設政策
為特定 Pod 啟用或停用注入功能
使用下列 Pod 註解,針對已啟用的命名空間中的特定 Pod 開啟或關閉注入功能:
... metadata: annotations: td-injection: "true" / "false"
自訂流量攔截行為
根據預設,系統會攔截應用程式傳出的所有流量,並將這些流量重新導向至 Envoy 附加元件 Proxy。接著,Envoy Proxy 就能根據從 Cloud Service Mesh 收到的指示處理流量。在某些情況下,您可能需要修改這項行為,以便略過副駕駛代理程式。
使用下列 Pod 註解,排除攔截和重新導向的流量。
依傳出 IP 位址範圍排除攔截
您可以根據 IP 位址範圍排除要攔截的流量。
... metadata: annotations: cloud.google.com/excludeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"
cloud.google.com/excludeOutboundCIDRs
Pod 註解是採用 CIDR 格式,以半形逗號分隔的傳出 IP 位址範圍清單。目的地為這些 IP 位址範圍的輸出流量不會重新導向至 Envoy 側邊車。
請注意,您需要在 Pod 註解中列出 169.254.169.254/32
,確保應用程式可以與中繼資料伺服器通訊。如果未指定 cloud.google.com/excludeOutboundCIDRs
Pod 註解,流量攔截會設為排除「169.254.169.254/32」傳出 CIDR 範圍。
依據外送 IP 位址範圍納入攔截範圍
您可以透過 IP 位址範圍,將流量納入攔截範圍。
... metadata: annotations: cloud.google.com/includeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"
cloud.google.com/includeOutboundCIDRs
Pod 註解是採用 CIDR 格式,以半形逗號分隔的傳出 IP 位址範圍清單。目的地為這些 IP 位址範圍的出口流量會重新導向至 Envoy 輔助程式。
萬用字元 *
可用於重新導向所有外部流量。空白清單會停用所有傳出流量。註解預設為 *
。
排除透過傳出埠號碼攔截
您可以透過傳出通訊埠編號,排除要攔截和重新導向的流量。
... metadata: annotations: cloud.google.com/excludeOutboundPorts: "10001, 10002"
cloud.google.com/excludeOutboundPorts
Pod 註解是以半形逗號分隔的傳出連接埠清單。目的地為這些通訊埠的輸出流量會從攔截事件中排除,並重新導向至 Envoy 輔助程式。
如果未指定 cloud.google.com/excludeOutboundPorts
註解,系統會攔截並將任何通訊埠的傳出流量重新導向至 Envoy 附屬程式。這相當於傳遞包含空白 (「""」) 清單的 cloud.google.com/excludeOutboundPorts
註解。
在透過傳入通訊埠號碼攔截時納入
您可以透過傳入通訊埠編號,將流量納入攔截作業。
... metadata: annotations: cloud.google.com/includeInboundPorts: "10001, 10002"
cloud.google.com/includeInboundPorts
Pod 註解是逗號分隔的內送通訊埠清單,這些通訊埠的流量會重新導向至 Envoy 輔助程式。萬用字元 *
可用於設定所有連接埠的重新導向。空值會停用所有內送重新導向。預設值為空字串 ("")。
依據傳入通訊埠號碼排除攔截
您可以透過傳入通訊埠編號排除流量。
... metadata: annotations: cloud.google.com/excludeInboundPorts: "10001, 10002"
cloud.google.com/excludeInboundPorts
Pod 註解是以半形逗號分隔的清單,列出要從 Envoy 附屬程式重新導向中排除的傳入連接埠。只有在所有入站流量 (*
) 都會重新導向時,才會套用這項註解。預設值為空字串 ("")。
啟用代管憑證
您可以啟用受管理的工作負載憑證。
... metadata: annotations: cloud.google.com/enableManagedCerts: "true"
當 Pod 註解 cloud.google.com/enableManagedCerts
設為 true
時,GKE 會插入由憑證授權單位服務簽署的工作負載憑證,並將其掛載至輔助程式容器。註解的值預設為 false
。
設定補充 Proxy 中繼資料
為了支援其他 Cloud Service Mesh 功能,補充 Proxy 可以從封裝 Pod 繼承特定中繼資料。有兩種方法可以達成此目標。在附掛式 Proxy 連線至 Cloud Service Mesh 時,這兩種選項都會附加中繼資料,並與 Cloud Service Mesh 共用中繼資料。這些選項互斥。
第一個選項可讓您指定個別中繼資料鍵/值組合。舉例來說,您可以在 Pod 範本規格中加入下列註解,將 "version": "dev"
標籤套用至已插入的側邊代理程式。
... metadata: annotations: cloud.google.com/proxyMetadata: '{"version": "dev"}'
第二個選項會將所有 Pod 標籤附加至 Pod 的注入側車代理程式。
... metadata: annotations: cloud.google.com/forwardPodLabels: "true"
如果您未指定 cloud.google.com/forwardPodLabels
註解,系統就不會將 Pod 標籤附加至附屬 Proxy。請注意,cloud.google.com/proxyMetadata
和 cloud.google.com/forwardPodLabels
註解是互斥的。如果同時設定兩者,系統會優先採用 cloud.google.com/forwardPodLabels
,並忽略 cloud.google.com/proxyMetadata
。
接著,設定篩選功能可讓 Cloud Service Mesh 只與與此 "version": "dev"
標籤相符的特定 Proxy 共用部分設定。
您必須重新啟動現有的部署作業,這項設定才會生效。
支援的 Pod 註解
Cloud Service Mesh 支援下列 Pod 註解,用於側載注入。雖然其他附加元件注入器註解可能會運作,但以下清單代表 Cloud Service Mesh 支援的註解。為避免發生中斷或不穩定情形,請勿在正式版部署中建立對其他註解的依附元件。
註解名稱 | 值 | 說明 |
---|---|---|
td-injection | 布林值,以字串表示。例如:「true 」。 |
指定是否應自動將 Envoy 附屬程式插入工作負載。 |
cloud.google.com/proxyMetadata | 鍵/值組合的 JSON 對應。例如:「'{"version":
"dev"}' 」。 |
指定 JSON 對應中應附加至 Envoy 中繼資料的鍵/值組合。 |
cloud.google.com/forwardPodLabels | 「true」或「false」 | 設為「true」時,所有 Pod 標籤都會附加至 Envoy 中繼資料,且系統會忽略「cloud.google.com/proxyMetadata」註解。預設值為「false」。 |
cloud.google.com/excludeOutboundPorts | 以半形逗號分隔的傳出連接埠清單 | 指出任何這些目的地通訊埠的傳出流量,都會從攔截/重新導向至 Envoy 輔助程式中排除。這類流量會略過 Envoy Proxy,且不會根據 Cloud Service Mesh 設定處理。預設為空字串 (即「""」)。 |
cloud.google.com/includeInboundPorts | 以半形逗號分隔的內送連接埠清單 | 以半形逗號分隔的內送通訊埠清單,這些通訊埠的流量會重新導向至 Envoy 補充。使用萬用字元 `*` 設定所有通訊埠的重新導向。空值會停用所有內送重新導向。這個值的預設值為空白字串 ("")。 |
cloud.google.com/excludeInboundPorts | 以半形逗號分隔的內送連接埠清單 | 以半形逗號分隔的內送通訊埠清單,這些通訊埠的流量不會重新導向至 Envoy 補充。只有在所有傳入流量 (*) 都會重新導向時,才會套用註解。這個值的預設值為空白字串 ("")。 |
cloud.google.com/excludeOutboundCIDRs | 以半形逗號分隔的 CIDR 格式外出 IP 範圍清單。 | 指出任何這些目的地 IP 的傳出流量,都會從攔截/重新導向至 Envoy sidecar 的流量中排除。這類流量會略過 Envoy Proxy,且不會根據 Cloud Service Mesh 設定處理。預設為「169.254.169.254/32」,這是與中繼資料伺服器通訊所需的範圍。請注意,這個範圍是必要條件,因此如果您指定 `excludeOutboundCIDRs` 註解,請務必除了任何其他 CIDR 外,也納入 "169.254.169.254/32"。請確認逗號分隔清單中沒有空格。 |
cloud.google.com/includeOutboundCIDRs | 以半形逗號分隔的 CIDR 格式外出 IP 範圍清單。 | 輸出流量會指出任何這些目的地 IP 位址,並納入攔截/重新導向至 Envoy 附屬程式。這類流量會導向 Envoy Proxy,並根據 Cloud Service Mesh 設定處理。預設為「169.254.169.254/32」,這是與中繼資料伺服器通訊所需的範圍。請注意,這個範圍是必填項目,因此如果您指定 `includeOutboundCIDRs` 註解,請務必除了任何其他 CIDR 外,也加入「169.254.169.254/32」。請確認逗號分隔清單中沒有空格。 |
cloud.google.com/enableManagedCerts | 布林值,以字串表示。例如:「true 」 |
設定為「true 」時,由憑證授權單位服務簽署的 GKE 受管理工作負載憑證會插入並掛載至輔助程式容器。預設值為「false 」。 |
解除安裝補充注入器
使用下列指令解除安裝補充資訊插入器:
kubectl delete MutatingWebhookConfiguration td-mutating-webhook kubectl label namespace default td-injection-