版本和参考如下。
我正在尝试将我的 Angular 客户端应用程序和我的 Node/Express API 从 Heroku 虚拟化服务器迁移到 DigitalOcean 的托管 Kubernetes (DOKS)。主要遵循 Ingress 教程(请参阅下面的参考资料),我已经成功:
- 使用 Docker 容器化 Angular 和 API,
- 在 DOKS 上设置 Kubernetes 集群和容器注册表,
- 设置 nginx 入口,
- 设置 jetstack/cert-manager 和 Let's Encrypt,
- 配置了我的域名注册和DOKS DNS,
- 将 Angular 和 API 部署到 pod,
- 从 Internet 连接到 API。
相关的 YAML 配置文件附在下面(参见下面的配置)。如果有帮助,我很乐意添加其他人。
我失败的地方是从 Internet 连接到 Angular。连接时收到 HTTP 502 Bad Gateway。
为了确保我的 Angular 代码不会导致问题,我按照默认 Angular 教程(请参阅参考资料)创建了一个默认 Angular 应用程序。
我遵循了故障排除部署(请参阅参考资料)并确定了以下内容:
- 使用 kubectl port-forward,我可以在 4200 端口连接到 Angular 应用程序的 pod,
- 使用 kubectl port-forward,我可以在 80 端口连接到 Angular 应用的 Cluster IP 服务,
- 我无法通过 Ingress(502 Bad Gateway)连接到 Angular 应用的服务,
- 使用 kubectl 的 ingress-nginx 插件查看入口日志,我能够找到错误代码。
入口日志中的错误代码是:
2021/04/12 06:08:43 [error] 423#423: *1158356 connect() failed (111: Connection refused) while connecting to upstream, client: XXX.XXX.XXX.XXX, server: pvg.example.com, request: "GET / HTTP/1.1", upstream: "http://XXX.XXX.XXX.XXX:4200/", host: "pvg.example.com"
这就是我卡住的地方。我将不胜感激这个专家社区的任何见解。
谢谢!
免责声明:我也在 DigitalOcean 的社区网站上问过这个问题,上周没有任何回应(参见下面的参考资料)。回答后,我会将两者联系在一起。
配置
Angular 的服务和部署配置:
---
apiVersion: v1
kind: Service
metadata:
name: my-app-cip
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 4200
selector:
app: my-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: nginx
image: registry.digitalocean.com/XXXXXXXX/my-app:0.1.0
ports:
- containerPort: 4200
protocol: TCP
入口配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- api.example.com # This is working
- pvg.example.com # This is NOT working
secretName: hello-kubernetes-tls
rules:
- host: "api.example.com" # This is working
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-api-cip
port:
number: 80
- host: "pvg.example.com" # This is NOT working
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-app-cip
port:
number: 80
版本
- 节点.js 10.19.0
- npm 7.7.6
- 纱线 1.22.10
- ng 11.2.2
- 码头工人 19.03.8
- kubectl 1.20.1
- 文档 1.57.0
- Kubernetes 1.20.2-do.0
- 掌舵 3.5.3
- nginx 控制器 0.45.0
- 喷射堆栈 1.3.0
参考
入口教程
默认角度教程:
部署故障排除
DigitalOcean 社区网站上提出的问题:
编辑:修复了降价错误;向 YAML 添加了注释以进行澄清;修复了 Ingress YAML 文件中的错字。