Search code examples
kubernetesserviceendpoint

Kubernetes: Only one service endpoint working


I've deployed my Django/React app into K8s and exposed both deployments as a service (ClusterIP). Whenever I try to call the API service through its ClusterIP:8000, it sometimes refuses the connection. So I checked its endpoints and only one out of the three existing endpoints returns what I expect. I understand that when calling the ClusterIP, it redirects to one of those three endpoints.

Is there any way to 'debug' a incoming service request? Can I modify the amount of existing endpoints (so I could limit it to the only working endpoint)? Is there any other way to maybe see logs of the service to find out why only one of the endpoints is working?


Solution

  • I was able to fix it:

    I deployed a three-tier-application (Django/React/DB) and used the same selector for every deployment, like this:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-xxx-deployment
      labels:
        app: myapp
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: myapp
    

    So when exposing this with "kubectl expose deployment/..." it created as many endpoints as equal selectors were found in the deployment. Since I have three deployments (DB/React/Djagno), three endpoints were created.

    Changing the deployment .yaml like this fixed my error and only one endpoint was crated:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: myapp-web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mapp-web