4

我有一个使用 TLS 设置运行并正常工作的功能性 Ingress。我可以访问http://whoami.domain.comhttps://whoami.domain.com,并且在 https 域上使用了正确的证书。

我在谷歌上运行,我知道谷歌入口控制器不允许设置强制 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

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

4

1 回答 1

1

目前无法在 Google Cloud Load Balancer 中设置从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

于 2018-04-18T05:01:06.397 回答