我在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
---
答案 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