【问题标题】:How to redirect HTTP to HTTPS with Nginx Ingress Controller, AWS NLB and TLS certificate managed by AWS Certificate Manager?如何使用由 AWS Certificate Manager 管理的 Nginx Ingress Controller、AWS NLB 和 TLS 证书将 HTTP 重定向到 HTTPS?
【发布时间】:2023-03-14 21:31:02
【问题描述】:

我尝试了以下方法来让 HTTP 重定向到 HTTPS。我不确定我哪里出错了。

ingress-nginx对象:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:...
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
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

my-ingress对象:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  namespace: my-namespace
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/secure-backends: "true"
spec:
  tls:
   - hosts:
     - app.example.com
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-service
          servicePort: 80

我在 HTTP 和 HTTPS 上收到 308 Permanent Redirect。我想这是有道理的,因为 NLB 正在执行 SSL 终止并因此将 HTTP 转发到 Nginx 服务?我想我需要将 SSL 终止从 NLB 移动到 Nginx 服务?

谢谢

【问题讨论】:

  • 为您创建 NLB 的每个服务?如果负载均衡器作为服务类型?假设您有 10 个前端暴露的应用程序,您将创建 10 个 NLB?
  • 试试这个stackoverflow.com/a/62030504/8490256 来终止 SSL。
  • 在 NLB 中遇到 SSL 终止同样的问题,仅使用 nginx.ingress.kubernetes.io/ssl-redirect: "true" 即可解决。删除force-ssl-redirect

标签: amazon-web-services nginx kubernetes nginx-ingress nlb


【解决方案1】:

我相信您确实需要将 SSL 终止移动到入口控制器,因为我遇到了同样的问题,而且我似乎处于永久重定向的情况。流量在 443 上进入 NLB,并被终止并通过端口 80 发送到后端实例。入口看到端口 80 上的流量并重定向到 https://,从而开始无限循环。

【讨论】:

  • 您好,我也遇到了同样的问题,当您说将 SSL 终止移动到入口控制器时,您能否详细说明一下。如何做到这一点?
  • 现在支持吗? [aws.amazon.com/blogs/opensource/… 上面写着SSL termination will need to happen at the backend, since SSL termination on NLB for Kubernetes is not yet available.
  • ssl 终止是使用 ingress 和 nlb 在 k8s 上工作
  • 你可以试试这个答案stackoverflow.com/a/62030504/8490256
猜你喜欢
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2016-05-12
  • 2017-10-01
  • 1970-01-01
  • 2019-04-09
相关资源
最近更新 更多