如何在GKE上为Kubernetes Ingress强制使用SSL

Sim*_*zle 38 ssl kubernetes google-kubernetes-engine kubernetes-ingress

有没有办法强制对入口负载均衡器上的传入连接进行SSL升级?或者,如果无法使用,我可以禁用端口:80?我还没有找到一个很好的文档页面,它在YAML文件中概述了这样一个选项.非常感谢提前!

Pra*_*h B 41

https://github.com/kubernetes/ingress-gce#frontend-https

您可以通过注释来阻止HTTP,也可以kubernetes.io/ingress.allow-http: "false"通过指定自定义后端将HTTP重定向到HTTPS.不幸的是,GCE不直接为您处理L7层的重定向或重写.(参见https://github.com/kubernetes/ingress-gce#ingress-cannot-redirect-http-to-https)

  • 现在有一种方法可以通过 FrontendConfig 支持 k8s yaml 中的重定向:https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-features#https_redirect (4认同)

mla*_*rov 16

注释已更改:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
...
Run Code Online (Sandbox Code Playgroud)

这是注释更改PR:https: //github.com/kubernetes/contrib/pull/1462/files


小智 12

如果您不受GCLB入口控制器的约束,您可以查看Nginx入口控制器.该控制器与内置控制器有多种不同.首先,您需要自己部署和管理一个.但是如果你愿意这样做,你可以获得不依赖于GCE LB(20美元/月)并获得IPv6/websockets支持的好处.

文件规定:

默认情况下,如果为该入口启用了TLS,则控制器会将(301)重定向到HTTPS.如果要全局禁用该行为,可以ssl-redirect: "false"在NGINX配置映射中使用.

最近发布的0.9.0-beta.3附带了一个明确强制执行此重定向的注释:

使用注释强制重定向到SSL ingress.kubernetes.io/force-ssl-redirect


Jos*_*osh 9

Google 已响应我们的请求,并正在其负载平衡器上测试 HTTP->HTTPS SSL 重定向。他们的最新回答是,它应该在 2020 年 1 月底之前的某个时间处于 Alpha 状态。

他们的评论:

感谢您对这个问题的耐心等待。该功能目前正在测试中,我们预计将在 1 月底之前进入 Alpha 阶段。随着我们接近 Alpha 发布,我们的 PM 团队将发布包含更多详细信息的公告。

我的手指交叉,我们将在不久的将来为这个非常常见的功能提供一个简单的解决方案。


更新(2020 年 4 月)

HTTP(S) 重写现在是一项普遍可用的功能。不幸的是,它的边缘仍然有点粗糙,并且不能与GCE Ingress Controller一起开箱即用。但时间会证明一切,希望本机解决方案会出现。

  • 从字面上看,五年后。 (3认同)
  • @Michal 它终于出来了:https://issuetracker.google.com/issues/35904733#comment95 但是,我确信在 Kubernetes YAML 中使用我们可以使用的配置来自动设置它之前还需要更长的时间。 。 (2认同)

小智 8

快速更新。这里

现在可以进行 FrontEndConfig 来配置入口。希望有帮助。

例子:

apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: my-frontend-config
spec:
  redirectToHttps:
    enabled: true
    responseCodeName: 301
Run Code Online (Sandbox Code Playgroud)

您需要确保您的负载均衡器支持 HTTP 和 HTTPS


小智 6

对已接受答案的评论已经正确回答了这一点。但由于评论被埋没了,我错过了好几次。

从 GKE 版本 1.18.10-gke.600 开始,您可以添加 k8s 前端配置以从 http 重定向到 https。

https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-features#https_redirect

apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
  name: ssl-redirect
spec:
  redirectToHttps:
    enabled: true

# add below to ingress
# metadata:
#   annotations:
#     networking.gke.io/v1beta1.FrontendConfig: ssl-redirect
Run Code Online (Sandbox Code Playgroud)

  • 一开始,`ssl-redirect`对我不起作用,因为我的入口中已经有这个配置`kubernetes.io/ingress.allow-http: "false"`。请记住删除“ingress.allow-http”配置。否则,“ssl-redirect”将不起作用。 (2认同)