当前位置: 首页 > 知识库问答 >
问题:

对于容器到容器的通信,应使用什么 IP?服务的群集 IP 或终结点

邵宜年
2023-03-14

我已经将Rancher Helm图表部署到我的库伯内特斯集群,并希望从另一个pod(即运行入口控制器的pod)访问Rancher API/UI。

当我列出服务和endpoint时。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地址到达后端不起作用(curl10.100.200.253只是没有响应并永远阻塞)。

尝试通过endpoint地址访问后端可以:

$ curl 10.200.23.13
<a href="https://10.200.23.13/">Found</a>.

我很困惑为什么endpointIP地址和ClusterIP地址不同,为什么无法连接到ClusterIP地址。有什么提示可以完善我的理解吗?

共有1个答案

沈华皓
2023-03-14

在 Kubernetes 中,每个 Pod 和服务都有自己的 IP 地址。kubectl get services IP 地址是服务的 Kubernetes 内部地址;获取其后面 Pod 的 ep 地址地址。该服务实际上就像一个负载均衡器,可以附加多个 Pod。Kubernetes Service 文档详细介绍了这里到底发生了什么。

Kubernetes还提供了一个可以解析服务名称的内部DNS服务。您通常不应该直接使用这些IP地址中的任何一个;相反,请使用主机名< code > release-name-rancher . default . SVC . cluster . local (或者如果您在其他Kubernetes名称空间中运行,请替换“default”)。

而<代码>..._SERVICE_HOST您引用的环境变量受支持并有文档记录,我会避免使用它。特别要注意的是,如果您< code>helm install或< code>kubectl apply一次应用一大组资源,并且Pod在服务之前创建,那么您将处于一致的状态,只是Pod实际上没有这个环境变量。在服务没有固定名称的地方,环境html" target="_blank">变量名也不会固定。更喜欢DNS名称。

 类似资料:
  • 服务器使用java,并通过TCP与C客户端通信。当用户离开计算机超过5分钟时,客户端将向服务器发送一个字节数组。java服务器由spring集成ip编写。我不知道是否应该使用nio=“true”设置?并发有什么问题吗?如何使用自定义协议转换字节数组?我是TCP和spring集成的新手,谢谢你的帮助! 我在按照示例编写应用程序时遇到了一个问题。服务器对字节流进行反序列化,然后回显服务,但在回显服务返

  • 问题内容: 我在一台机器上有多个docker容器。在每个容器上运行一个进程和一个为该进程提供API的Web服务器。 我的问题是,当默认端口为80时,如何从浏览器访问API?为了能够访问docker容器内的Web服务器,请执行以下操作: 这样,我可以在计算机终端上执行以下操作: 但是如何使用多个容器和多个Web服务器来处理呢? 问题答案: 您可以公开多个端口,例如 或在您的API容器前面放置一个代理

  • 我是docker的新手。我在windows 10上使用docker for windows。我创建了一个docker容器应用程序(spring boot),该应用程序需要与rabbitmq通信-这也是在一个容器中。他们都使用相同的docker网络(默认网桥网络),但当我尝试连接到rabbitmq(端口5672)时,连接被拒绝。我使用的是容器IP(rabbitmq为172.17.0.2)。如果我在d

  • > 我正试图弄清楚Kubernetes中的网络,尤其是多集装箱吊舱的处理。在我的简单场景中,我总共有3个豆荚。其中一个有两个容器,另一个只有一个容器,它希望与多容器吊舱中的特定容器通信。我想弄清楚kubernetes如何处理此类容器之间的通信。 为此,我在一个“sidecar体系结构”中有一个简单的多容器吊舱,YAML文件如下所示: > 我想用这个YAML文件实现的是,在pod“nginx”中,有

  • 我有一个服务器,在这个服务器中有一个docker容器正在运行,我在容器中有一个shell脚本,它需要服务器的ip,而不是docker容器的ip。有什么办法可以做到吗? 我在谷歌上搜索了很长时间,却找不到类似的问题。 请帮忙。

  • 在独立AEM安装中,felix OSGi容器是否存在于jetty servlet容器中?或者Jetty服务器是作为捆绑包安装在Felix OSGi容器中的? AEM启动时,哪一个将首先启动? 对于基于战争的安装,这将如何改变? 根据这个答案,两者都是可能的。但我想知道AEM采用哪种方法。