【问题标题】: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 中,公开应用程序的一般方法有以下三种:

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

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

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

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

    更多信息您可以找到herehere

    回到您的问题,您可以在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 ControllerTraefikIstio,以找到最适合您项目的那个。

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

    编辑我尝试按照documentation 中的步骤操作,它在我的测试集群中对我有效,无需任何额外的防火墙配置。

    【讨论】:

      【解决方案2】:

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

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

      • 35.191.0.0/16
      • 130.211.0.0/22

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-26
        • 2021-11-05
        • 2020-11-25
        • 2020-08-13
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多