什么是让kubenetes pod相互通信的最佳方式?

时间:2015-08-24 08:39:09

标签: docker kubernetes

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

也许我想问的是设置多主机连接器网络的最佳方法是什么。

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

3 个答案:

答案 0 :(得分:2)

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

但总的来说,假设Kubernetes已正确设置(理想情况下使用其中一个提供的脚本),使用service object在1个或更多redis pod上进行负载均衡将成为标准方法。

答案 1 :(得分:2)

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

因此,服务维护容器的IP列表'容器

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

他们将在

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

NAMESPACE是命名空间的名称。默认情况下,它是默认值,因此如果您没有在广告连播中设置名称空间,请使用' default' SERVICE_NAME是您的服务名称 KUBERNETES_SERVICE_HOST是容器中可用的环境变量。

您将获得一个带容器的JSON对象" ip"标签。 然后,您可以将答案传递给

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

确定隔离IP

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

找到凭据
gcloud cluster-info <your-cluster-name>

注意:即使您不使用该服务与您的广告连接进行通信,它也可用于收集您的广告连播的IP。但是请注意,如果在节点发生故障时将pod重新安排到其他位置,这些可能会发生变化 该服务负责维护最新列表,但您的应用需要间隔拉动或在端点上设置监视以使其保持最新状态。

答案 2 :(得分:0)

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