node.js - 为我在 k8 中的 Angular 应用程序获取 502 Bad Gateway nginx/1.13.9
问题描述
在 k8 的浏览器中访问时,我的 Angular 应用程序得到 502 Bad Gateway nginx/1.13.9。我的服务和入口如下。
Angular 应用程序 pod 日志显示所有成功且事实上的端口转发工作正常。同样的图像在我的本地机器上也可以正常工作。
从 k8s 日志中,我可以看到:
[错误] 1534#1534:* 32272457 SSL_do_handshake() 失败(SSL:错误:1408F10B:SSL 例程:ssl3_get_record:错误的版本号)同时 SSL 与上游握手
服务:
Name: test-portal
Namespace: testproject
Labels: app=test-portal
chart=test-portal-1.0.0
environment=dev
heritage=Tiller
release=test-portal
version=dev
Annotations: <none>
Selector: app=test-portal,release=test-portal
Type: ClusterIP
IP: x.x.x.x
Port: <unset> 80/TCP
TargetPort: 4200/TCP
Endpoints: x.x.x.x:4200
Session Affinity: None
Events: <none>
入口:
Name: test-portal
Namespace: testproject
Address:
Default backend: default-http-backend:80 (<none>)
TLS:
SNI routes test-portal.us-west-2.xxxxx.xxxxxx.delivery
Rules:
Host Path Backends
---- ---- --------
test-portal.us-west-2.xxxxx.xxxxxx.delivery
/ test-portal:80 (<none>)
Annotations:
secure-backends: true
ssl-redirect: true
Events: <none>
入口配置图
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/secure-backends: "false"
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"ingress.kubernetes.io/secure-backends":"false","kubernetes.io/ingress.class":"nginx"},"labels":{"app":"test-portal","chart":"test-portal-1.0.0","environment":"dev","heritage":"test-portal","release":"Helm","version":"1.0.0"},"name":"test-portal","namespace":"testproject"},"spec":{"rules":[{"host":"test-portal.us-west-2.xxxx.xxxxxxxxx.delivery","http":{"paths":[{"backend":{"serviceName":"test-portal","servicePort":80},"path":"/"}]}}],"tls":[{"hosts":["test-portal.us-west-2.xxxx.xxxxxxxxx.delivery"]}]}}
kubernetes.io/ingress.class: nginx
creationTimestamp: 2020-01-08T11:24:18Z
generation: 1
labels:
app: test-portal
chart: test-portal-1.0.0
environment: dev
heritage: test-portal
release: Helm
version: 1.0.0
name: test-portal
namespace: testproject
resourceVersion: "2379156945"
selfLink: /apis/extensions/v1beta1/namespaces/testproject/ingresses/test-portal
uid: 6925819b-3209-11ea-80fb-02fb0c9060d8
spec:
rules:
- host: test-portal.us-west-2.xxxx.xxxxxxxxx.delivery
http:
paths:
- backend:
serviceName: test-portal
servicePort: 80
path: /
tls:
- hosts:
- test-portal.us-west-2.xxxx.xxxxxxxxx.delivery
status:
loadBalancer:
ingress:
- {}
解决方案
您似乎在 pod 的 4200 端口上运行 angular 开发服务器。Angular 应用程序使用 http 而不是 https 提供服务,因此您必须将入口配置为不使用 https (secure-backends: false ) 进行后端通信。
此外,不应将 Angular 开发服务器用于产品服务。使用 angular prod build 构建容器映像,以受益于性能的大幅提升。
推荐阅读
- ios - 在 Xcode 中将自定义框架添加到标准库
- python - 将文字中的基本 URL 与集合中的相对 URL 相结合
- python - 从字符串的前面剥离 '../'
- scala - Scala 方法,它接受多个不同的对象,所有这些对象都扩展了相同的特征
- html - 固定页脚而不溢出内容
- java - “x.this”和“x.class”是什么意思?(安卓工作室)
- javascript - jquery 有一个显示功能。当我试图在他们的代码中找到它时,我不能。我对 javascript 有什么不明白的地方?
- javascript - 模块化 JS 中的类扩展
- kubernetes - IBM Cloud 上的实例元数据
- angular - 如何在页面加载之前设置 mat-slide-toggle 状态?