本教學課程說明如何透過設定 Ingress 資源,在外部應用程式負載平衡器後方執行網路應用程式。
本頁面適用於網路專家,他們負責為機構設計及建構網路,並安裝、設定及支援網路設備。如要進一步瞭解我們在Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。
背景
Google Kubernetes Engine (GKE) 針對可公開存取的應用程式適用的兩種 Cloud Load Balancing,提供整合式支援:
在本教學課程中,您會使用 Ingress。
Ingress
在資源資訊清單中指定 kind: Ingress
時,您會指示 GKE 建立 Ingress 資源。只要加入註解,並支援工作負載和服務,即可建立自訂 Ingress 控制器。否則,GKE 會發出適當的 Google Cloud API 呼叫,建立外部應用程式負載平衡器。負載平衡器的網址對應主機規則和路徑比對器會參照一或多個後端服務,其中每個後端服務都對應至 Ingress
中參照的 NodePort
類型 GKE Service。每個後端服務的後端都是執行個體群組或網路端點群組 (NEG)。設定 容器原生負載平衡做為 Ingress 設定的一部分時,系統會建立 NEG。針對每個後端服務,GKE 會根據對應 GKE Service 參照的工作負載就緒探測設定,建立 Google Cloud 健康狀態檢查。
如果您要公開在 GKE 上託管的 HTTP(S) 服務,建議您使用 HTTP(S) 負載平衡這個方法進行負載平衡。
部署網頁應用程式
下列資訊清單說明 Deployment,該部署會在通訊埠 8080 的 HTTP 伺服器上執行範例網路應用程式容器映像檔:
將資源套用至叢集:
kubectl apply -f web-deployment.yaml
公開叢集內的 Deployment
下列資訊清單說明 Service,可讓容器叢集存取 web
部署作業:
將資源套用至叢集:
kubectl apply -f web-service.yaml
使用這個指令建立 NodePort 類型的 Service 時,GKE 會讓叢集中的所有節點透過隨機選取的高通訊埠號碼 (例如 32640) 存取 Service。
確認服務已建立,且系統已分配節點通訊埠:
輸出:kubectl get service web
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web NodePort 10.35.245.219 <none> 8080:32640/TCP 5m
在輸出範例中,
web
Service 的節點通訊埠為32640
。 另請注意,系統沒有為此 Service 分配外部 IP。根據預設,您無法從外部存取 GKE 節點,因此建立此 Service 不會讓您的應用程式可從網際網路存取。
如要讓 HTTP(S) 網路伺服器應用程式可公開存取,您必須建立 Ingress 資源。
建立 Ingress 資源
Ingress 是 Kubernetes 資源,封裝了一組規則和設定,可將外部 HTTP(S) 流量轉送至內部服務。
在 GKE 上,Ingress 會透過 Cloud Load Balancing 實作。在叢集中建立 Ingress 時,GKE 會建立一個 HTTP(S) 負載平衡器,並設定為將流量轉送至您的應用程式。
下列資訊清單說明 Ingress 資源,該資源會將流量導向至您的 web
Service:
將資源套用至叢集:
kubectl apply -f basic-ingress.yaml
部署此資訊清單後,Kubernetes 會在您的叢集上建立 Ingress 資源。GKE Ingress 控制器會根據 Ingress 中的資訊建立及設定 HTTP(S) 負載平衡器,將通訊埠 80 上的所有外部 HTTP 流量轉送至您公開的 web
NodePort Service。
前往應用程式
請執行下列指令,找出為您的應用程式提供服務的負載平衡器外部 IP 位址:
kubectl get ingress basic-ingress
NAME HOSTS ADDRESS PORTS AGE basic-ingress * 203.0.113.12 80 2m
在瀏覽器中開啟應用程式的外部 IP 位址,並查看純文字 HTTP 回應,如下所示:
Hello, world! Version: 1.0.0 Hostname: web-6498765b79-fq5q5
您可以前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面,檢查 GKE Ingress 控制器建立的網路資源。
(選用) 設定靜態 IP 位址
在網域名稱上公開網路伺服器時,您必須將應用程式的外部 IP 位址設為不會變動的靜態 IP。
根據預設,GKE 會為透過 Ingress 公開的 HTTP 應用程式分配暫時的外部 IP 位址。暫時位址可能會有變動。如果您打算長期執行應用程式,就必須使用靜態外部 IP 位址。
請注意,為 Ingress 資源設定靜態 IP 後,刪除 Ingress 時將不會一併刪除與其關聯的靜態 IP 位址。如果您不再需要使用這些靜態 IP 位址,請務必清除設定。
如要設定靜態 IP 位址,請完成下列步驟:
預留名為
web-static-ip
的靜態外部 IP 位址:basic-ingress-static.yaml
資訊清單會在 Ingress 上新增註解,以使用名為web-static-ip
的靜態 IP 資源:查看資訊清單:
cat basic-ingress-static.yaml
將資源套用至叢集:
kubectl apply -f basic-ingress-static.yaml
檢查外部 IP 位址:
kubectl get ingress basic-ingress
等待應用程式的 IP 位址變更為
web-static-ip
資源的預留 IP 位址。您可能需要等待幾分鐘,系統才能更新現有的 Ingress 資源、重新設定負載平衡器,並將負載平衡規則傳播至全球各地。這項作業完成後,GKE 會釋出先前分配給應用程式的暫時 IP 位址。
(選用) 在單一負載平衡器上提供多個應用程式
您可以在 Ingress 上設定轉送規則,以在單一負載平衡器和公開 IP 上執行多項服務。您可以將多項服務託管在相同的 Ingress 上,就不需要為每項公開至網際網路的 Service 建立額外的負載平衡器 (計費資源)。
下列資訊清單說明含有相同網路應用程式 2.0
版本的部署:
將資源套用至叢集:
kubectl apply -f web-deployment-v2.yaml
下列資訊清單說明一項服務,該服務會透過名為 web2
的 NodePort 服務,在叢集內部公開 web2
:
將資源套用至叢集:
kubectl apply -f web-service-v2.yaml
下列資訊清單說明 Ingress 資源:
- 使用開頭為
/v2/
的路徑將要求轉送至web2
Service - 將所有其他要求轉送至
web
Service
將資源套用至叢集:
kubectl create -f fanout-ingress.yaml
部署 Ingress 後,執行 kubectl get ingress fanout-ingress
以找出叢集的公開 IP 位址。
接著造訪 IP 位址,看看您是否可以在同一個負載平衡器上存取兩個應用程式:
- 造訪
http://<IP_ADDRESS>/
,並記下包含Version: 1.0.0
的回應 (要求轉送至web
Service) - 造訪
http://<IP_ADDRESS>/v2/
,並記下包含Version: 2.0.0
的回應 (要求轉送至web2
Service)
Ingress 的 path
欄位僅支援 *
字元做為萬用字元。*
字元必須在正斜線 (/
) 之後,並且必須是模式中的最後一個字元。例如,/*
、/foo/*
和 /foo/bar/*
是有效模式,但 *
、/foo/bar*
和 /foo/*/bar
則不是。
較明確的模式會優先於較不明確的模式。如果您同時有 /foo/*
和 /foo/bar/*
,系統會使用 /foo/bar/bat
來比對 /foo/bar/*
。
如要進一步瞭解路徑限制和模式比對,請參閱網址對應說明文件。
(選用) 監控服務的可用性和延遲情形
Google Cloud 正常運作時間檢查會從使用者角度執行應用程式的黑箱監控,判斷從多個外部 IP 到負載平衡器 IP 位址的延遲時間和可用性。相較之下, Google Cloud 健康狀態檢查會對 Pod IP 執行內部檢查,判斷執行個體層級的可用性。這些檢查是互補的,可提供應用程式健康狀態的整體情況。
您可以使用 Google Cloud 控制台、Cloud Monitoring API 或 Cloud Monitoring 用戶端程式庫,建立運作時間檢查。詳情請參閱「管理運作時間檢查」。如要使用 Google Cloud 控制台建立運作時間檢查,請按照下列步驟操作:
前往 Google Cloud 控制台的「Services & Ingress」(服務與 Ingress) 頁面。
按一下要建立運作時間檢查的服務名稱。
按一下「建立運作時間檢查」。
在「建立運作時間檢查」窗格中,輸入運作時間檢查的標題,然後按一下「下一步」,前往「目標」設定。
系統會使用服務負載平衡器的資訊,自動填入正常運作時間檢查的「目標」欄位。
如需運作時間檢查中所有欄位的完整說明文件,請參閱「建立運作時間檢查」。
按一下「下一步」,前往「回應驗證」設定。
按一下「下一步」前往「快訊和通知」部分。
如要監控運作時間檢查,您可以建立快訊政策或查看運作時間檢查資訊主頁。如果運作時間檢查失敗,快訊政策會透過電子郵件或其他管道通知您。如要大致瞭解快訊政策,請參閱「快訊簡介」一文。
點選「建立」。
附註
根據預設,Ingress 會透過在 /
路徑做出 GET
要求,執行定期健康狀態檢查,以判斷該應用程式的健康狀態,並預期 HTTP 200 回應。如果您想要檢查不同的路徑,或預期不同的回應碼,可以使用自訂健康狀態檢查路徑。
Ingress 支援更多進階用途,例如:
以名稱為基礎的虛擬託管:您可以利用 Ingress,將負載平衡器重複用於多個網域名稱和子網域,也可以公開單一 IP 位址和負載平衡器上的多項 Service。查看簡易 fanout 和以名稱為基礎的虛擬託管範例,瞭解如何為這些工作設定 Ingress。
終止 HTTPS:您可以設定 Ingress,使用 Cloud Load Balancer 終止 HTTPS 流量。
刪除 Ingress 後,GKE Ingress 控制器會自動清除相關資源 (除了預留的靜態 IP 位址以外)。