[英]Nginx Ingress returns 502 Bad Gateway on Kubernetes
我在 AWS (EKS) 上部署了一个 Kubernetes 集群。 我使用“eksctl”命令行工具部署了集群。 我正在尝试在集群上部署 Dash python 应用程序但没有成功。 Dash 的默认端口是 8050。对于部署,我使用了以下资源:
您可以检查以下资源配置文件:
吊舱配置文件.yml
kind: Pod
apiVersion: v1
metadata:
name: dashboard-app
labels:
app: dashboard
spec:
containers:
- name: dashboard
image: my_image_from_ecr
ports:
- containerPort: 8050
服务配置文件.yml
kind: Service
apiVersion: v1
metadata:
name: dashboard-service
spec:
selector:
app: dashboard
ports:
- port: 8050 # exposed port
targetPort: 8050
ingress-configuration-file.yml(基于主机的路由)
kind: Ingress
metadata:
name: dashboard-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: dashboard.my_domain
http:
paths:
- backend:
serviceName: dashboard-service
servicePort: 8050
path: /
我按照以下步骤操作:
kubectl apply -f pod-configuration-file.yml
kubectl apply -f service-configuration-file.yml
kubectl apply -f ingress-confguration-file.yml
我还注意到 pod 部署按预期工作:
kubectl logs my_pod:
output 是:
Dash is running on http://127.0.0.1:8050/
Warning: This is a development server. Do not use app.run_server
in production, use a production WSGI server like gunicorn instead.
* Serving Flask app "annotation_analysis" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
您可以从入口配置文件中看到我想使用我的域进行基于主机的路由。 为此,我还部署了一个 nginx-ingress。 我还使用 Route53 创建了一个“A”记录集,将“dashboard.my_domain”映射到 nginx-ingress:
kubectl get ingress
output 是:
NAME HOSTS ADDRESS. PORTS. AGE
dashboard-ingress dashboard.my_domain nginx-ingress.elb.aws-region.amazonaws.com 80 93s
而且,
kubectl describe ingress dashboard-ingress
output 是:
Name: dashboard-ingress
Namespace: default
Address: nginx-ingress.elb.aws-region.amazonaws.com
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
host.my-domain
/ dashboard-service:8050 (192.168.36.42:8050)
Annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: false
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: false
Events: <none>
不幸的是,当我尝试在浏览器上访问 Dash 应用程序时,我从 nginx 收到502 Bad Gateway错误。 你能帮我吗,因为我的 Kubernetes 知识有限。 提前致谢。
它与 Kubernetes 或 AWS 设置无关。 我不得不从以下位置更改我的 python Dash 代码:
if __name__ == "__main__":
app.run_server(debug=True)
至:
if __name__ == "__main__":
app.run_server(host='0.0.0.0',debug=True).
添加host='0.0.0.0'就成功了!
我认为您需要检查是否在同一主机上的路径/
上公开了任何其他服务。
其次,尝试删除rewrite-target
注释。 您还可以使用 kubectl kubectl describe ingress <ingress_Name>
的 output 更新您的问题吗
我还建议您使用值为HTTP
backend-protocol
注释(默认值,如果仪表板应用程序未配置 SSL,则可以避免使用此功能,并且只有此应用程序在所述主机上提供服务。)但是,您可能需要add this if multiple applications are served at this host, and create one Ingress with backend-protocol: HTTP
for non SSL services, and another with backend-protocol: HTTPS
to serve traffic to SSL enabled services.
有关backend-protocol
注释的更多信息,请参阅此链接。
我在 Ingress Setup 中经常遇到这个问题,这些步骤帮助我解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.