【问题标题】:what's the best way to let kubenetes pods communicate with each other?让 kubernetes pod 相互通信的最佳方式是什么?
【发布时间】:2015-11-17 14:45:40
【问题描述】:

我有几个 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 的环境变量或主机名中获取共享服务端点。

【问题讨论】:

  • 还是使用kubenetes的服务?
  • 您说:“它们都使用来自 docker(172.17.0.0/16) 的相同子网,甚至使用相同的 IP 地址”。这表明您没有正确配置网络。请看一下:docs.k8s.io/v1.0/admin/networking.htmlKubernetes 依赖的一些基本的东西。

标签: docker kubernetes


【解决方案1】:

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

但总的来说,假设 Kubernetes 已正确设置(最好使用提供的脚本之一),使用 service object 在 1 个或多个 redis pod 之间进行负载平衡将是标准方法。

【讨论】:

  • 172子网是docker0网桥使用的网络。
【解决方案2】:

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

因此,服务会维护 pod 容器的 IP 列表。

然后您可以在 API 中查找它们

他们将在

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

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

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

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

隔离 IP

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

gcloud cluster-info <your-cluster-name>

注意:即使您不使用该服务与您的 pod 通信,它也可以用于为您的 pod 收集 IP。但是请注意,如果在节点发生故障时将 pod 重新安排到其他地方,这些可能会发生变化,
该服务负责维护最新列表,但您的应用需要定期拉取或在端点上设置监视以使其列表保持最新。

【讨论】:

  • 如果您在没有安装 CA 证书的集群中执行 https,您可能还需要使用 curl --insecure 标志。
【解决方案3】:

我意识到这个问题可能有点含糊:

如果您希望您的应用程序与 redis 服务通信,则为 redis 设置一个服务(例如名称为“redis”),然后只需通过主机名调用它即可访问 redis 服务'redis'

查看留言簿示例,该示例设置了 Redis 主服务器 + 副本从服务器并以这种方式连接到 php 应用程序

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多