0

我用一些 api 容器创建了一个谷歌云 kubernetes 集群。它们现在使用负载平衡器公开。但现在我需要迁移到入口负载均衡器。所以我通过 nodeport 暴露了它们并设置了入口负载均衡器。

但是现在我遇到了问题,我需要添加防火墙规则来打开 NodePorts。否则我的 Ingress 健康检查会失败。我做错什么了吗?还是添加防火墙规则的唯一可能性?如果是,是否有可能只允许来自入口/健康检查的流量?否则我可以通过节点的 IP 联系我的服务。

谢谢

4

2 回答 2

0

HTTP(S) 负载均衡器的运行状况检查是通过您需要在防火墙规则中打开的 IP 地址池完成的。

是解释一切的文档。您只需打开以下 IP 范围的流量,它应该可以正常工作:

  • 35.191.0.0/16
  • 130.211.0.0/22
于 2020-01-20T14:17:12.550 回答
0

在 Kubernetes 中,公开应用程序的一般方法有以下三种:

  1. 使用 Kubernetes 服务类型LoadBalancer,它创建一个外部负载均衡器,指向集群中的 Kubernetes 服务
  2. 使用 KubernetesIngress资源
  3. 使用 Kubernetes 服务类型NodePort,它将应用程序暴露在每个节点的端口上

LoadBalancer服务是向 Internet 公开服务的标准方式。在 GKE 上,这将启动一个网络负载均衡器,它会为您提供一个 IP 地址,该地址会将所有流量转发到您的服务。

Ingress实际上不是一种服务。相反,它位于多个服务的前面,充当“智能路由器”或集群的入口点。默认的 GKE 入口控制器将为您启动一个 HTTP(S) 负载均衡器。这将允许您对后端服务进行基于路径和基于子域的路由。例如,您可以将 foo.yourdomain.com 上的所有内容发送到 foo 服务,并将 yourdomain.com/bar/ 路径下的所有内容发送到 bar 服务。

NodePort服务是将外部流量直接获取到您的服务的最原始方式。顾名思义,NodePort 在所有节点(VM)上打开一个特定端口,发送到该端口的任何流量都会转发到服务。

您可以在此处此处找到更多信息。

回到您的问题,您可以在文档中找到:

您可以使用 Ingress 资源创建 HTTP(S) 负载平衡器。HTTP(S) 负载平衡器旨在终止 HTTP(S) 请求,并且可以做出更好的上下文感知负载平衡决策。它们提供可定制的 URL 映射和 TLS 终止等功能。GKE 会自动为 HTTP(S) 负载平衡器配置运行状况检查。

默认情况下,Ingress 通过在 / 路径上发出 GET 请求来执行定期健康检查以确定应用程序的健康状况,并期望 HTTP 200 响应。如果您想检查不同的路径或期望不同的响应代码,您可以使用自定义运行状况检查路径

此外,请查看可用的 Ingress Controller,我建议您至少检查NGINX Ingress ControllerTraefikIstio以找到最适合您项目的一个。

如果您仍有问题,请使用 .yaml 文件更新您的问题,以使其更清晰。

编辑我尝试按照文档中的步骤进行操作,它适用于我的测试集群,无需任何额外的防火墙配置。

于 2020-01-20T13:04:15.180 回答