Kubernetes: Expose only single pod of StatefulSet

Viewed 794

For for a StateFul set, I can access its pods via a headless service internally.

I think, it would make sense, to have an easy way to expose also single pods externally (since the pods usually have a state and therefore loadbalancing over them makes no sense).

So far, I found no straight forward way to do that. Even doing kubectl expose pod pod-1 --type NodePort gives me a service which balances over all pods. Is there a reason why this is like this or is there a nice way to access single pods.

2 Answers

You can expose a specific Pod in a StatefulSet externally by matching on the statefulset.kubernetes.io/pod-name label.

For example, if your StatefulSet is named app and you want to expose port 80 from the first Pod as a Service:

apiVersion: v1
kind: Service
metadata:
  name: app-0
spec:
  type: LoadBalancer
  selector:
    statefulset.kubernetes.io/pod-name: app-0
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
Related