【问题标题】:GKE Ingress opening portGKE Ingress 打开端口
【发布时间】:2020-01-20 10:00:47
【问题描述】:
我用一些 api 容器创建了一个谷歌云 kubernetes 集群。它们现在使用负载平衡器公开。
但现在我需要迁移到入口负载均衡器。
所以我通过 nodeport 暴露了它们并设置了入口负载均衡器。
但是现在我遇到了问题,我需要添加防火墙规则来打开 NodePorts。否则我的 Ingress 健康检查会失败。
我做错什么了吗?还是添加防火墙规则的唯一可能性?
如果是,是否有可能只允许来自入口/健康检查的流量?
否则我可以通过节点的 IP 联系我的服务。
谢谢
【问题讨论】:
标签:
google-kubernetes-engine
kubernetes-ingress
gke-networking
【解决方案1】:
在 Kubernetes 中,公开应用程序的一般方法有以下三种:
- 使用
LoadBalancer 类型的 Kubernetes 服务,它会创建一个指向集群中 Kubernetes 服务的外部负载均衡器
- 使用 Kubernetes
Ingress 资源
- 使用
NodePort 类型的 Kubernetes 服务,它将应用程序暴露在跨每个节点的端口上
LoadBalancer 服务是向 Internet 公开服务的标准方式。在 GKE 上,这将启动一个网络负载均衡器,它会为您提供一个 IP 地址,该地址会将所有流量转发到您的服务。
Ingress 实际上不是一种服务。相反,它位于多个服务的前面,充当“智能路由器”或集群的入口点。 默认的 GKE 入口控制器将为您启动一个 HTTP(S) 负载均衡器。这将允许您对后端服务进行基于路径和基于子域的路由。例如,您可以将 foo.yourdomain.com 上的所有内容发送到 foo 服务,并将 yourdomain.com/bar/ 路径下的所有内容发送到 bar 服务。
NodePort 服务是将外部流量直接获取到您的服务的最原始方式。 NodePort,顾名思义,在所有节点(VM)上打开一个特定端口,发送到该端口的任何流量都会转发到服务。
更多信息您可以找到here 和here。
回到您的问题,您可以在documentation 中找到:
您可以使用 Ingress 资源创建 HTTP(S) 负载平衡器。
HTTP(S) 负载平衡器旨在终止 HTTP(S) 请求和
可以做出更好的上下文感知负载平衡决策。他们提供
可定制的 URL 映射和 TLS 终止等功能。 GKE
自动为 HTTP(S) 负载平衡器配置运行状况检查。
和
默认情况下,Ingress 通过 GET 执行定期健康检查
/ 路径上的请求以确定应用程序的运行状况,以及
期望 HTTP 200 响应。如果您想检查不同的路径或
期待不同的响应代码,您可以使用custom health check path。
此外,请查看available Ingress Controllers,我建议您至少查看NGINX Ingress Controller、Traefik 和Istio,以找到最适合您项目的那个。
如果您仍有问题,请使用 .yaml 文件更新您的问题,以使其更清晰。
编辑我尝试按照documentation 中的步骤操作,它在我的测试集群中对我有效,无需任何额外的防火墙配置。
【解决方案2】:
HTTP(S) 负载均衡器的运行状况检查是通过您需要在防火墙规则中打开的 IP 地址池完成的。
This 是解释一切的文档。您只需打开以下 IP 范围的流量,它应该可以正常工作:
- 35.191.0.0/16
- 130.211.0.0/22