在kubernetes pod中将URL解析为其他URL

时间:2018-11-13 22:41:08

标签: kubernetes alias google-kubernetes-engine

我的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

https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/

但是,它需要一个IP。如何在Kubernetes中做到这一点?

3 个答案:

答案 0 :(得分:0)

我认为您可以将固定IP用作pod2的服务IP,然后在您的hostalias定义中使用此IP。

答案 1 :(得分:0)

有两件事:

但是,Deployments中Kubernetes似乎并没有本地支持Pod到Pod,这里的理由是Pod可以不断更改IP地址和名称。您可以使用Pod default DNS entries,但DNS条目也将根据分配给Pod的IP地址而有所不同。

我可以想到的用于部署的另一种解决方案是将Consulstub 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.