Access IP address of PODs via lookup on Ingress URL

2/16/2019

I am learning Kubernetes and have deployed a headless service on Kubernetes(on AWS) which is exposed to the external world via nginx ingress.

I want nslookup <ingress_url> to directly return IP address of PODs. How to achieve that?

-- Saurav Prakash
kubernetes
kubernetes-ingress

2 Answers

2/16/2019

If you declare a “headless” service with selectors, then the internal DNS for the service will be configured to return the IP addresses of its pods directly. This is a somewhat unusual configuration and you should also expect an effect on other, cluster internal, users of that service.

This is documented here. Example:

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  clusterIP: None
  selector:
    app: MyApp
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 9376
-- Paul Annetts
Source: StackOverflow

2/16/2019

Inside the cluster:

It's not a good idea to let a <ingress_host> resolved to Pod IP. It's a common design to let different kinds of pod served on one single hostname under different paths, but you can only set one (or one group of, with DNS load balance) IP record for it.

However, you can do this by adding <ingress_host> <Pod_IP> into /etc/hosts in init script, since you can get <Pod_IP> by doing nslookup <headless_service>.

HostAlias is another option if you konw the pod ip before applying the deployment.

From outside:

I don't think it's possible outside the cluster. Because you need to do the DNS lookup to get to the ingress controller first, which means it has to be resolved to the IP of ingress controller.

At last, it's a bad idea to use a headless service on Pod because many apps do DNS lookups once and cache the results, which might bring a problem because the IP of Pod can be "changed" frequently.

-- Lentil1016
Source: StackOverflow