【问题标题】:Real IP (Domains and Subtomains) on Bare Metal Cluster with MatalLB and Ingress具有 MatalLB 和 Ingress 的裸机集群上的真实 IP(域和子域)
【发布时间】:2022-01-17 21:33:32
【问题描述】:

帮我弄清楚。

我有一个包含三个节点的 Bare Metal Kubernetes 集群,每个节点都有一个公共 ip。 我已经安装了 MetalLB 和 IngressController。

我不清楚应该将域和子域重定向到哪个 IP,以便入口控制器可以解析它们?

我需要最初定义 Ingress Controller 将在哪个节点上启动? 我需要安装 Ingress Controller,然后查看工作节点,它将在其上安装并将所有域或子域发送到那里? 如果重启集群后,入口控制器将部署在另一个节点上会怎样?

我看过的所有教程都展示了它是如何在本地工作或与云负载平衡器一起工作的。

帮助我了解这应该如何正常工作。

【问题讨论】:

    标签: kubernetes load-balancing kubernetes-ingress nginx-ingress


    【解决方案1】:

    通常,当您安装 MetalLB 时,您会配置一个地址池,该地址池可用于在 LoadBalancer 服务创建时分配新 IP。此类 IP 地址需要可用,它们当然不能凭空创建。例如,它们可以从您的托管服务提供商处租用。

    如果您有一个仅服务于您的 LAN 网络的私有 Bare Metal 集群,您可以选择一个未使用的私有 IP 地址范围。

    然后,一旦 MetalLB 运行,会发生以下情况:

    • 某人/某事创建LoadBalancer 服务(HELM 图表、具有定义的用户、具有命令等)
    • 新创建的服务需要外部 IP。 MetalLB 将从配置的选定范围中选择一个地址并将其分配给该服务
    • MetalLb 将开始使用标准协议宣布现在可以通过联系集群来访问 IP 地址,它可以在Layer2 模式下工作(集群的一个节点拥有该额外的 IP 地址)或BGP(真正跨集群所有节点的负载平衡)

    从那时起,您可以通过联系这个新分配的 IP 地址(不是任何集群节点的 ip)来访问新服务

    通常,Ingress Controller 只会带来一个 LoadBalancer 服务(它将从 MetalLb 获取一个外部 IP 地址),然后,您可以从该 IP 访问 hte Ingress Controller。

    至于您的其他问题,您无需担心 Ingress Controller 在哪里运行或类似问题,它会自动处理。

    您可能想要做的唯一一件事就是让您要服务的域名指向分配给 Ingress Controller 的外部 IP 地址。


    一些文档:

    【讨论】:

    • 哇。谢谢你这么好的解释。
    • 如果我理解正确,那么在 MetalLB 中我只需要定义一个节点的公共 IP。然后安装 IngressController (Traefik / Nginx ...) 作为 LoadBalancer。然后MetalLB会给我的IngressController一个IP?这不是内部网络,服务器在 Internet 上可见。如果具有 loadBalancer IP 的节点不可用会怎样?或者我应该在 MetalLB 中指定所有 3 个公共 IP 以确保安全?那么如果具有此 ip 的节点不可用,我是否必须将 DNS 提供程序中的 ip 更改为可以工作的节点?谢谢!
    • 通常需要指定other个IP地址作为MetalLB可以使用的范围。如果您想在其中一个节点的 IP 地址上公开您的服务,您可以使用 NodePort。使用 MetalLb 进行负载平衡更重要的是,您可以获得一个可以访问的新 IP 地址,这样您就不会出现单点故障(也就是您尝试访问的单个节点)
    • 谢谢。然后我还是不太明白。事实证明,在这种情况下,我真的不需要 MetalLB。我需要将 Traefik 部署部署到某个节点,打开 80/443 端口,然后将所有子域重定向到该节点。我有 1 个集群,Traefik 会动态识别新服务。或者告诉我如何在 Traefik 上创建所有子域路由,这会进一步将流量重定向到 Kubernetes 服务?我已经阅读这个主题很长时间了,但我无法将图片放在一起。非常感谢!
    • 那么,您基本上想要的是在集群节点之一但在端口 80 和 443 上公开 Traefik?我认为您正在搜索的内容可能是 hostNetwork 加上一个节点亲和性,以强制 Pod 在集群的特定节点上运行。但总的来说,使用真正的负载平衡会更好(但您需要另一个公共 IP,可以从您的网络提供商处租用给您的裸机节点)
    【解决方案2】:

    作为替代方案(尤其是当您想要“静态”IP 地址时),我应该提到 HAProxy,它安装在 kubernetes 集群外部的一个 bare_server/vm/lxc_container/etc 中。并配置为将所有传入的 80/433 流量发送到所有 kubernetes worker 上的入口控制器的 NodePort(如果没有入口 pod 正在运行,则该 worker 流量将由 kubernetes 转发)。

    当然,现在的ip地址也是“牛”,不再是“宠物”了,所以MetalLB更像是一个“kubernetish”的解决方案,但谁知道......

    这是描述HAProxy解决方案的链接(我不隶属于作者):

    https://itnext.io/bare-metal-kubernetes-with-kubeadm-nginx-ingress-controller-and-haproxy-bb0a7ef29d4e

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2020-12-29
      • 1970-01-01
      • 2020-08-05
      • 2020-11-28
      • 2013-08-21
      • 2021-07-29
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多