首页 > 解决方案 > kubernetes getting 502 bad gateway

问题描述

Brand new to kubernetes and am having an issue where I am getting a 502 bad gateway when trying to hit the api.

My configs look like this

apiVersion: v1
kind: Service
metadata:
    name: api-cluster-ip-service
spec:
    type: ClusterIP
    selector:
        component: api
    ports:
        - port: 80
          targetPort: 5000


apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: api
  template:
    metadata:
      labels:
        component: api
    spec:
      containers:
        - name: books-api
          image: mctabor/books-api
          ports:
            - containerPort: 5000


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: books-ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - http:
        paths:
          - path: /api/?(.*)
            backend:
              serviceName: api-cluster-ip-service
              servicePort: 80

and in my flask app I have the following:

if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)

Not sure where I went wrong here

my minikube ip is 192.168.99.104 and I'm trying to hit the api route of 192.168.99.104/api/status

标签: pythonflaskkuberneteskubernetes-ingress

解决方案


您没有正确公开您的服务。首先,ClusterIP类型的服务仅在集群内可用。当您使用 minikube 时,您应该尝试更改类型 do NodePort

其次,在 yaml 中声明的端口是使服务对集群内的其他服务可见的端口。

创建 NodePort 服务后,执行kubectl get svc以查看分配给该服务的外部端口。您将看到类似80:30351/TCP的内容。这意味着您可以在192.168.99.104:30351访问该服务。

是解释如何在 minikube 中公开服务的一个很好的答案


推荐阅读