一千萬個為什麽

搜索

Kubernetes單個Pod的外部訪問



我正在AWS中運行一個kubernetes集群。我有2個節點。我有一個應該可以從外部訪問的吊艙。問題是,該pod可能位於任一節點上。

根據文檔的解決方案:

  1. Expose the deployment as a NodePort service.
  2. get pods to find the name of the node running the pod.
  3. get nodes to find the IP address of the named node.
  4. Open the NodePort port through EC2 Security Group.

這裏的問題是,這個吊艙可以重新啟動/切換節點,我想?此時,應用程序將不能被前面的節點IP地址使用。

如何確保應用程序始終可用,即使此特定的pod在重新啟動/ etc期間切換節點?

註意:我絕對只想要這個特定窗格中的一個。我不想復制品。

轉載註明原文: Kubernetes單個Pod的外部訪問

一共有 2 個回答:

無論節點所在的節點(即使它在不同的節點上重新調度), NodePort 都能正確解析。

Any : will resolve to a Service type NodePort, no matter what node the pods are running.

每個節點都會將流量轉發到該端口的 Service

您需要位於同一個網絡上(或創建SSH隧道),或者在您的某個節點中將該端口打開到全世界。

我將在評論中對@Tensibai的建議進行具體說明。我開始研究Ingress和Ingress控制器,但是我的知識/實現是錯誤的。我通過Ingress成功連接,但我感覺至少是我的實現,它仍然依賴入口運行的節點。

所以,我開始在AWS上看ELB。我找不到任何有關實施AWS的特定教程。官方的文檔確實有幫助比我知道的更多。它最終變得令人尷尬地容易。我對我的服務yaml進行了單一更改:

type: NodePort

type: LoadBalancer

and applied it via kubectl apply -f my-file.yaml

您可以找到外部IP:

$ kubectl get svc
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP        PORT(S)
my-service       LoadBalancer   100.99.98.97    12.34.56.78        444:31415/TCP

我沒有想到的一個部分是使用第一個端口 444 ,而不是NodePort(本例中的 31415 )。

至 access my app I would use: 12.34.56.78:444

The second part I was not expecting is that the external IP, in my case on AWS, was an ELB. It was created au至matically in AWS. I am not sure if kubernetes does this, or kops? Maybe someone can clarify in the comments.