本教學課程將示範如何使用 Google Kubernetes Engine (GKE),在靜態外部 IP 位址上將網路應用程式公開到網際網路,並設定指向應用程式的網域名稱。
本教學課程假設您擁有已註冊的網域名稱,例如 example.com
。
部署網頁應用程式
下列資訊清單說明執行範例網路應用程式容器映像檔的部署:
建立 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
現在,您可以將網路瀏覽器指向網域名稱,並造訪您的網站。