Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

502 Bad Gateway with Kubernetes Ingress

Tags:

I have a kubernetes setup with the configuration like below:

#--- kind: Service apiVersion: v1 metadata:   name: myservice spec:   selector:     app: my-service   ports:     - protocol: "TCP"       # Port accessible inside cluster       port: 8080       # Port to forward to inside the pod       targetPort: 80    --- apiVersion: extensions/v1beta1 kind: Deployment metadata:   name: my-service spec:   replicas: 1   template:     metadata:       labels:         app: my-service     spec:       containers:         - name: my-service           image: my-custom-docker-regisry/my-service:latest           imagePullPolicy: Always           ports:             - containerPort: 8080       imagePullSecrets:       - name: regcred 

and my ingress:

apiVersion: extensions/v1beta1 kind: Ingress metadata:   name: test-ingress   annotations:     nginx.ingress.kubernetes.io/ssl-redirect: "false" spec:   rules:   - http:       paths:       - path: /myservice         backend:           serviceName: myservice           servicePort: 80 

What I tried to do is pulling the image from my docker registry and run it in the kubernetes. I have configured here one deployment and one service and expose the service to the outside with the ingress.

My minikube is running under ip 192.168.99.100 and when I tried to access my application with address: curl 192.168.99.100:80/myservice, I got 502 Bad Gateway.

Does anyone have an idea why it happended or did I do something wrong with the configuration? Thank you in advanced!

like image 755
Ock Avatar asked Feb 20 '19 10:02

Ock


People also ask

Does 502 Bad gateway get fixed?

Note: A Gateway might refer to different things in networking and a 502 error is usually not something you can fix, but requires a fix by the web server or the proxies you are trying to get access through.

Is Kubernetes Ingress a gateway?

Gloo is a Kubernetes Ingress that is also an API gateway. It is capable of providing rate limiting, circuit breaking, retries, caching, external authentication and authorisation, transformation, service-mesh integration and security.

Why do I keep getting a 502 Bad gateway message?

A 502 bad gateway message indicates that one server got an invalid response from another. In essence, you've connected with some kind of interim device (like an edge server) that should fetch all of the bits you need to load the page. Something about that process went wrong, and the message indicates the problem.


1 Answers

Your ingress targets this service:

     serviceName: myservice      servicePort: 80 

but the service named myservice exposes port 8080 rather than 80:

  ports:     - protocol: "TCP"       # Port accessible inside cluster       port: 8080       # Port to forward to inside the pod       targetPort: 80 

Your ingress should point to one of the ports exposed by the service.

Also, the service itself targets port 80, but the pods in your deployment seem to expose port 8080, rather than 80:

  containers:     - name: my-service       image: my-custom-docker-regisry/my-service:latest       imagePullPolicy: Always       ports:         - containerPort: 8080 

So long story short, looks like you could swap port with targetPort in your service so that:

  • the pods expose port 8080
  • the service exposes port 8080 of all the pods under service name myservice port 80,
  • the ingress configures nginx to proxy your traffic to service myservice port 80.
like image 168
Kos Avatar answered Sep 20 '22 06:09

Kos