我的pod(pod1)内部可以使用其服务连接到另一个pod,如下所示:
pod2-service.namespace.svc.cluster.local
但是,我希望pod1
使用pod2
之类的URL连接到abc.com
,该URL未在DNS中注册。基本上,我希望pod1将abc.com
解析为pod2-service.namespace.svc.cluster.local
。
我在这里查看hostAliases
:
但是,它需要一个IP。如何在Kubernetes中做到这一点?
答案 0 :(得分:0)
我认为您可以将固定IP用作pod2的服务IP,然后在您的hostalias定义中使用此IP。
答案 1 :(得分:0)
有两件事:
StatefulSets,您将始终知道窗格的名称,并且可以根据其ordinal index来找到它。
Using Pod hostname and subdomain spec field(仅适用于独立Pod,afaik)
但是,Deployments中Kubernetes似乎并没有本地支持Pod到Pod,这里的理由是Pod可以不断更改IP地址和名称。您可以使用Pod default DNS entries,但DNS条目也将根据分配给Pod的IP地址而有所不同。
我可以想到的用于部署的另一种解决方案是将Consul与stub domains一起使用,然后在每个Pod上必须添加initContainer或领事代理人向领事服务注册其IP,每次pod重启时,都需要覆盖领事中的DNS注册。
如果您不想使用存根域,也可以选择使用Pod DNS Configs。
答案 2 :(得分:0)
在运行应用程序代码之前,您可以获取服务ip并将其附加到pod1中的/etc/hosts
上。
echo "$(getent hosts pod2-service.namespace.svc.cluster.local | awk '{ print $1 }') abc.com" >> /etc/hosts
Notice: It is pretty hacky because you should guarantee service ip of pod2 is fixed. When service ip changed, pod1 will fail to reslove the host.