gpt4 book ai didi

kubernetes - Rancher - 如何公开我的服务?

转载 作者:行者123 更新时间:2023-12-02 12:01:07 25 4
gpt4 key购买 nike

我有一个正在运行的 Rancher 设置,如下所示:

  • 公共(public) IP 上的主机(运行 rancher/rancher 容器);
  • 无法从 Internet 访问的专有网络 (10.1.1.0/24) 中的节点。

  • 我的目标是使用 Rancher 负载平衡或任何类似的东西为 Web 应用程序提供服务。
    为此,我执行了以下步骤:
  • 在 3 个映射端口 80/tcp 的 Pod 上使用“rancher/hello-world”镜像部署工作负载,作为名为“web-app”的 NodePort(监听端口是随机的);
  • 在同一命名空间中添加名为“hello”的 Ingress,选择“自动生成 .xip.io 主机名”并将路由“/”添加到端口 80 上的“web-app”。

  • 这适用于本地网络,因为我得到的地址类似于 http://hello.gabriel-milan.10.1.1.14.xip.io/这将解析为本地的 10.1.1.14。

    我想为我的一个公共(public) IP 公开这项服务。我怎样才能做到这一点?

    最佳答案

    Edit 2021-09-27: xip.io is gone, but I'm leaving those references in my response because the OP asked about xip.io. Alternatives are sslip.io and nip.io, which both function the same way. You can replace xip.io in my response with either of those to achieve the same results.


    有几种方法可以做到这一点。根据您使用无法从 Internet 访问的专用网络,节点没有公共(public) IP,因此 Kubernetes 不知道任何映射到它们的公共(public) IP。这就是它在 EC2 或任何在节点外发生 NAT 的地方的工作方式。
    如果这些节点是自定义集群(安装 Docker,然后使用 Rancher 的 docker run 命令安装 RKE 并将集群加入 Rancher),那么在安装之前,您可以单击右下角的 Advanced Options 链接并为每个节点设置公共(public)和私有(private) IP。
    当您这样做时,节点会收到一个包含公共(public) IP 的标签,该地址将与您的 xip.io 一起使用。您在设置 Ingress 时生成的主机名。
    如果没有该标签, xip.io hostname 获取节点的主 IP,在这种情况下,它位于专用网络上。
    但是,如果您这样做,即使您的入口 Controller 正在监听多个节点,您的流量也只会流向集群上的一个节点。
    相反,在运行多节点集群时,我建议您将第 4 层负载均衡器放在所有工作节点(或入口 Controller 正在监听的节点,如果它没有在每个节点上监听)的前面。穿透 80 和 443,然后将其用作您的域的目标。 domain.com -> load balancer -> ingress controller (on all nodes) -> Service -> Pods您的入口 Controller 正在 80/443 上监听 HTTP 流量,这也意味着您的服务不必是 NodePort。它可以是 ClusterIP,因为流量通过入口 Controller ,然后在集群内路由。
    当您有外部负载平衡器并且需要将流量定向到特定服务时,将使用 NodePort 服务。在这种情况下,外部负载均衡器将替换入口 Controller 。您为每个应用程序创建 NodePort 服务,然后告诉负载均衡器将应用程序 A 的流量发送到端口 30547 上的每个节点或该服务的任何 NodePort 服务。
    顺便说一句,如果您在云提供商中,您可以将它们组合成一个 LoadBalancer 服务。这将在节点上创建一个 NodePort 服务,然后联系云提供商的 API 并部署一个云负载均衡器,然后使用节点、服务的端口对其进行编程,并在服务的生命周期内维护该配置。
    回顾一下:
  • 您的节点不知道他们的公共(public) IP,所以 xip.io主机名也不知道
  • 在您的节点前面放置一个第 4 层负载均衡器,并将流量发送到所有节点上的 80/443
  • 将您的服务更改为 ClusterIP
  • 将流量发送到负载均衡器

  • 此外,如果您不想部署负载均衡器,作为一种解决方法,您可以删除 Ingress 并重新创建它,而不是创建 xip.io。主机名自动,选择“设置主机名”并手动创建。如果一个节点的公网IP是 1.2.3.4 , 则可以设置为 any.thing.you.want.1.2.3.4.xip.io它会返回 1.2.3.4到 DNS 查询。
    您只是无法编辑现有的 xip.io进入并将其更改为不同的手册 xip.io主机名。你必须重新创建它。
    在此解决方法中,流量仍会进入入口 Controller ,因此您仍然可以将服务从 NodePort 更改为 ClusterIP。
    披露:我为 Rancher 工作。

    关于kubernetes - Rancher - 如何公开我的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62157943/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com