如何访问本地群集中的Kubernetes pod?

时间:2017-06-12 15:33:03

标签: kubernetes microservices kube-proxy

我已经建立了一个实验性本地 Kubernetes集群,其中包含一个主节点和三个从节点。我已经为侦听端口10001的自定义服务创建了部署。目标是访问具有稳定IP /主机名的示例性端点/hello,例如: http://<master>:10001/hello

部署部署后,可以很好地创建pod,并可通过其群集IP访问。

我了解云提供商的解决方案是为部署创建负载均衡器服务,以便您只需expose服务。但是,本地群集显然不支持此功能。为此目的设置Ingress似乎有点过头了。不是吗?

似乎更像kube proxy是要走的路。但是,当我在主节点上运行kube proxy --port <port>时,我可以访问http://<master>:<port>/api/...,但不能访问实际的广告连播。

有许多相关问题(例如How to access services through kubernetes cluster ip?),但没有(已接受)答案。 documentation上的Kubernetes topic也相当稀疏,所以我甚至不确定概念上的正确方法是什么。

因此,我正在寻找一个直接的解决方案和/或一个好的教程。这似乎是一个非常典型的用例,但缺乏明确的路径。

2 个答案:

答案 0 :(得分:0)

Ingress可能是你最简单的赌注。

您可以非常简单地安排创建Nginx IngressController;这是a guide。请注意,此设置使用DaemonSet,因此每个节点上都有一个IngressController。它还使用hostPort配置选项,因此IngressController将侦听节点的IP,而不是不稳定的虚拟服务IP。

现在您只需要将HTTP流量传输到任何一个节点。您可能希望为每个服务定义一个外部DNS条目,每个条目都指向您节点的IP(即多个A / AAAA记录)。入口将使用name-based virtual hosting基于HTTP主机名在群集内消除歧义和路由。

如果您需要公开非HTTP服务,这会涉及更多内容,但您可以查看nginx入口文档以获取更多示例(例如UDP)。

答案 1 :(得分:0)

如果Ingress Controller对您的方案有些过分,您可能想尝试使用NodePort类型的服务。您可以指定端口,或让系统为您自动分配一个端口。

NodePort服务会在群集中所有节点的同一端口上公开您的服务。如果您具有对节点的网络访问权限,则可以通过配置中指定的节点IP和端口访问您的服务。

显然,这不会在节点之间进行负载平衡。如果要模拟真正的负载均衡器可以做什么,可以添加外部服务来帮助您执行此操作。一个简单的选择是运行类似rocky-cli的内容。