Ingress后端按端口规则?

时间:2018-04-14 11:59:37

标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress

我有一个功能强大的Ingress运行TLS设置并正常工作。我可以访问http://whoami.domain.comhttps://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

我一直试图找到可以提供的规则键,但找不到任何列表,只是它们都是关于主机和路径的示例。

1 个答案:

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