Kubernetes 负载均衡器终止 SSL 以反向代理入口 DigitalOcean

Kubernetes Load Balancer Terminating SSL to Reverse Proxy Ingress DigitalOcean

我最初的基础架构是围绕本教程构建的。 https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes.

现在我正在尝试迁移到管理我自己的证书并在负载平衡器上终止 SSL。

随着我的 YAML 更新,DigitalOcean 中的负载平衡器显示所有节点都不健康,我 URL 响应“503 服务不可用 没有服务器可用于处理此请求。”但是,端点显示安全的 HTTPS 连接。我做错了什么?

下面是我新的非功能性 YAML 定义。

负载均衡器

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  annotations:
    service.beta.kubernetes.io/do-loadbalancer-redirect-http-to-https: "true"
    service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: "true"
    service.beta.kubernetes.io/do-loadbalancer-certificate-id: "**************"
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: http

入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-body-size: "50m"
spec:
  tls:
    - hosts:
        - ******.com
        - api.*******.com
  rules:
    - host: **********.com
      http:
        paths:
          - backend:
              serviceName: frontend-angular
              servicePort: 80
    - host: api.********.com
      http:
        paths:
          - backend:
              serviceName: backend-server
              servicePort: 80

我联系了 DigitalOcean 支持(这太棒了)。我的问题是我没有创建 ingress-nginx pod。这是我错过的教程中列出的两个步骤。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.26.1/deploy/static/mandatory.yaml

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.26.1/deploy/static/provider/cloud-generic.yaml

我的实际 YAML 定义是正确的。

最好的方法就是使用 Digital Ocean Marketplace (https://marketplace.digitalocean.com/apps/nginx-ingress-controller)。

由于 yml 文件过时,手动安装会导致很多问题。