Kubernetes's LoadBalancer yaml not working even though CLI `expose` function works

11/13/2019

This is my Service and Deployment yaml that I am running on minikube:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-hello-world
  labels:
    app: node-hello-world
spec:
  replicas: 1
  selector:
    matchLabels:
      app: node-hello-world
  template:
    metadata:
      labels:
        app: node-hello-world
    spec:
      containers:
      - name: node-hello-world
        image: node-hello-world:latest
        imagePullPolicy: Never
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: node-hello-world-load-balancer
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 9000
    targetPort: 8080
    nodePort: 30002
  selector:
    name: node-hello-world

Results:

$ minikube service node-hello-world-load-balancer --url
http://192.168.99.101:30002
$ curl http://192.168.99.101:30002
curl: (7) Failed to connect to 192.168.99.101 port 30002: Connection refused

However, running the following CLI worked:

$ kubectl expose deployment node-hello-world --type=LoadBalancer
$ minikube service node-hello-world --url
http://192.168.99.101:30130
$ curl http://192.168.99.101:30130
Hello World!

What am I doing wrong with my LoadBalancer yaml config?

-- nubela
kubernetes
minikube

1 Answer

11/13/2019

you have configured wrong the service selector

selector:
name: node-hello-world

it should be:

selector:
app: node-hello-world

https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/

you can debug this by describing the service, and seeing that the endpoint list is empty, so there are no pods mapped to your endpoint's service list

kubectl describe svc node-hello-world-load-balancer | grep -i endpoints
Endpoints:                <none>
-- iliefa
Source: StackOverflow