簡體   English   中英

如何將K8 Pod暴露給公共互聯網?

[英]How to expose k8 pods to the public internet?

我目前正在學習docker和kubernetes。 我遇到的問題之一就是將Nginx Pod暴露在公共互聯網上。 我想從Web瀏覽器訪問我的serverIP並看到nginx頁面,就像在服務器上安裝了nginx一樣。

來自kubernetes網站的pod-nginx.yml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80

我可以從pod向前移植,然后通過curl訪問默認的nginx頁面。 sudo kubectl port-forward nginx 80:80

curl http://localhost返回nginx頁面,而curl http://<serverIP>返回failed to connect <serverIP> port:80 Connection refused

我是否需要通過修改iptables和防火牆規則在公共網絡接口與群集網絡接口之間進行端口轉發? 我覺得我在這里確實缺少一些明顯的東西。

我嘗試使用nodeport屬性並閱讀了有關入口和負載平衡器的文檔,但是我的雲提供程序沒有這些后端功能,因此這些命令最終會無限期地掛起。

有多種公開服務的方式:

  • 使用NodePort :這將在主機中打開一個端口,您可以在其中訪問服務。 例如,像192.168.100.99:37843這樣的東西,是192.168.100.99所在的群集所在的HOST系統之一。

  • 使用LoadBalancer :如果您的集群位於Google之類的雲中,則可以使用基礎架構為服務生成外部IP。 我堅持以下事實:底層雲必須支持它。

  • 使用Ingress規則 :LoadBalancers的適當替代方法是使用反向代理。 Kubernetes允許您在端口80和443中偵聽此反向代理,並使用Ingress規則將流量轉發到您的不同服務。

考慮到您的情況,我認為“入口規則”選項將滿足您的需求。 如果您的集群未安裝Ingress控制器,則可以基於nginx安裝控制器。

要公開Pod或部署,您必須執行以下操作。

  1. 使用nodeport標志可以在所有節點上為應用程序分配相同的端口。 Kubernetes將創建一個ServiceIP,在其中將公開您的應用程序。

kubectl expose <deployment> --nodeport=<common-port> --port=<container-port>

創建暴露服務后,您可以使用kubectl get services獲得ServiceIP

  1. 使用nginx或其他負載平衡器將代理反向到您的節點中。 我通過在/etc/nginx/sites-enabled創建默認文件來將nginx配置為proxy_pass到我的應用程序

    服務器{收聽80;

    位置/ {proxy_pass http:// ServiceIP:ApplicationPort ; }}

此方法允許唯一的路由,甚至輪循負載平衡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM