我有一个功能强大的Ingress运行TLS设置并正常工作。我可以访问http://whoami.domain.com和https://whoami.domain.com,并在https域上使用了正确的证书。
我在Google上运行,我知道Googles Ingress控制器不允许设置强制ssl以确保流量超过https。我知道我可以用 kubernetes.io/ingress.allow-http:“false”禁用http但我们不希望用户的摩擦知道他们需要使用https://
我想到如何解决这个问题就是有一个“重定向”后端我定义为所有port = 80请求的默认后端,只有301到https ...但是,我找不到定义入口的方法尊重传入端口的规则。
这是我目前关于如何做到这一点的想法,但当然它不起作用:)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ingress
spec:
tls:
- hosts:
- whoami.domain.com
secretName: tls-whoami
rules:
- host: whoami.domain.com
port: 443 # my wish :)
http:
paths:
- backend:
serviceName: whoami-service
servicePort: 80
- host: whoami.domain.com
port: 80 # my wish :)
http:
paths:
- backend:
serviceName: http-redirect-service
servicePort: 80
我一直试图找到可以提供的规则键,但找不到任何列表,只是它们都是关于主机和路径的示例。
答案 0 :(得分:0)
目前无法在Google Cloud Load Balancers中设置从http://
到https://
的重定向。因此,您无法在GKE Ingress中执行此操作。 https://issuetracker.google.com/35904733
我个人建议运行像nginx容器这样的简单服务,只需将http://
请求重写为https://
并将其置于应用程序的端口80版本之后。
编辑:我不确定如何实现这一目标。您可能需要两个具有相同主机名的单独Ingress对象,但其中一个具有tls:
而另一个没有。但是我仍然不确定它是否会起作用,因为Ingress控制器可以创建多个转发规则,并且很可能你无法实现这一目标。
这里最好的解决方案可能就是使用TCP / IP负载均衡器(服务类型:LoadBalancer)监听:80和:443并自行终止TLS。
查看此问题,它与您的问题非常相似:Implementing workaround for missing http->https redirection in ingress-gce with GLBC