本頁說明如何設定負載平衡器。當您在 GKE 叢集中部署 Gateway 時,Google Kubernetes Engine (GKE) 會建立負載平衡器。
部署 Gateway 時,GatewayClass 設定會決定 GKE 建立的負載平衡器。這個代管負載平衡器已預先設定預設設定,您可以使用政策修改這些設定。
您可以將政策附加至閘道、服務或 ServiceImports,自訂閘道資源,以符合基礎架構或應用程式需求。套用或修改政策後,您不需要刪除或重新建立閘道、路徑或服務資源,閘道控制器會處理政策,並根據 (新) 政策 (重新) 設定基礎負載平衡器資源。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
GKE Gateway 控制器需求
- 如果是標準叢集,則須使用 GKE 1.24 以上版本。
- 如果是 Autopilot,則須為 GKE 1.26 以上版本。
- Google Cloud CLI 407.0.0 以上版本。
- 閘道 API 僅支援虛擬私有雲原生叢集。
- 如果您使用內部 GatewayClass,則必須啟用僅限 Proxy 的子網路。
- 叢集必須啟用
HttpLoadBalancing
外掛程式。 - 如果您使用 Istio,請務必將 Istio 升級至下列其中一個版本:
- 1.15.2 以上版本
- 1.14.5 以上版本
- 1.13.9 以上版本。
- 如果您使用共用虛擬私有雲,則需要在主機專案中,將
Compute Network User
角色指派給服務專案的 GKE 服務帳戶。
限制
除了 GKE Gateway 控制器的限制,套用至 Gateway 資源的政策還受到下列限制:
GCPGatewayPolicy
資源只能附加至gateway.networking.k8s.io
Gateway
。GCPGatewayPolicy
資源必須與目標Gateway
位於相同命名空間。使用單一叢集 Gateway 時,
GCPBackendPolicy
和HealthCheckPolicy
資源必須參照Service
資源。使用多叢集閘道時,
GCPBackendPolicy
和HealthCheckPolicy
資源必須參照ServiceImport
資源。服務一次只能附加一個
GCPBackendPolicy
。 如果建立的兩項GCPBackendPolicy
政策指定了相同的Service
或ServiceImport
,系統會優先採用較舊的政策,並無法附加第二項政策。GKE Gateway 不支援階層式政策。
HealthCheckPolicy
和GCPBackendPolicy
資源必須與目標Service
或ServiceImport
資源位於相同命名空間。GCPBackendPolicy
和HealthCheckPolicy
資源的結構只能參照一個後端服務。GCPBackendPolicy
不支援工作階段親和性的HEADER_FIELD
或HTTP_COOKIE
選項。
為區域內部閘道設定全域存取權
本節說明 GKE 叢集 (須執行 1.24 以上版本) 提供的功能。
如要透過內部閘道啟用全域存取權,請將政策附加至閘道資源。
下列 GCPGatewayPolicy
資訊清單可啟用區域內部閘道,供全域存取:
apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
name: my-gateway-policy
namespace: default
spec:
default:
allowGlobalAccess: true
targetRef:
group: gateway.networking.k8s.io
kind: Gateway
name: my-gateway
設定多叢集閘道的區域
本節說明 GKE 叢集 (執行 1.30.3-gke.1225000 以上版本) 提供的功能。
如果車隊的叢集遍布多個區域,您可能需要在不同區域部署區域閘道,以因應各種用途,例如跨區域備援、低延遲和資料主權。在多叢集閘道設定叢集中,您可以指定要部署區域閘道的區域。如果未指定地區,預設地區為設定叢集的地區。
如要為多叢集閘道設定地區,請使用 GCPGatewayPolicy
中的 region
欄位。在下列範例中,閘道是在 us-central1
區域中設定:
apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
name: my-gateway-policy
namespace: default
spec:
default:
region: us-central1
targetRef:
group: gateway.networking.k8s.io
kind: Gateway
name: my-regional-gateway
設定 SSL 政策,確保用戶端到負載平衡器的流量安全
本節說明 GKE 叢集 (須執行 1.24 以上版本) 提供的功能。
如要保護用戶端到負載平衡器的流量,請將政策名稱新增至 GCPGatewayPolicy
,藉此設定 SSL 政策。根據預設,閘道不會定義及附加任何 SSL 政策。
請務必建立 SSL 政策,再於 GCPGatewayPolicy
中參照該政策。
下列 GCPGatewayPolicy
資訊清單會指定名為 gke-gateway-ssl-policy
的安全性政策:
apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
name: my-gateway-policy
namespace: team1
spec:
default:
sslPolicy: gke-gateway-ssl-policy
targetRef:
group: gateway.networking.k8s.io
kind: Gateway
name: my-gateway
設定健康狀態檢查
本節說明 GKE 叢集 (須執行 1.24 以上版本) 提供的功能。
根據預設,對於使用 HTTP
或 kubernetes.io/h2c
應用程式通訊協定的後端服務,HealthCheck 為 HTTP
類型。如果是 HTTPS
通訊協定,預設的健康狀態檢查類型為 HTTPS
。如果是 HTTP2
通訊協定,預設的健康狀態檢查為 HTTP2
類型。
您可以使用 HealthCheckPolicy
控制負載平衡器健康狀態檢查設定。每種健康狀態檢查 (http
、https
、grpc
和 http2
) 都有可定義的參數。 Google Cloud會為每個 GKE 服務的每個後端服務建立專屬的健康狀態檢查。
如果健康狀態檢查路徑不是標準的「/」,您可能需要為負載平衡器設定自訂 HealthCheckPolicy
,負載平衡器才能正常運作。如果路徑需要特殊標頭,或您需要調整健康狀態檢查參數,也必須進行這項設定。舉例來說,如果預設要求路徑為「/」,但您的服務無法透過該要求路徑存取,而是使用「/health」回報健康狀態,則您必須在 HealthCheckPolicy
中相應地設定 requestPath
。
以下 HealthCheckPolicy
資訊清單顯示設定健康狀態檢查政策時的所有可用欄位:
服務
apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
name: lb-healthcheck
namespace: lb-service-namespace
spec:
default:
checkIntervalSec: INTERVAL
timeoutSec: TIMEOUT
healthyThreshold: HEALTHY_THRESHOLD
unhealthyThreshold: UNHEALTHY_THRESHOLD
logConfig:
enabled: ENABLED
config:
type: PROTOCOL
httpHealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
httpsHealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
grpcHealthCheck:
grpcServiceName: GRPC_SERVICE_NAME
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
http2HealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
targetRef:
group: ""
kind: Service
name: lb-service
多叢集服務
apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
name: lb-healthcheck
namespace: lb-service-namespace
spec:
default:
checkIntervalSec: INTERVAL
timeoutSec: TIMEOUT
healthyThreshold: HEALTHY_THRESHOLD
unhealthyThreshold: UNHEALTHY_THRESHOLD
logConfig:
enabled: ENABLED
config:
type: PROTOCOL
httpHealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
httpsHealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
grpcHealthCheck:
grpcServiceName: GRPC_SERVICE_NAME
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
http2HealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
更改下列內容:
INTERVAL
:指定每個健康狀態檢查探測器的檢查間隔 (以秒為單位)。這是指從某個探測器開始檢查,到下一次檢查開始之間的時間。如果省略這個參數,且未指定HealthCheckPolicy
,預設值為 15 秒;如果指定HealthCheckPolicy
但沒有checkIntervalSec
值,預設值則為 5 秒。 Google Cloud 詳情請參閱多個探測器和頻率。TIMEOUT
:指定Google Cloud 等待探測回應的時間長度。TIMEOUT
的值必須小於或等於INTERVAL
。單位為秒。每次探測都必須在探測逾時前傳送 HTTP 200 (OK) 回應碼。HEALTHY_THRESHOLD
和UNHEALTHY_THRESHOLD
:指定至少一個探測器必須連續成功或失敗多少次連線嘗試,才能將健康狀態從良好變更為不良,或從不良變更為良好。如果省略其中一個參數, Google Cloud 預設為 2。PROTOCOL
:指定探測系統用於健康狀態檢查的通訊協定。詳情請參閱「HTTP、HTTPS 和 HTTP/2 的成功標準」和「gRPC 的成功標準」。此為必要參數。ENABLED
:指定是否啟用或停用記錄功能。PORT_SPECIFICATION
:指定健康狀態檢查是否使用固定通訊埠 (USE_FIXED_PORT
)、具名通訊埠 (USE_NAMED_PORT
) 或服務通訊埠 (USE_SERVING_PORT
)。如未指定,健康狀態檢查會遵循port
和portName
欄位中指定的行為。如未指定port
或portName
,這個欄位會預設為USE_SERVING_PORT
。PORT
:HealthCheckPolicy 僅支援使用通訊埠編號指定負載平衡器健康檢查通訊埠。如果省略這個參數,預設值為 80。 Google Cloud 由於負載平衡器會直接將探測傳送至 Pod 的 IP 位址,因此即使containerPort
是由服務的targetPort
參照,您也應選取與服務 Pod 的containerPort
相符的通訊埠。您不限於服務targetPort
參照的containerPorts
。PORT_NAME
:指定通訊埠名稱,如 InstanceGroup.NamedPort.name 中所定義。如果同時定義port
和portName
, Google Cloud 會優先考量port
值。HOST
:健康狀態檢查要求中主機標頭的值。這個值會使用主機名稱的 RFC 1123 定義,但不得使用數字 IP 位址。如未指定或留空,這個值預設為健康檢查的 IP 位址。REQUEST_PATH
:指定健康狀態檢查要求的 request-path。如未指定或留空,則預設為/
。RESPONSE
:指定要比對回應資料開頭的位元組。如果未指定或留空,GKE 會將任何回應解讀為正常。回應資料只能是 ASCII。PROXY_HEADER
:指定 Proxy 標頭類型。 您可以使用NONE
或PROXY_V1
。預設值為NONE
。GRPC_SERVICE_NAME
:gRPC 服務的選用名稱。如要指定所有服務,請省略這個欄位。
如要進一步瞭解 HealthCheckPolicy 欄位,請參閱healthChecks
參考資料。
設定 Google Cloud Armor 後端安全性政策,保護後端服務
本節說明 GKE 叢集 (須執行 1.24 以上版本) 提供的功能。
將安全性政策名稱新增至 GCPBackendPolicy
,即可設定 Google Cloud Armor 後端安全性政策,保護後端服務。根據預設,閘道不會定義及附加任何 Google Cloud Armor 後端安全政策。
請務必建立 Google Cloud Armor 後端安全性政策,再於 GCPBackendPolicy
中參照該政策。如果您要啟用區域閘道,則必須建立區域 Google Cloud Armor 後端安全性政策。
下列 GCPBackendPolicy
資訊清單指定名為 example-security-policy
的後端安全性政策:
服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
securityPolicy: example-security-policy
targetRef:
group: ""
kind: Service
name: lb-service
多叢集服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
securityPolicy: example-security-policy
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
設定 IAP
本節說明 GKE 叢集 (執行 1.24 以上版本) 提供的功能。
Identity-Aware Proxy (IAP) 會對與 HTTPRoute 相關聯的後端服務強制執行存取控制政策。強制執行這項措施後,只有經過驗證的使用者或應用程式,且已指派正確的 Identity and Access Management (IAM) 角色,才能存取這些後端服務。
根據預設,後端服務不會套用 IAP,您需要在 GCPBackendPolicy
中明確設定 IAP。
如要透過 Gateway 設定 IAP,請按照下列步驟操作:
為 GKE 啟用 IAP 請勿設定後端 (設定 BackendConfig),因為
BackendConfig
只在 Ingress 部署作業中有效。為 IAP 建立密鑰:
前往 Google Cloud 控制台的「憑證」頁面:
按一下用戶端名稱,然後下載 OAuth 用戶端檔案。
從 OAuth 用戶端檔案中,將 OAuth 密碼複製到剪貼簿。
建立名為
iap-secret.txt
的檔案。使用下列指令,將 OAuth 密鑰貼到
iap-secret.txt
檔案中:echo -n CLIENT_SECRET > iap-secret.txt kubectl create secret generic SECRET_NAME --from-file=key=iap-secret.txt
如要指定參照密鑰的 IAP 政策,請按照下列步驟操作:
建立下列
GCPBackendPolicy
資訊清單,並分別取代SECRET_NAME
和CLIENT_ID
。將資訊清單儲存為backend-policy.yaml
:服務
apiVersion: networking.gke.io/v1 kind: GCPBackendPolicy metadata: name: backend-policy spec: default: iap: enabled: true oauth2ClientSecret: name: SECRET_NAME clientID: CLIENT_ID targetRef: group: "" kind: Service name: lb-service
多叢集服務
apiVersion: networking.gke.io/v1 kind: GCPBackendPolicy metadata: name: backend-policy spec: default: iap: enabled: true oauth2ClientSecret: name: SECRET_NAME clientID: CLIENT_ID targetRef: group: net.gke.io kind: ServiceImport name: lb-service
套用
backend-policy.yaml
資訊清單:kubectl apply -f backend-policy.yaml
驗證設定:
確認建立
GCPBackendPolicy
後,系統是否已套用政策 (使用 IAP):kubectl get gcpbackendpolicy
輸出結果會與下列內容相似:
NAME AGE backend-policy 45m
如要取得更多詳細資料,請使用 describe 指令:
kubectl describe gcpbackendpolicy
輸出結果會與下列內容相似:
Name: backend-policy Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPBackendPolicy Metadata: Creation Timestamp: 2023-05-27T06:45:32Z Generation: 2 Resource Version: 19780077 UID: f4f60a3b-4bb2-4e12-8748-d3b310d9c8e5 Spec: Default: Iap: Client ID: 441323991697-luotsrnpboij65ebfr13hlcpm5a4heke.apps.googleusercontent.com Enabled: true oauth2ClientSecret: Name: my-iap-secret Target Ref: Group: Kind: Service Name: lb-service Status: Conditions: Last Transition Time: 2023-05-27T06:48:25Z Message: Reason: Attached Status: True Type: Attached Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 46m sc-gateway-controller default/backend-policy Normal SYNC 44s (x15 over 43m) sc-gateway-controller Application of GCPBackendPolicy "default/backend-policy" was a success
設定後端服務逾時
本節說明 GKE 叢集 (須執行 1.24 以上版本) 提供的功能。
下列 GCPBackendPolicy
資訊清單指定 40 秒的後端服務逾時時間。「timeoutSec
」欄位預設為 30 秒。
服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
timeoutSec: 40
targetRef:
group: ""
kind: Service
name: lb-service
多叢集服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
timeoutSec: 40
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
使用 GCPBackendPolicy
設定後端選取項目
GCPBackendPolicy
中的 CUSTOM_METRICS
平衡模式可讓您設定特定自訂指標,藉此影響負載平衡器的後端服務分配流量的方式。這個平衡模式可根據您定義的自訂指標,以及應用程式後端回報的指標,進行負載平衡。
詳情請參閱「Traffic management with custom metrics-based load balancing」(根據自訂指標執行負載平衡,管理流量)。
backends[]
欄位中的 customMetrics[]
陣列包含下列欄位:
name
:指定自訂指標的使用者定義名稱。maxUtilization
:為這項指標設定目標或最高使用率。有效範圍為 [0, 100]。dryRun
:布林值欄位。如果為 true,指標資料會回報給 Cloud Monitoring,但不會影響負載平衡決策。
示例
以下範例顯示 GCPBackendPolicy
資訊清單,可設定後端選取和端點層級路由的自訂指標。
將下列資訊清單儲存為
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: kind: Service name: super-service default: backends: - location: "*" balancingMode: RATE maxRatePerEndpoint: 9000 - location: us-central1-a # specific block applies to given zone / region only. # maxRatePerEndpoint: 9000 inherited from unnamed balancingMode: CUSTOM_METRICS customMetrics: - name: gpu-load maxUtilization: 100 # value ranges from 0 to 100 and maps to the floating pointrange [0.0, 1.0] dryRun: false
將資訊清單套用至叢集:
kubectl apply -f my-backend-policy.yaml
負載平衡器會根據RATE
平衡模式
和自訂gpu-load
指標分配流量。
使用 GCPTrafficDistributionPolicy 設定端點層級的路由
GCPTrafficDistributionPolicy
會設定後端中端點挑選的負載平衡演算法。選取 WEIGHTED_ROUND_ROBIN
時,負載平衡器會使用從回報指標 (包括自訂指標) 衍生出的權重,將流量分配至個別執行個體或端點。
GCPTrafficDistributionPolicy
資源的 WEIGHTED_ROUND_ROBIN localityLbPolicy
欄位會指定負載平衡演算法,用於選取後端中的個別執行個體或端點。使用這個演算法時,政策會利用自訂指標計算負載指派的權重。
GCPTrafficDistributionPolicy
設定中的 customMetrics[]
陣列包含下列欄位:
name
:指定自訂指標的使用者定義名稱。dryRun
:布林值欄位。如果為 true,指標資料會回報給 Cloud Monitoring,但不會影響負載平衡。
詳情請參閱「Traffic management with custom metrics-based load balancing」(使用以自訂指標為準的負載平衡機制管理流量)。
示例
以下範例顯示 GCPTrafficDistributionPolicy
資訊清單,其中同時使用 WEIGHTED_ROUND_ROBIN
負載平衡演算法和自訂指標,設定端點層級的路由。
將下列範例資訊清單儲存為
GCPTrafficDistributionPolicy.yaml
:apiVersion: networking.gke.io/v1 kind: GCPTrafficDistributionPolicy metadata: name: echoserver-v2 namespace: team1 spec: targetRefs: - kind: Service group: "" name: echoserver-v2 default: localityLbAlgorithm: WEIGHTED_ROUND_ROBIN customMetrics: - name: orca.named_metrics.bescm11 dryRun: false - name: orca.named_metrics.bescm12 dryRun: true
將資訊清單套用至叢集:
kubectl apply -f GCPTrafficDistributionPolicy.yaml
負載平衡器會根據 WEIGHTED_ROUND_ROBIN
演算法和提供的自訂指標,將流量分配給端點。
設定工作階段相依性
本節說明 GKE 叢集 (須執行 1.24 以上版本) 提供的功能。
您可以根據下列條件設定工作階段相依性:
- 用戶端 IP 位址
- 產生的 Cookie
為 Service 設定工作階段親和性時,閘道的 localityLbPolicy
設定會設為 MAGLEV
。
從 GCPBackendPolicy
移除工作階段相依性設定後,Gateway 會將 localityLbPolicy
設定還原為預設值 ROUND_ROBIN
。
下列 GCPBackendPolicy
資訊清單會根據用戶端 IP 位址指定工作階段相依性:
服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
sessionAffinity:
type: CLIENT_IP
targetRef:
group: ""
kind: Service
name: lb-service
多叢集服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
sessionAffinity:
type: CLIENT_IP
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
下列 GCPBackendPolicy
資訊清單會根據產生的 Cookie 指定工作階段相依性,並將 Cookie 的存留時間設為 50 秒:
服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
sessionAffinity:
type: GENERATED_COOKIE
cookieTtlSec: 50
targetRef:
group: ""
kind: Service
name: lb-service
多叢集服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
sessionAffinity:
type: GENERATED_COOKIE
cookieTtlSec: 50
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
您可以在 sessionAffinity.type
欄位中使用下列值:
CLIENT_IP
GENERATED_COOKIE
NONE
設定連線排除逾時
本節說明 GKE 叢集 (執行 1.24 以上版本) 提供的功能。
您可以使用 GCPBackendPolicy
設定連線排除逾時。連線排除逾時是指等待連線排除的時間 (以秒計算)。逾時時間長度可介於 0 至 3,600 秒之間。
預設值為 0,這也會停用連線排除功能。
下列 GCPBackendPolicy
資訊清單指定連線排除逾時為 60 秒:
服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
connectionDraining:
drainingTimeoutSec: 60
targetRef:
group: ""
kind: Service
name: lb-service
多叢集服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
connectionDraining:
drainingTimeoutSec: 60
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
在指定的逾時時間長度內,GKE 會等待傳送至已移除後端的現有要求完成。負載平衡器不會將新的要求傳送至已移除的後端。逾時時間長度屆滿之後,GKE 就會關閉所有剩餘的後端連線。
HTTP 存取記錄
本節說明 GKE 叢集 (須執行 1.24 以上版本) 提供的功能。
根據預設:
- 閘道控制器會將用戶端的所有 HTTP 要求記錄至 Cloud Logging。
- 取樣率為 1,000,000,表示系統會記錄所有要求。
- 系統不會記錄任何選填欄位。
您可以使用 GCPBackendPolicy
,透過三種方式在 Gateway 上停用存取記錄:
- 您可以將「沒有
GCPBackendPolicy
」部分留空。logging
- 你可以將
logging.enabled
設為false
- 您可以將
logging.enabled
設為true
,並將logging.sampleRate
設為0
您也可以設定存取記錄取樣率和選用欄位清單,例如「tls.cipher」或「orca_load_report」。
如要啟用選填欄位的記錄功能,請按照下列步驟操作:
- 將
logging.OptionalMode
設為CUSTOM
。 - 請提供要記錄在
logging.optionalFields
中的選填欄位清單。如需支援的欄位清單,請參閱「記錄和監控」。
您可以透過下列兩種方式停用選填欄位的記錄功能:
- 你可以移除
logging.optionalFields
中的所有項目。 - 您可以將
logging.OptionalMode
設為EXCLUDE_ALL_OPTIONAL
。
下列 GCPBackendPolicy
資訊清單會修改存取記錄的預設取樣率,並將其設為 HTTP 要求的 50%。資訊清單也允許記錄特定 Service 資源的兩個選填欄位:
服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
logging:
enabled: true
sampleRate: 500000
optionalMode: CUSTOM
optionalFields:
- tls.cipher
- orca_load_report.cpu_utilization
targetRef:
group: ""
kind: Service
name: lb-service
多叢集服務
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
logging:
enabled: true
sampleRate: 500000
optionalMode: CUSTOM
optionalFields:
- tls.cipher
- orca_load_report.cpu_utilization
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
這個資訊清單包含下列欄位:
enable: true
:明確啟用存取記錄。記錄檔位於 Logging。sampleRate: 500000
:指定要記錄 50% 的封包。您可以使用介於 0 到 1,000,000 之間的值。GKE 會將這個值除以 1, 000,000,轉換為介於 [0,1] 範圍內的浮點值。只有在enable
設為true
時,這個欄位才適用。sampleRate
是選填欄位,但如果設定這個欄位,則必須一併設定enable: true
。如果enable
設為true
,但未提供sampleRate
,則 GKE 會將enable
設為false
。optionalMode: CUSTOM
:指定記錄項目中應包含一組optionalFields
。optionalFields: tls.cipher, orca_load_report.cpu_utilization
:指定記錄項目應包含 TLS 交握使用的密碼名稱和服務的 CPU 使用率 (如有)。
為單一叢集閘道設定以流量為準的自動調度資源功能
確認 GKE 叢集執行的是 1.31.1-gke.2008000 以上版本。
如要在單一叢集 Gateway 中啟用以流量為準的自動調度資源功能,以及以容量為準的負載平衡功能,可以設定 Service 容量。服務容量是指服務可接收的流量容量,超過這個容量後,系統就會自動調度 Pod,或將流量溢流至其他可用叢集。
如要設定服務容量,請建立服務和相關聯的GCPBackendPolicy
。GCPBackendPolicy
資訊清單使用 maxRatePerEndpoint
欄位,定義服務中每個 Pod 的每秒要求數 (RPS) 上限值。下列 GCPBackendPolicy
資訊清單定義的 RPS 上限為 10:
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: store
spec:
default:
maxRatePerEndpoint: 10
targetRef:
group: ""
kind: Service
name: store
如要進一步瞭解以流量為準的自動調度資源功能,請參閱「根據負載平衡器流量自動調度資源」。
疑難排解
多個 GCPBackendPolicy
附加至同一個 Service
症狀:
將 GCPBackendPolicy
附加至 Service
或 ServiceImport
時,可能會出現下列狀態條件:
status:
conditions:
- lastTransitionTime: "2023-09-26T20:18:03Z"
message: conflicted with GCPBackendPolicy "[POLICY_NAME]" of higher precedence, hence not applied
reason: Conflicted
status: "False"
type: Attached
原因:
這個狀態條件表示您嘗試將第二個 GCPBackendPolicy
套用至已附加 GCPBackendPolicy
的 Service
或 ServiceImport
。
GKE Gateway 不支援將多個 GCPBackendPolicy
連接至同一個 Service
或 ServiceImport
。詳情請參閱「限制」一節。
解決方法:
設定單一 GCPBackendPolicy
,其中包含所有自訂設定,並將其附加至 Service
或 ServiceImport
。
找不到 Google Cloud Armor 安全性政策
症狀:
在區域閘道上啟用 Google Cloud Armor 時,可能會出現下列錯誤訊息:
Invalid value for field 'resource': '{
"securityPolicy":"projects/123456789/regions/us-central1/securityPolicies/<policy_name>"}'.
The given security policy does not exist.
原因:
這則錯誤訊息表示您 Google Cloud 專案中沒有指定的區域性 Google Cloud Armor 安全性政策。
解決方法:
在專案中建立區域 Google Cloud Armor 安全性政策,並在 GCPBackendPolicy
中參照這項政策。
後續步驟
- 進一步瞭解閘道控制器。
- 瞭解如何從資源參照閘道。
- 查看 Policy Types API 參考資料。
- 查看 API 類型定義。