让kubenetes豆荚互相沟通的最好方法是什么?

我有几个豆荚,例如一个python web应用程序和一个redis(由其他应用程序共享),所以我需要把redis放在一个单独的pod中。 但他们都使用docker(172.17.0.0/16),甚至相同的IP地址相同的子网。 应用程序窗口如何与redis窗格交谈?

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


7周后,我更熟悉kubernetes。 我知道kubernetes有networking假设豆荚可以互相访问。 所以如果你的应用服务pod需要访问共享服务(redis)pod,你需要将共享服务公开为kubernetes服务,那么你可以从app pod的环境variables或主机名获得共享服务端点。

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

但总的来说,假设Kubernetes已经正确设置(理想情况下使用提供的脚本之一),使用服务对象在1个或多个redis窗格中进行负载平衡将是标准方法。

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

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

然后,您可以在API中查看这些信息

他们会在

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

NAMESPACE是名称空间的名称。 默认情况下,它是默认的,所以如果你没有在pod中设置命名空间,用'default'replace。SERVICE_NAME是你的服务名称。KUBERNETES_SERVICE_HOST是你的容器中可用的环境variables。

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

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

请隔离IP

您可能还需要凭据才能访问Google Cloud中的https(使用curl进行testing),可以通过查找来查找凭据

 gcloud cluster-info <your-cluster-name> 

注意:即使您不使用该服务与您的Pod交谈,也可以收集您的Pod的IP。 但是请注意,如果在某个节点发生故障时,将其重新安排在其他位置,则这些可能会更改,
该服务负责维护最新的列表,但是您的应用程序需要每隔一段时间拉一次或在端点上设置一个监视,以使其列表保持最新。

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

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

检查设置Redis master + replica slave的留言簿示例,并以这种方式连接到php应用程序

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