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!
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.
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.
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.
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:
8080
8080
of all the pods under service name myservice
port 80
,myservice
port 80
.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With