【问题标题】:Ingress backend rule by port?按端口的入口后端规则?
【发布时间】:2018-09-24 15:38:22
【问题描述】:

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

我在 Google 上运行,并且我知道 Google 的 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

我一直在尝试查找可以提供哪些规则键,但找不到任何列表,只是一些关于主机和路径的示例。

【问题讨论】:

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


    【解决方案1】:

    目前无法在 Google Cloud 负载均衡器中设置从 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

    【讨论】:

    • 我知道这一点,因此我的问题 :) 如果您看到我的示例,那正是我想要做的。但我还没有找到一种方法来做到这一点。无法在 Ingress 中定义端口。所以我不认为你的答案是正确的。
    • 对不起!我的错。我认为您可能需要两个入口对象。一个有 TLS,一个没有。它们都指定相同的静态 IP 和主机名。你能试试这个吗?
    • 再想一想,我认为这也行不通。编辑了我的回复。
    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多