本教學課程將示範如何使用 Google Kubernetes Engine (GKE),在靜態外部 IP 位址上將網路應用程式公開到網際網路,並設定指向應用程式的網域名稱。
本教學課程假設您擁有已註冊的網域名稱,例如 example.com
。
目標
本教學課程將示範以下步驟:
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
請依照下列步驟啟用 Kubernetes Engine API:- 前往 Google Cloud 控制台的 Kubernetes Engine 頁面。
- 建立或選取專案。
- 等待 API 和相關服務完成啟用。 這可能需要幾分鐘的時間。
-
Make sure that billing is enabled for your Google Cloud project.
請安裝下列指令列工具,我們將在本教學課程中使用這些工具:
-
gcloud
可用來建立和刪除 Kubernetes Engine 叢集。gcloud
包含在gcloud
CLI 中。 -
kubectl
可用於管理 Kubernetes,這是 Kubernetes Engine 使用的叢集自動化調度管理系統。您可以使用gcloud
安裝kubectl
:gcloud components install kubectl
從 GitHub 複製程式碼範例:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernetes-engine-samples/quickstarts/hello-app/manifests
設定 gcloud
指令列工具的預設設定
如要節省在 gcloud
指令列工具中輸入專案 ID 和 Compute Engine 區域選項的時間,可以採用預設設定:gcloud config set project project-id gcloud config set compute/zone compute-zone
建立叢集
建立叢集:
gcloud container clusters create-auto domain-test
部署網頁應用程式
下列資訊清單說明執行範例網路應用程式容器映像檔的部署:
建立 Deployment:
kubectl apply -f helloweb-deployment.yaml
公開應用程式
您可以使用下列任一方法,在 GKE 上公開應用程式:
使用服務,建立可與地區 IP 位址搭配使用的外部直通式網路負載平衡器。
使用 Ingress,建立應用程式負載平衡器,並支援全域 IP 位址。
如要進一步瞭解各方法的優缺點,請參閱「使用 Ingress 設定外部應用程式負載平衡器」。
使用服務
如要確保應用程式具有靜態外部 IP 位址,您必須預留靜態 IP 位址。
如果您選擇使用服務公開應用程式,則必須建立地區性 IP 位址。全球 IP 位址僅適用於 Ingress 資源類型,下節將有說明。
如要使用服務,請在 us-central1
地區中建立名為 helloweb-ip
的靜態 IP 位址:
gcloud
gcloud compute addresses create helloweb-ip --region us-central1
找出您建立的靜態 IP 位址:
gcloud compute addresses describe helloweb-ip --region us-central1
輸出結果會與下列內容相似:
...
address: 203.0.113.32
...
設定連接器
附註:此步驟需要使用設定連接器。請按照安裝操作說明在叢集上安裝設定連接器。
將資訊清單儲存為 compute-address-regional.yaml
。
將資訊清單套用至叢集:
kubectl apply -f compute-address-regional.yaml
找出您建立的靜態 IP 位址:
kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'
下列資訊清單說明 LoadBalancer 類型的服務,這項服務會建立外部直通網路負載平衡器,以外部 IP 位址公開 Pod。
將 YOUR.IP.ADDRESS.HERE
替換為靜態 IP 位址:
建立 Service:
kubectl apply -f helloweb-service-static-ip.yaml
查看與負載平衡器相關聯的預留 IP 位址:
kubectl get service
輸出結果會與下列內容相似:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s
使用 Ingress
如果選擇使用輸入公開應用程式,您必須預留全域靜態 IP 位址。使用 kubernetes.io/ingress.global-static-ip-name
註解指定全域 IP 位址。
如要向區域中的用戶端和服務公開應用程式,請在部署 GKE 的內部 Ingress 資源時,使用區域靜態內部 IP 位址,並提供必要註解。
如要瞭解如何使用 Ingress 將應用程式公開到網際網路,請參閱使用 Ingress 設定外部應用程式負載平衡器。
如何建立名為 helloweb-ip
的全球靜態 IP 位址:
gcloud
gcloud compute addresses create helloweb-ip --global
找出您建立的靜態 IP 位址:
gcloud compute addresses describe helloweb-ip --global
輸出結果會與下列內容相似:
...
address: 203.0.113.32
...
設定連接器
附註:此步驟需要使用設定連接器。請按照安裝操作說明在叢集上安裝設定連接器。
將資訊清單儲存為 compute-address-global.yaml
。
將資訊清單套用至叢集:
kubectl apply -f compute-address-global.yaml
下列資訊清單說明 Ingress,該 Ingress 會透過兩種資源,在靜態 IP 上公開網路應用程式:
- 具有
type:NodePort
的Service
- 已設定服務名稱與靜態 IP 註解的
Ingress
kubernetes.io/ingress.global-static-ip-name
註解指定要與負載平衡器相關聯的全域 IP 位址資源名稱。
將資訊清單套用至叢集:
kubectl apply -f helloweb-ingress-static-ip.yaml
查看與負載平衡器相關聯的 IP 位址:
kubectl get ingress
輸出內容類似如下
NAME HOSTS ADDRESS PORTS AGE
helloweb * 203.0.113.32 80 4m
查看預留的靜態 IP 位址
若要驗證負載平衡器的設定正確無誤,您可以使用網路瀏覽器造訪 IP 位址,或使用 curl
:
curl http://203.0.113.32/
輸出結果會與下列內容相似:
Hello, world!
Hostname: helloweb-3766687455-8lvqv
設定網域名稱記錄
如要讓查詢網域名稱 (例如 example.com
) 或子網域名稱 (例如 blog.example.com
) 的瀏覽器指向預留的靜態 IP 位址,您必須更新網域名稱的 DNS (網域名稱伺服器) 記錄。
您必須為網域或子網域名稱建立「A」 (位址) 類型的 DNS 記錄,並使用預留的 IP 位址設定 DNS 記錄的值。
網域的 DNS 記錄是由網域名稱伺服器所管理。網域名稱伺服器可能是您註冊網域的「註冊商」、Cloud DNS 等 DNS 服務,或其他第三方供應商。
如果網域名稱伺服器是 Cloud DNS:請按照 Cloud DNS 快速入門指南操作,使用應用程式的預留 IP 位址來設定網域名稱的 DNS A 記錄。
如果網域名稱伺服器是其他供應商:請參閱 DNS 供應商的文件,瞭解如何設定 DNS A 記錄來設定網域名稱。如果您選擇改用 Cloud DNS,請參閱「遷移至 Cloud DNS」。
造訪您的網域名稱
如要驗證網域名稱的 DNS A 記錄是否會解析成預留的 IP 位址,請造訪您的網域名稱。
如要進行網域名稱 A 記錄的 DNS 查詢,請執行 host
指令:
host example.com
輸出結果會與下列內容相似:
example.com has address 203.0.113.32
現在,您可以將網路瀏覽器指向網域名稱,並造訪您的網站。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
刪除 Service 和 Ingress:
kubectl delete ingress,service -l app=hello
釋出預留的靜態 IP。刪除負載平衡器之後,已預留但未使用的 IP 位址就會按未使用的 IP 位址價格計費。
如果您使用服務:
gcloud compute addresses delete helloweb-ip --region us-central1
如果您使用 Ingress:
gcloud compute addresses delete helloweb-ip --global
刪除範例應用程式:
kubectl delete -f helloweb-deployment.yaml
刪除叢集:
gcloud container clusters delete domain-test
後續步驟
- 探索其他 Kubernetes Engine 教學課程。
- 探索 Google Cloud 的參考架構、圖表和最佳做法。 歡迎瀏覽我們的雲端架構中心。