我有一个包含2个pod的节点。每个吊舱都需要相互通话。问题是我不想硬编码用于通信的IP。
与DNS服务类似,我需要一些东西(不会改变),它可以位于pod ip之上,并允许我在pod之间进行通信。
答案 0 :(得分:6)
我可以看到两个解决方案
解决方案1:使用服务
如果他们不是来自同一个控制器,并且他们有自己的服务,他们可以使用服务相互通信。
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)
广告nginx-0
: nginx-1.{service-account}.{namespace}.svc.cluster.local
- >的 nginx-1
强>
广告nginx-1
: nginx-0.{service-account}.{namespace}.svc.cluster.local
- >的 nginx-0
强>
使用此Stable Network ID,这些Pod可以相互通信。