Docker 什么';让kubenetes吊舱相互通信的最佳方式是什么?

Docker 什么';让kubenetes吊舱相互通信的最佳方式是什么?,docker,kubernetes,Docker,Kubernetes,我有几个pod,例如一个pythonweb应用程序和一个redis(由其他应用程序共享),所以我需要将redis放在一个单独的pod中。但它们都使用来自docker(172.17.0.0/16)的相同子网,甚至使用相同的ip地址。应用程序播客如何与redis播客对话 也许我想问的是,设置多主机网络的最佳方式是什么 7周后,我对库伯内特斯更加熟悉了。我知道kubernetes有一个网络假设豆荚可以互相访问。因此,如果您的应用程序service pod需要访问共享服务(redis)pod,您需要将

我有几个pod,例如一个pythonweb应用程序和一个redis(由其他应用程序共享),所以我需要将redis放在一个单独的pod中。但它们都使用来自docker(172.17.0.0/16)的相同子网,甚至使用相同的ip地址。应用程序播客如何与redis播客对话

也许我想问的是,设置多主机网络的最佳方式是什么



7周后,我对库伯内特斯更加熟悉了。我知道kubernetes有一个网络假设豆荚可以互相访问。因此,如果您的应用程序service pod需要访问共享服务(redis)pod,您需要将共享服务公开为kubernetes服务,然后您可以从应用程序pod的环境变量或主机名获取共享服务端点。

您是如何设置kubernetes的?我不知道有任何安装脚本将pod IP放入子网


但一般来说,假设Kubernetes已正确设置(理想情况下使用提供的脚本之一),则在1个或多个redis吊舱之间使用负载平衡将是标准方法。

创建服务时,该服务将代理到不同吊舱的连接

因此,一个服务维护吊舱容器的IP列表

然后,您可以在API中查找这些内容

他们将在

http(s)://${KUBERNETES_SERVICE_HOST}/api/v1/namespaces/${NAMESPACE}/endpoints/${SERVICE_NAME}
NAMESPACE是命名空间的名称。默认情况下,它是默认的,因此如果您没有在pod中设置名称空间,请将其替换为“default” 服务名称是您的服务名称 KUBERNETES_SERVICE_HOST是容器中可用的环境变量

您将得到一个带有容器和“ip”标记的JSON对象。 然后,您可以通过管道将答案传递给

grep '\"ip\"' | awk '{print $2}' | awk -F\" '{print $2}' 
一定要隔离IP

您可能还需要凭据才能访问https(使用curl进行测试) 在谷歌云中,可以通过查找找到凭据

gcloud cluster-info <your-cluster-name>
gcloud集群信息
注意:即使您不使用该服务与您的播客通话,它也可以为您的播客收集IP。但是请注意,如果pod在节点发生故障时被重新安排在其他地方,这些可能会改变,

该服务负责维护最新列表,但您的应用程序需要每隔一段时间拉一次,或在端点上设置一个手表,以保持列表的最新状态。

我意识到问题可能有点模糊:

如果你想让你的应用程序与redis服务对话,那么为redis设置一个服务(例如,名称为“redis”),然后只需通过主机名“redis”调用redis服务,就可以访问redis服务

查看留言簿示例,该示例设置了Redis master+副本从属,并通过这种方式连接到php应用程序


Kubernetes通过向Kubernetes服务(与POD关联)提供DNS名称,提供了一种基本的服务发现机制。当一个pod想要与另一个pod通话时,它应该使用DNS名称(例如svc1.namespace1.svc.cluster.local)

或使用kubenetes的服务?您说过:“它们都使用来自docker的相同子网(172.17.0.0/16)甚至相同的ip地址”。这表明您没有正确配置网络。请看一看:Kubernetes依赖于一些基本的东西。172子网是docker0网桥使用的网络。如果在未安装CA证书的集群中使用https,则可能还需要使用curl--unsecure标志。