我已将Rancher Helm图表部署到我的Kubernetes集群,并希望从另一个Pod(即运行入口控制器的Pod)访问Rancher API / UI。
当我列出服务和端点时。 IP地址不同:
$ kubectl get ep | grep rancher
release-name-rancher 10.200.23.13:80 18h
和
$ kubectl get services | grep rancher
release-name-rancher ClusterIP 10.100.200.253 <none> 80/TCP 18h
在客户端容器(即入口控制器)中,我看到了由服务的ClusterIP表示的服务蜂:
$ env | grep RELEASE_NAME_RANCHER_SERVICE_HOST
RELEASE_NAME_RANCHER_SERVICE_HOST=10.100.200.253
尝试通过Env中的IP地址到达后端是行不通的(curl 10.100.200.253
只会传递任何响应并永远阻止)。
尝试通过端点地址到达后端是可行的:
$ curl 10.200.23.13
<a href="https://10.200.23.13/">Found</a>.
我很困惑为什么端点IP地址和ClusterIP地址不同,以及为什么无法连接到ClusterIP地址。有什么提示可以增进我的理解吗?
答案 0 :(得分:3)
在Kubernetes中,每个Pod和Service都有自己的IP地址。 kubectl get services
IP地址是服务的Kubernetes内部地址;其后面Pod的get ep
地址。该服务实际上就像一个负载平衡器,并且可以连接多个Pod。 Kubernetes Service documentation详细介绍了这里发生的事情。
Kubernetes还提供了可以解析服务名称的internal DNS service。通常,您不应该直接使用这些IP地址中的任何一个;而是使用主机名release-name-rancher.default.svc.cluster.local
(如果在其他Kubernetes命名空间中运行,则替换为“默认”)。
虽然支持并记录了您引用的..._SERVICE_HOST
环境变量,但我还是避免使用它。特别要注意的是,如果您一次helm install
或kubectl apply
大量资源并且在服务之前创建了Pod,则您将处于一致状态,只是Pod实际上没有此环境变量。在服务没有固定名称的Helm区域中,环境变量名称也不会固定。首选DNS名称。