0

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

部署部署后,Pod 已创建良好并可通过其集群 IP 访问。

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

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

有很多相关的问题(例如如何通过 kubernetes 集群 ip 访问服务?),但没有(接受)答案。关于该主题的 Kubernetes文档也相当稀少,所以我什至不确定从概念上来说什么是正确的方法。

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

4

2 回答 2

1

如果 Ingress Controller 对您的场景来说太过分了,您可能想尝试使用 type 的服务NodePort。您可以指定端口,或让系统为您自动分配一个。

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

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

于 2017-06-13T03:08:46.677 回答
0

Ingress 可能是您最简单的选择。

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

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

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

于 2017-06-12T19:09:52.343 回答