BackendConfig 自訂資源

本頁面提供 BackendConfig 自訂資源的總覽,並說明如何使用此資源在 Google Kubernetes Engine 中設定 Ingress。本頁面也提供 BackendConfig 類型和相關類型的參考資源

總覽

BackendConfig 是 Kubernetes Engine Ingress 控制器使用的自訂資源定義。從 GKE 1.10.5-gke.3 版開始,您可以透過建立 Service 通訊埠與 BackendConfig 物件之間的關聯,為 Cloud 負載平衡器提供設定。

您可以使用 BackendConfig 設定下列 HTTP(S) 負載平衡功能:

以下是 BackendConfig 的資訊清單範例。資訊清單會指定 Cloud CDN 快取政策,並宣告系統應啟用 Cloud CDN:

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-backend-config
spec:
  cdn:
    enabled: true
    cachePolicy:
      includeHost: true
      includeProtocol: true
      includeQueryString: false

建立 Service 通訊埠與 BackendConfig 之間的關聯

在 GKE 中建立 Kubernetes Ingress 物件時,GKE Ingress 控制器會為您建立及設定 HTTP(S) 負載平衡器。您的 Ingress 是有規則的,且每個規則都會參照 Kubernetes Service 物件中的某個通訊埠。如果 Ingress 參照了 Service 的某個通訊埠,該通訊埠就算是與某個 HTTP(S) 負載平衡後端服務相關聯。

如果 Ingress 參照了某個 Service 通訊埠,且該 Service 通訊埠與某個 BackendConfig 相關聯,則 HTTP(S) 負載平衡後端服務的設定會有部分是來自 BackendConfig。

以下是具有三個通訊埠的 Kubernetes Service 資訊清單:

apiVersion: v1
kind: Service
metadata:
  annotations:
    beta.cloud.google.com/backend-config:
      '{"ports": {"http":"config-http", "http2" :"config-http2"}, "default": "config-default"}'
  name: my-service
spec:
  type: NodePort
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 8080
  - name: http2
    protocol: TCP
    port: 443
    targetPort: 8080
  - name: http3
    protocol: TCP
    port: 49152
    targetPort: 49152
...

beta.cloud.google.com/backend-config 註解會指定通訊埠與 BackendConfig 物件之間的對應關係。在上述資訊清單中:

  • http 通訊埠與名為 config-http 的 BackendConfig 相關聯。
  • http2 通訊埠與名為 config-http2 的 BackendConfig 相關聯。
  • Service 的所有其他通訊埠都與名為 config-default 的預設 BackendConfig 相關聯。因此在這個範例中,http3 通訊埠與 config-default 相關聯。

beta.cloud.google.com/backend-config 註解中,您必須指定 ports 欄位或 default 欄位,或是同時指定這兩個欄位。

撤銷 BackendConfig 中指定的設定

移除 Service 中的 BackendConfig 註解或刪除 BackendConfig 物件都不會撤銷之前在 BackendConfig 中指定的設定。這是因為 Ingress 控制器只會核對 BackendConfig 中指定的設定。

因此,您必須明確停用 BackendConfig 中的設定,才能撤銷不再需要的設定。以下是停用設定的範例:

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-backend-config
spec:
  cdn:
    enabled: false
  securityPolicy:
    name: ""

刪除 BackendConfig

如要刪除 BackedConfig,請執行下列步驟:

  1. 首先,移除 Service 資訊清單的 beta.cloud.google.com/backend-config 註解中的 BackendConfig 名稱。

  2. 將已變更的 Service 資訊清單套用 (例如使用 kubectl apply) 到您的叢集。

  3. 此時您就可以刪除 BackendConfig 了。但請注意,您並沒有必要刪除 BackendConfig。這裡的重點是,您要刪除 beta.cloud.google.com/backend-config 註解中的 BackendConfig 名稱。

限制

一組 (Service、通訊埠) 只能使用一個 BackendConfig,即使有多個 Ingress 物件參照該組 (Service、通訊埠) 也一樣。因此,參照同一組 (Service、通訊埠) 的所有 Ingress 物件,都必須使用相同的 Google Cloud Armor、Cloud IAP 和 Cloud CDN 設定。

Cloud IAP 和 Cloud CDN 無法針對相同的 HTTP(S) 負載平衡後端服務來啟用,因此您無法在相同的 BackendConfig 中同時設定 Cloud IAP 和 Cloud CDN。

您必須使用 kubectl 1.7 或較新的版本,才能與 BackendConfig 互動。也就是說,您必須擁有支援自訂資源的 kubectl 版本。

