How to Route to specific pod through Kubernetes Service (like a Gateway API)

后端 未结 3 1307
情话喂你
情话喂你 2021-01-05 07:05

I am running Kubernetes on \"Docker Desktop\" in Windows.

I have a LoadBalancer Service for a deployment which has 3 replicas. I would like to access SPECIFIC pod th

相关标签:
3条回答
  • 2021-01-05 07:36

    IMO, the only way to achieve this will be:

    1. Instead of using a deployment with 3 replicas, use 3 deployments with 1 replicas each (or just create pods only); deployment1 -> pod1, deployment2 -> pod2, deployment3 -> pod3
    2. Expose all the deployments on a separate service, service1 -> deployment1, service2 -> deployment2, service3 -> deployment3
    3. Create an ingress resource and route to each pod using the service for each deployment. For example:
      • ingress-url/service1
      • ingress-url/service2
      • ingress-url/service3
    0 讨论(0)
  • 2021-01-05 07:39

    As mentioned by aerokite, you can use StatefulSets. However, if you don't want to modify your deployments, you can simply use Headless Services. As specified in the documentation:

    For headless Services, a cluster IP is not allocated.

    For headless Services that define selectors, the endpoints controller creates Endpoints records in the API, and modifies the DNS configuration to return records (addresses) that point directly to the Pods backing the Service.

    This means that whenever you query the DNS name for your Service (i.e. my-svc.my-namespace.svc.cluster-domain.example), what you get is a list of all the Pod IPs (unlike regular services where you get the cluster IP). You can then select your Pods using your own mechanisms.

    Regarding your new question, if that is your only issue, you can use session affinity. If you set service.spec.sessionAffinity to ClientIP, then connections from a particular client will always go to the same Pod each time. You don't need other modifications like the headless Services mentioned above.

    0 讨论(0)
  • 2021-01-05 07:45

    You can use StatefulSets if you are not required to use deployment.

    For replica 3, you will have 3 pods named

    1. stream-deployment-0
    2. stream-deployment-1
    3. stream-deployment-2

    You can access each pod as $(podname).$(service name).$(namespace).svc.cluster.local

    For details, check this

    You may also want to set up an ingress to point each pod from outside of the cluster.

    0 讨论(0)
提交回复
热议问题