2

我在 Kubernetes 中使用 Ingress 资源设置了自定义 Nginx 入口控制器,而不是“default-http-backend 服务”,我使用自定义应用程序作为默认后端服务,为默认请求提供服务。我还为我的服务使用了设置为 kubernetes 机密的自定义 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

---
4

1 回答 1

1

我需要为没有设置规则的默认请求配置自定义服务(不是 default-http-backend 服务),并且此自定义服务应使用自定义 SSL。目前,如果 Ingress 规则中省略了域名(目的是使用“通配符”TLS 证书),则 nginx-ingress-controller 不会执行任何操作。因此,我在我使用的入口 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
于 2018-10-01T06:01:08.507 回答