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

时间:2018-09-28 09:51:17

标签: kubernetes kubernetes-ingress nginx-ingress

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

---

1 个答案:

答案 0 :(得分:1)

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