python - kubernetes 收到 502 错误网关

标签 python flask kubernetes kubernetes-ingress

对于 kubernetes 来说是全新的,我在尝试访问 api 时遇到了 502 bad gateway 的问题。

我的配置如下

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

在我的 flask 应用程序中,我有以下内容:

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

不知道我哪里错了

我的 minikube ip 是 192.168.99.104,我正在尝试访问 192.168.99.104/api/status 的 api 路由

最佳答案

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

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

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

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

关于python - kubernetes 收到 502 错误网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56514212/

相关文章:

python - 如何从并行进程中运行的函数中检索值?

javascript - 如何使用 flask [使用 flask 示例] 将 javascript 数组传递给 python 脚本

python - 看到我尝试让 Flask 运行有什么问题了吗? (mod_wsgi + 虚拟环境)

Azure CLI 错误 json : cannot unmarshal array into Go value of type unstructured. 检测器

python - 使用一系列元组测试包含性

python - Django-Admin:Django 管理应用程序中的 RTF 编辑器

python - 如何在 docutils 中处理空值

ajax - AJAX调用后重定向时 flask 损坏的管道

asp.net-core - 使用环境变量为 HTTPS 配置 Kestrel

python - 如何(正确地)在 Kubernetes 上部署 MongoDB 并从另一个 Pod/Job 访问它?