Google-Cloud-Platform
在沒有負載平衡器的情況下在 Google Container Engine 上公開埠 80 和 443
目前我正在做一個小型的愛好項目,一旦它準備好我就會開源。該服務在 Google Container Engine 上執行。我選擇 GCE 是為了避免配置麻煩,成本負擔得起並且可以學習新東西。
我的 pod 執行良好,我創建了一個類型
LoadBalancer
為在埠 80 和 443 上公開服務的服務。這非常有效。但是,我發現對於每個
LoadBalancer
服務,都會創建一個新的 Google Compute Engine 負載平衡器。這個負載均衡器非常昂貴,而且對於單個實例上的業餘項目來說確實做得太過分了。為了降低成本,我正在尋找一種在沒有負載均衡器的情況下公開埠的方法。
到目前為止我已經嘗試過:
- 部署
NodePort
服務。不幸的是,不允許公開低於 30000 的埠。- 部署一個 Ingress,但這也會創建一個負載均衡器。
- 試圖禁用
HttpLoadBalancing
(https://cloud.google.com/container-engine/reference/rest/v1/projects.zones.clusters#HttpLoadBalancing),但它仍然創建了一個負載均衡器。有沒有辦法在沒有負載均衡器的情況下為 Google Container Engine 上的單個實例公開埠 80 和 443?
是的,通過服務上的外部 IP。我使用的範例服務:
apiVersion: v1 kind: Service metadata: name: bind labels: app: bind version: 3.0.0 spec: ports: - port: 53 protocol: UDP selector: app: bind version: 3.0.0 externalIPs: - a.b.c.d - a.b.c.e
請注意,配置文件中列出的 IP 必須是 GCE 上的內部 IP。
除了 ConnorJC 的出色且有效的解決方案:同樣的解決方案也在這個問題中描述: Kubernetes - 我可以避免使用 GCE 負載均衡器來降低成本嗎?
“internalIp”是指計算實例(也稱為節點)的內部 ip(如在 Google Cloud Platform -> Google Compute Engine -> VM Instances 上看到的)
此評論提示了為什麼應該配置內部而不是外部 ip。
此外,在為埠 80 和 443 配置服務後,我必須創建一個防火牆規則,允許流量到我的實例節點:
gcloud compute firewall-rules create your-name-for-this-fw-rule --allow tcp:80,tcp:443 --source-ranges=0.0.0.0/0
完成此設置後,我可以通過 http(s)://externalIp 訪問我的服務