【发布时间】:2018-02-08 14:13:21
【问题描述】:
我有一个带有 2 个 pod 的节点。每个 pod 都需要相互交谈。问题是我不想为通信硬编码 IP。
类似于 DNS 服务,我需要一些可以位于 pod ip 之上并允许我仍然在 pod 之间进行通信的东西(不会改变)。
【问题讨论】:
-
阅读服务。使用该服务来抽象出一组共享一组标签的 pod
标签: kubernetes
我有一个带有 2 个 pod 的节点。每个 pod 都需要相互交谈。问题是我不想为通信硬编码 IP。
类似于 DNS 服务,我需要一些可以位于 pod ip 之上并允许我仍然在 pod 之间进行通信的东西(不会改变)。
【问题讨论】:
标签: kubernetes
我可以看到两个解决方案
解决方案一:使用服务
如果他们不是来自同一个控制器,如果他们有自己的服务,他们可以使用服务相互通信。
Service 1 - > Pod 1
Service 2 - > Pod 2
使用此服务
Pod 1: Service 2 -> Pod 2
Pod 2: Service 1 -> Pod 1
解决方案 2: 使用 StatefulSet
如果他们需要相同的控制器,您可以使用StatefulSet。
对于有 N 个副本的 StatefulSet,StatefulSet 中的每个 Pod 都将被分配一个整数序号,范围为 [0,N],在 Set 中是唯一的
这意味着 Pod 名称将是:$(statefulset name)-$(ordinal)
如果您有名为 nginx 的 StatefulSet 和副本 2,您将拥有两个 Pod nginx-0 和 nginx-1。
在创建每个 Pod 时,它会获得一个匹配的 DNS 子域,格式为:
$(podname).$(governing service domain)
Pod nginx-0: nginx-1.{service-account}.{namespace}.svc.cluster.local -> nginx-1
Pod nginx-1: nginx-0.{service-account}.{namespace}.svc.cluster.local -> nginx-0
使用这个Stable Network ID,这些 Pod 可以相互通信。
【讨论】:
externalIPs,它之间的交流很顺畅。谢谢