後續步驟

參考資料

BackendConfig v1beta1 cloud.google.com

欄位

metav1.TypeMeta

API 群組、版本和種類。

metadata

metav1.ObjectMeta

標準的物件中繼資料

spec

BackendConfigSpec

期望的 BackendConfig 行為。

status

BackendConfigStatus

最近一次觀察到的 BackendConfig 狀態。

BackendConfigSpec v1beta1 cloud.google.com

欄位
iap

IAPConfig

用於相關聯 HTTP(S) 負載平衡後端服務的 Cloud IAP 設定。請注意,Cloud IAP 和 Cloud CDN 無法針對相同的 HTTP(S) 負載平衡後端服務來啟用。

cdn

CDNConfig

用於相關聯 HTTP(S) 負載平衡後端服務的 Cloud CDN 設定。請注意,Cloud IAP 和 Cloud CDN 無法針對相同的 HTTP(S) 負載平衡後端服務來啟用。

securityPolicy

SecurityPolicyConfig

用於相關聯 HTTP(S) 負載平衡後端服務的 Google Cloud Armor 設定。

timeoutSec int64

要求/回應逾時時間 (以秒計算)。預設值為 30 秒。

connectionDraining

ConnectionDrainingConfig

用於相關聯 HTTP(S) 負載平衡後端服務的連線排除設定。

sessionAffinity

SessionAffinityConfig

用於相關聯 HTTP(S) 負載平衡後端服務的工作階段相依性設定。

BackendConfigList v1beta1 cloud.google.com

欄位

metav1.TypeMeta

API 群組、版本和種類。

metadata

metav1.ObjectMeta

標準的物件中繼資料

items

BackendConfig array

BackendConfig 物件清單。

IAPConfig v1beta1 cloud.google.com

欄位
enabled

boolean

指定是否要為相關聯的 HTTP(S) 負載平衡後端服務啟用 Cloud IAP。

oauthclientCredentials

OAuthClientCredentials

用戶端憑證,包含 OAuth 用戶端 ID 和密碼。

OAuthClientCredentials v1beta1 cloud.google.com

欄位
secretName

string

Secret 的名稱,用於儲存 OAuth 用戶端 ID 和密碼。

clientID

string

直接參照 OAuth 用戶端 ID。

clientSecret

string

直接參照 OAuth 用戶端密鑰。

CDNConfig v1beta1 cloud.google.com

欄位
enabled

boolean

指定是否要為相關聯的 HTTP(S) 負載平衡後端服務啟用 Cloud CDN。

cachePolicy

CacheKeyPolicy

用於相關聯 HTTP(S) 負載平衡後端服務的快取金鑰政策。

CacheKeyPolicy v1beta1 cloud.google.com

欄位
includeHost

boolean

如果是 true,將分別快取針對不同主機發出的要求。

includeProtocol

boolean

如果是 true,將分別快取 HTTP 和 HTTPS 要求。

includeQueryString

boolean

如果 includeQueryString 為 true,系統會根據 queryStringBlacklistqueryStringWhitelist 的值,將查詢字串參數包含在快取金鑰中。如果這兩個欄位都沒有設定,系統會將整個查詢字串包含在快取金鑰中。如果 includeQueryString 為 false,則整個查詢字串都不會包含在快取金鑰中。

queryStringBlacklist

string array

要從快取金鑰中排除的查詢字串參數名稱。所有其他的參數都會包含在快取金鑰中。您可以選擇指定 queryStringBlacklistqueryStringWhitelist,但不能兩者同時指定。

queryStringWhitelist

string array

要包含在快取金鑰中的查詢字串參數名稱。所有其他的參數都會遭到排除。您可以選擇指定 queryStringBlacklistqueryStringWhitelist,但不能兩者同時指定。

SecurityPolicyConfig v1beta1 cloud.google.com

欄位
name

string

要套用的 Google Cloud Armor 安全性政策名稱。

ConnectionDraining v1beta1 cloud.google.com

欄位
drainingTimeoutSec

int64

等待連線排除的時間 (以秒計算)。預設值為 0 秒。

SessionAffinity v1beta1 cloud.google.com

欄位
affinityType

string

工作階段相依性的類型。可能的值為「CLIENT_IP」、「GENERATED_COOKIE」和「NONE」。預設值為「NONE」。

affinityCookieTtlSec

int64

相依性 Cookie 的存留時間 (以秒計算)。即使 affinityType 不是「GENERATED_COOKIE」,您也可以設定 affinityCookieTtlSec