让kubenetes豆荚互相沟通的最佳方式是什么?

问题描述:

我有几个豆荚,例如一个python web应用程序和一个redis(由其他应用程序共享),所以我需要将redis放在单独的窗格中。但是它们都使用来自docker(172.17.0.0/16)的相同子网或甚至相同的IP地址。应用程序窗口如何与redis窗格交谈?让kubenetes豆荚互相沟通的最佳方式是什么?

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


7周后,我对kubernetes更熟悉了。我知道kubernetes有网络假设豆荚可以互相访问。因此如果您的应用服务pod需要访问共享服务(redis)pod,则需要将共享服务作为kubernetes服务公开,然后您可以从app pod的环境变量或主机名获得共享服务端点。

+0

或u se kubenetes的服务? – xdays

+0

你说:“他们都使用从码头(172.17.0.0/16),甚至相同的IP地址相同的子网”。这表明您尚未正确配置网络。请看看:http://docs.k8s.io/v1.0/admin/networking.html Kubernetes依赖于一些基本的东西。 –

你是如何设置Kubernetes的?我不知道任何将pod IP放入172子网的安装脚本。

但通常,假设Kubernetes已正确设置(理想情况下使用其中一个提供的脚本),则使用​​在1个或多个redis窗格中负载平衡将是标准方法。

+0

172子网是docker0桥使用的网络。 – xdays

当您创建服务时,服务会将连接代理到不同的窗格。

因此,服务维护着豆荚容器的IP列表。

你可以再看看那些了API

在他们将在

http(s)://${KUBERNETES_SERVICE_HOST}/api/v1/namespaces/${NAMESPACE}/endpoints/${SERVICE_NAME} 

命名空间的命名空间的名称。默认情况下,它是默认设置,所以如果您未将代码块中的名称空间替换为'default' SERVICE_NAME是您的服务名称 KUBERNETES_SERVICE_HOST是您的容器中可用的环境变量。

您将得到一个带有容器和“ip”标签的JSON对象。 然后,您可以管的答案,

grep '\"ip\"' | awk '{print $2}' | awk -F\" '{print $2}' 

做隔离的IP

您可能还需要凭据到达HTTPS(与卷曲测试) 在谷歌云计算,凭据可通过观察发现高达

gcloud cluster-info <your-cluster-name> 

注意:即使你不使用该服务来谈谈你的豆荚,它提供收集IP地址为您荚的目的。但是请注意,如果在某个节点出现故障时,将该容器重新安排到其他位置,则这些可能会发生变化,但该服务需要维护最新的列表,但您的应用需要每隔一段时间拉一次或在端点上设置一个监视器保持最新的列表。

+0

如果您在没有安装CA证书的群集中进行https操作,您可能还需要使用curl --insecure标志。 – MrE

我意识到也许这个问题有点含糊:

,如果你要的是你的应用程序交谈Redis的服务,然后设置一个服务Redis的(与“Redis的”为例子的名字)然后Redis的服务将可以访问简单地通过它的主机名“的Redis”

检查,设置了一个Redis的主+副本的奴隶,并可以联系到PHP应用程序(一个或多个)这样

留言簿例如叫它

https://github.com/kubernetes/kubernetes/tree/master/examples/guestbook