0

版本和参考如下。

我正在尝试将我的 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 文件中的错字。

4

0 回答 0