skip to Main Content

The situation

  • I have a Spring Boot service running inside Kubernetes
  • Multiple instance are running (the kubernetes deployment has multiple replicas configured)
  • I have an incoming HTTP from outside the cluster that hits on of the instances
  • I want to relay the fact to all other instances

Question

Is there an easy, no external things needed, solution to find a list of “all pods of my service” ? I think I remember that this could be possible via DNS resolution but my Google-Fu seems to weak to find something.

Of course I can always to this via some other solution (e.g. Redis, Kafka, whatever) but since I only need this for a one-off feature I would like to not introduce any moving parts and keep it as simple as possible.

2

Answers


  1. You can list all pods behind a service by running

    $ kubectl get endpoints <service-name> -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' 'n' | xargs -I % kubectl get pods --field-selector=status.podIP=%
    
    Login or Signup to reply.
  2. Internal K8s DNS would only get you the IP-address of the service. Luckily, there is the Endpoints resource exactly for the purpose of getting the Pods that back a Service.

    With kubectl you can check endpoints out like this:

    kubectl get endpoints nginx -o yaml
    

    With this command you get hold of the Pod names:

    kubectl get endpoints nginx -o=jsonpath='{.subsets[*].addresses[*].targetRef.name}'
    

    To execute the same thing from your Spring Boot app, you can try to make use of the official Kubernetes Java client library.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search