Kubernetes, How to enable inter-pod DNS within a same Deployment?

6/24/2019

I am new to Kubernetes, and I am trying to make inter-pod communication over DNS to work.

Pods in My k8s are spawned using Deployments. My problem is all the Pods report its hostname to Zookeeper, and pods use those hostnames found in Zookeeper to ping the other peers. It always fail because the peer's hostnames are unresolvable between pods.

The only solution now is to manually add each pod's hostname to peer's /etc/hosts file. But this method would not endure to work for large clusters.

If there is a DNS solution for inter-pod communication, that keeps a record of any newly generated pods, and delete dead pods, will be great.

Thanks in advance.

-- Minera Fanhiri
dns
kubernetes

2 Answers

6/24/2019

One solution I had found was to add hostname and subdomain under spec->template->spec-> , then the communication over hostnames between each pod is successful.

However, this solution is fairly dumb, because I cannot set the replicas for each Deployment to more than 1, or I will get more than 1 pod with same hostname in the cluster. If I have 10 slave nodes with same function in a cluster, I will need to create 10 Deployments.

Any better solutions?

-- Minera Fanhiri
Source: StackOverflow

6/24/2019

You need to use a service definition pointing to your pods

https://kubernetes.io/docs/concepts/services-networking/service/

With that you have a balanced proxy to control the inter-pod communications and the internal DNS on Kubernetes takes care of that service instead of each pod no matter the state of the pod.

If that simples solution didn't fit your needs you can substitute kubedns as the default internal DNS by using coreDNS.

https://coredns.io/

-- wolmi
Source: StackOverflow