从 http 到 https 的重定向不适用于 Kubernetes Nginx Ingress Controller 中的自定义后端服务

Redirection from http to https not working for custom backend service in Kubernetes Nginx Ingress Controller

我在 Kubernetes 中使用 Ingress 资源设置了自定义 Nginx 入口控制器,而不是 "default-http-backend service",我使用自定义应用程序作为默认后端服务来为默认请求提供服务。我还为我的服务使用了设置为 kubernetes secret 的自定义 SSL。问题是当我请求规则中提到的主机名时,https 重定向有效。但是当发出规则中提到的主机以外的请求时,它会为默认应用程序提供服务,但 https 重定向不起作用。

对于包括默认请求在内的所有请求,如何将请求从 http 重定向到 https。换句话说,如何为入口资源中的通配符域设置 https 重定向。

请为入口资源找到我的 yaml 文件。

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-resource
  namespace: default
  annotations:
   kubernetes.io/ingress.class: "nginx"
   kubernetes.io/ingress.allow-http: "false"
   ingress.kubernetes.io/rewrite-target: /
   ingress.kubernetes.io/ssl-redirect: "true"
   ingress.kubernetes.io/proxy-connect-timeout: "14400"
   ingress.kubernetes.io/proxy-send-timeout: "14400"
   ingress.kubernetes.io/proxy-read-timeout: "14400"
spec:
  tls:
  - secretName: tls-secret

  rules:

  - host: service1.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service1
          servicePort: 80

  - host: service2.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service2
          servicePort: 80

---

我需要为没有设置规则的默认请求配置自定义服务(不是 default-http-backend 服务),并且此自定义服务应使用自定义 SSL。目前,如果入口规则中省略了域名,nginx-ingress-controller 不会执行任何操作(目的是使用 "wildcard" TLS 证书)。 因此,我在我使用的 ingress yaml 中添加了以下代码,并且效果很好。我在底部的入口规则中为自定义默认服务添加了通配符 tls 名称。请在下面找到代码:

  rules:

  - host: service1.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service1
          servicePort: 80

  - host: service2.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service2
          servicePort: 80

  - host: '*.example.com'
    http:
      paths:
      - path: /
        backend:
          serviceName: custom-backend-service
          servicePort: 80