如何为GKE上的Kubernetes入口强制SSL
有没有办法强制对入口负载平衡器上的传入连接进行SSL升级?或者,如果无法使用,是否可以禁用端口:80?我还没有在YAML文件中找到一个好的文档页面来概括这样一个选项。提前多谢 您可以通过注释如何为GKE上的Kubernetes入口强制SSL,ssl,kubernetes,google-kubernetes-engine,kubernetes-ingress,Ssl,Kubernetes,Google Kubernetes Engine,Kubernetes Ingress,有没有办法强制对入口负载平衡器上的传入连接进行SSL升级?或者,如果无法使用,是否可以禁用端口:80?我还没有在YAML文件中找到一个好的文档页面来概括这样一个选项。提前多谢 您可以通过注释kubernetes.io/ingres.allow-HTTP:“false”阻止HTTP,或者通过指定自定义后端将HTTP重定向到HTTPS。不幸的是,GCE还不能直接为您处理L7层的重定向或重写。(见附件) 更新:,包括HTTP到HTTPS。似乎还没有通过Kubernetes YAML创建这些的方法。注
kubernetes.io/ingres.allow-HTTP:“false”
阻止HTTP,或者通过指定自定义后端将HTTP重定向到HTTPS。不幸的是,GCE还不能直接为您处理L7层的重定向或重写。(见附件)
更新:,包括HTTP到HTTPS。似乎还没有通过Kubernetes YAML创建这些的方法。注释已更改:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
annotations:
kubernetes.io/ingress.allow-http: "false"
spec:
...
以下是注释更改PR:
如果您没有绑定到GCLB入口控制器,您可以查看。此控制器与内置控制器在多个方面不同。首先,您需要自己部署和管理一个。但是,如果您愿意这样做,您就可以不依赖GCE LB(20美元/月)并获得对IPv6/WebSocket的支持 各国: 默认情况下,如果为该入口启用TLS,则控制器将(301)重定向到HTTPS。如果您想在全球范围内禁用该行为,您可以 可以在NGINX配置映射中使用ssl重定向:“false” 最近发布的版本附带了一个用于显式强制执行此重定向的附加注释: 使用注释
ingres.kubernetes.io/Force SSL redirect
在Kubernetes中重定向到HTTPS有些复杂。根据我的经验,您可能希望使用入口控制器(如或)来控制到服务的路由,而不是让负载平衡器直接路由到服务 假设您使用的是入口控制器,则:
- 如果您在外部负载平衡器处终止TLS,并且LB在L7模式(即HTTP/HTTPS)下运行,则您的入口控制器需要使用
,并相应地发出重定向X-Forwarded-Proto
- 如果您在外部负载平衡器处终止TLS,并且LB在TCP/L4模式下运行,则您的入口控制器需要使用代理协议进行重定向
- 您还可以在入口控制器中直接终止TLS,在这种情况下,它具有执行重定向所需的所有信息
下面是一篇关于如何在Ambassador中实现这一点的文章。谷歌已经响应了我们的请求,并正在他们的负载平衡器上测试HTTP->HTTPS SSL重定向。说它应该在2020年1月底前的某个时候在阿尔法 他们的评论是: 谢谢你在这个问题上的耐心。该功能目前正在测试中,我们预计在1月底之前进入Alpha阶段。随着Alpha发射的临近,我们的PM团队将发布一份更详细的公告 我祈祷在不久的将来,我们将有一个简单的解决方案来解决这个非常常见的功能
更新(2020年4月): HTTP(S)重写现在是一项功能。它的边缘仍然有点粗糙,很不幸的是,它不能在开箱即用的情况下工作。但是时间会告诉我们,希望本机解决方案会出现。您可以(注意,您需要重新创建集群,以便在负载平衡器上应用此更改),然后在同一IP地址上创建其他负载平衡器
我在同一个问题上花了几个小时,最后做了我刚才描述的事情。它工作得很好。在这方面工作了很长时间。以防有人不清楚上面的帖子。您可以使用注释--kubernetes.io/ingres.allow-http:“false”重建入口-- 然后删除入口并重新部署。注释将使入口仅为443创建LB,而不是443和80 然后进行HTTP LB计算,而不是GKE计算 图形用户界面说明: 创建负载平衡器并选择HTTP(S)负载平衡--启动配置 选择-从Internet到我的虚拟机并继续 为LB选择一个名称 将后端配置留空 在“主机和路径规则”下,选择操作设置为的高级主机和路径规则 将客户端重定向到不同的主机/路径。 将主机重定向字段留空。 选择Prefix Redirect并将路径值留空。 选择重定向响应代码为308。 勾选HTTPS重定向的启用框 对于前端配置,保留http和端口80,对于ip地址,选择静态 用于GKE入口的IP地址 创建此LB 现在,所有的http流量都将转到这里,308重定向到GKE的https入口。超级简单的配置设置,运行良好 注意:如果您只是尝试删除GKE生成的端口80 LB(不进行注释更改和重建入口),然后添加新的重定向计算LB,则它确实可以工作,但您将开始在入口上看到错误消息,表示error 400字段'resource.ipAddress'的值无效“正在使用,将导致冲突,无效。它正在尝试加速端口80 LB,但无法,因为您已经在使用相同IP的端口80上拥有一个LB。它确实可以工作,但错误很烦人,GKE一直在尝试构建它(我认为)。快速更新 现在可以制作FrontEndConfig来配置入口。希望能有帮助 例如: apiVersion:networking.gke.io/v1beta1 种类:FrontendConfig 元数据: 名称:我的前端配置 规格: 重定向到HTTPS: 已启用:true 回应姓名:301
您需要确保您的负载平衡器支持HTTP和HTTPS,这已通过对已接受答案的评论得到正确回答。但由于评论被掩埋,我错过了好几次 从GKE版本1.18.10-GKE.600开始,您可以
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