本頁說明 Google Kubernetes Engine (GKE) 中,外部應用程式負載平衡器的 Ingress 運作方式。您也可以瞭解如何設定及使用適用於外部負載平衡的 Ingress。
如要瞭解如何在 GKE 中使用負載平衡,請參閱外部應用程式負載平衡器的 Ingress。
Google Kubernetes Engine (GKE) 網路是以 Cloud Load Balancing 為基礎建構而成。使用 Cloud Load Balancing 時,單一 Anycast IP 位址可讓路由判斷前往最近 Trusted Cloud 負載平衡器的最低成本路徑。
支援 Trusted Cloud 功能
您可以使用 BackendConfig,將外部應用程式負載平衡器設定為使用下列功能:
BackendConfig 為自訂資源,用來保存Trusted Cloud 功能的設定資訊。如要進一步瞭解支援的功能,請參閱「輸入設定」。
WebSocket 的支援
使用外部應用程式負載平衡器時,WebSocket 通訊協定無需任何設定即可運作。
如果您打算使用 WebSocket 通訊協定,則可能需要使用大於預設值 30 秒的逾時值。對於透過Trusted Cloud 外部應用程式負載平衡器傳送的 WebSocket 流量,後端服務逾時會被解讀為 WebSocket 連線可保持開啟的最長時間 (無論是否閒置)。
如要為透過 Ingress 設定的後端服務設定逾時值,請建立 BackendConfig 物件,並在 Service 資訊清單中使用 beta.cloud.google.com/backend-config
註解。
如需設定資訊,請參閱「後端回應逾時」。
HTTPS 負載平衡器的靜態 IP 位址
建立 Ingress 物件時,您會取得一個穩定的外部 IP 位址,用戶端可以使用該位址存取您的 Service,並存取您正在執行的容器。這個 IP 位址在 Ingress 物件的整個生命週期中會持續存在,因此可說是相當穩定。刪除 Ingress 再從同一份資訊清單檔案建立新的 Ingress,並不能保證會獲得相同的外部 IP 位址。
如果您想在刪除 Ingress 後再建立新的 Ingress 時,IP 位址都能保持不變 (永久 IP 位址),則必須保留一個全域靜態外部 IP 位址。然後在您的 Ingress 資訊清單中加入一個註解,提供您保留的靜態 IP 位址名稱。如果您修改現有 Ingress,改為使用靜態 IP 位址而非臨時 IP 位址,GKE 重新建立負載平衡器的轉送規則時,可能會變更負載平衡器的 IP 位址。
舉例來說,假設您保留了一個名為 my-static-address
的全域靜態外部 IP 位址。在您的 Ingress 資訊清單中,請加入一個 kubernetes.io/ingress.global-static-ip-name
註解,如下所示:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: my-static-address
在用戶端和負載平衡器之間設定 HTTPS (TLS)
HTTP(S) 負載平衡器是用戶端與應用程式間的 Proxy。如果要接受來自用戶端的 HTTPS 要求,負載平衡器必須要有憑證,以向用戶端證明其身分。負載平衡器還必須要有私密金鑰才能完成 HTTPS 握手。
當負載平衡器接受來自用戶端的 HTTPS 要求時,用戶端和負載平衡器之間的流量將會使用 TLS 加密。不過負載平衡器會終止 TLS 加密,並將要求在不加密的情況下轉給應用程式。要瞭解如何加密負載平衡器與應用程式之間的流量,請參閱負載平衡器與應用程式之間的 HTTPS。
您可以選擇使用 Google 代管的 SSL 憑證,或使用您自行管理的憑證。如要進一步瞭解如何建立使用 Google 代管憑證的 Ingress,請參閱使用 Google 代管的 SSL 憑證。
如要向 HTTP(S) 負載平衡器提供您自行建立的憑證與金鑰,請建立 Kubernetes Secret 物件。密鑰包含憑證和金鑰。將 Secret 新增至 Ingress
資訊清單的 tls
欄位,如下列範例所示:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress-2
spec:
tls:
- secretName: SECRET_NAME
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: SERVICE_NAME
port:
number: 60000
這個資訊清單包含下列值:
SECRET_NAME
:您建立的 Secret 名稱。SERVICE_NAME
:後端服務的名稱。
對密鑰的變更會定期選取,因此如果您修改了密鑰內部的資料,則最多需要 10 分鐘才能將這些變更套用於負載平衡器。
詳情請參閱「使用 Ingress 在 HTTPS 負載平衡中使用多個 SSL 憑證」。
如要保護 GKE 叢集的 HTTPS 加密 Ingress,請參閱「安全 Ingress」範例。
停用 HTTP
如果您希望用戶端和 HTTP(S) 負載平衡器之間的所有流量都使用 HTTPS,則可以透過在 Ingress 資訊清單中包含 kubernetes.io/ingress.allow-http
註解來停用 HTTP。將註解的值設為 "false"
。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress-2
annotations:
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- secretName: SECRET_NAME
...
這個資訊清單包含您建立的 Secret 名稱 SECRET_NAME
。
負載平衡器的預先共用憑證
除了使用 Kubernetes 密鑰為負載平衡器提供憑證以終止 HTTP(S),您也可以使用之前上傳至 Trusted Cloud 專案的憑證。詳情請參閱使用預先共用憑證以及使用 Ingress 在 HTTPS 負載平衡中使用多個 SSL 憑證。
負載平衡器與應用程式之間的 HTTPS (TLS)
HTTP(S) 負載平衡器是用戶端與應用程式間的 Proxy。用戶端可以使用 HTTP 或 HTTPS 與負載平衡器的 Proxy 進行通訊。負載平衡器 Proxy 與應用程式間的連結預設使用 HTTP。不過,如果您在 GKE Pod 中執行的應用程式能接收 HTTPS 要求,您可以將負載平衡器設為將要求轉送到您的應用程式時使用 HTTPS。
如要設定負載平衡器與應用程式之間所使用的通訊協定,請在 Service 資訊清單中使用 cloud.google.com/app-protocols
註解。除非您使用容器原生負載平衡,否則這項服務資訊清單必須包含 type: NodePort
。如果使用容器原生負載平衡,請使用 type: ClusterIP
。
以下 Service 資訊清單指定了兩個通訊埠。註解表示當 HTTP(S) 負載平衡器指定 Service 的通訊埠 80 時,應該使用 HTTP。當負載平衡器指定 Service 的通訊埠 443 時,則應該使用 HTTPS。
服務資訊清單的通訊埠註解中必須包含 name
值。您只能透過服務的指派 name
編輯服務通訊埠,無法透過 targetPort
值編輯。
apiVersion: v1
kind: Service
metadata:
name: my-service-3
annotations:
cloud.google.com/app-protocols: '{"my-https-port":"HTTPS","my-http-port":"HTTP"}'
spec:
type: NodePort
selector:
app: metrics
department: sales
ports:
- name: my-https-port
port: 443
targetPort: 8443
- name: my-http-port
port: 80
targetPort: 50001
後續步驟
透過建立部署、服務和 Ingress 來設定外部應用程式負載平衡器。
瞭解如何使用 Service 公開應用程式。
閱讀 GKE 網路總覽。
進一步瞭解如何設定 Ingress 功能。
瞭解如何啟用從 HTTP 重新導向至 HTTPS 的功能。