Rancher - 如何公开我的服务?

2024-04-04

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

  • 主机(运行牧场主 https://github.com/rancher/rancher容器)在公共IP上;
  • 无法从 Internet 访问专用网络 (10.1.1.0/24) 中的节点。

我的目标是使用 Rancher 负载平衡或任何类似的东西来服务 Web 应用程序。 为此,我执行了以下步骤:

  • 在 3 个 Pod 上使用“rancher/hello-world”映像部署工作负载,将端口 80/tcp 映射为名为“web-app”的 NodePort(监听端口是随机的);
  • 在同一命名空间中添加名为“hello”的 Ingress,选择“自动生成.xip.iohostname”并将路由“/”添加到端口 80 上的“web-app”。

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

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


2021年9月27日编辑:xip.io已经消失了,但我在回复中留下了这些参考资料,因为OP询问了xip.io。替代方案是sslip.io and nip.io,两者的功能相同。您可以更换xip.io在我的回应中,使用其中任何一个都可以获得相同的结果。

有几种方法可以做到这一点。根据您使用无法从 Internet 访问的专用网络,节点没有公共 IP,因此 Kubernetes 不知道映射到它们的任何公共 IP。这就是它在 EC2 或节点外发生 NAT 的任何地方的工作方式。

如果这些节点是自定义集群(您在其中安装 Docker,然后使用docker run从 Rancher 命令安装 RKE 并将集群加入到 Rancher),然后在安装之前,您可以单击右下角的高级选项链接并设置每个节点的公共和私有 IP。

当您执行此操作时,节点会收到一个包含公共 IP 的标签,并且该地址将与您的xip.io您在设置 Ingress 时生成的主机名。

如果没有这个标签,xip.iohostname 选择节点的主 IP,在本例中位于专用网络上。

但是,如果您这样做,即使您的入口控制器正在侦听多个节点,您的流量也只会到达集群上的一个节点。

相反,在运行多节点集群时,我建议您将第 4 层负载均衡器放在所有工作节点(或者入口控制器正在侦听的节点,如果它没有侦听每个节点)前面。插入 80 和 443,然后将其用作您的域的目标。

domain.com -> load balancer -> ingress controller (on all nodes) -> Service -> Pods

您的入口控制器正在侦听 80/443 的 HTTP 流量,这也意味着您的服务不必是 NodePort。它可以是 ClusterIP,因为流量会经过入口控制器,然后在集群内部路由。

当您有外部负载均衡器并且需要将流量定向到某个节点时,请使用 NodePort 服务specific服务。在这种情况下,外部负载均衡器将取代入口控制器。您为每个应用程序创建 NodePort 服务,然后告诉负载均衡器将应用程序 A 的流量发送到端口 30547 上的每个节点或该服务的 NodePort。

顺便说一句,如果您在云提供商中,则可以将它们组合到 LoadBalancer 服务中。这将在节点上创建 NodePort 服务,然后访问云提供商的 API 并部署云负载均衡器,然后使用节点、服务的端口对其进行编程,并在服务的生命周期内维护该配置。

回顾一下:

  • 你的节点不知道他们的公共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.4DNS 查询。

您只是无法编辑现有的xip.ioIngress 并将其更改为不同的手册xip.io主机名。你必须重新创建它。

在此解决方法中,流量仍会进入入口控制器,因此您仍然可以将服务从 NodePort 更改为 ClusterIP。

披露:我为 Rancher 工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rancher - 如何公开我的服务? 的相关文章

  • 使用 zeppelin 在 kubernetes 上 Spark

    我按照本指南在使用 minikube 设置的本地 kubernetes 集群中运行 zeppelin 容器 https zeppelin apache org docs 0 9 0 SNAPSHOT quickstart kubernete
  • 在 Kubernetes API 中启用 CORS

    有没有办法在 Kubernetes API 上启用 CORS 以便我可以使用不同的域向 Kubernetes API 发送 ajax 请求 通过将 cors allowed origins http 参数添加到 etc default ku
  • Kubernetes 中的暂停镜像有什么用?

    看来在 Windows 上 Kubernetes 启动了一个pause创建的每个 Pod 的图像 这个暂停图像的目的是什么 我在哪里可以找到更多有关它的文档 The pause容器是保存 Pod 网络命名空间的容器 Kubernetes 创
  • 一个持久卷是否可以被多个持久卷声明消耗?

    假设一个 PV 可以被多个 PVC 消耗并且每个 pod 实例需要一个 PVC 绑定 这样的假设是否正确 我这么问是因为我创建了一个 PV 然后创建了一个具有不同尺寸要求的 PVC 例如 kind PersistentVolume apiV
  • 在 Kubernetes 中向 MySQL 添加另一个用户

    这是我的MySQL apiVersion apps v1beta1 kind Deployment metadata name abc def my mysql namespace abc sk test labels project ab
  • 如何使用 hostPath 将单个文件映射到 kubernetes pod 中?

    我有一个自己的 nginx 配置 home ubuntu workspace web conf由脚本生成 我更喜欢把它放在下面 etc nginx conf d除了default conf 下面是nginx yaml apiVersion
  • 基于邻近度的负载均衡

    我正在开展一个项目 我们在世界各地拥有大量 目前为 5 台 服务器 客户端通过集中式代理连接到其中一台服务器 我们知道客户的原籍国 但除此之外一无所知 我们完全控制服务器 因此我们可以获得所需的所有信息 我们不控制客户 他们必须按照标准通过
  • 运行 istio-proxy 后启动容器/pod

    我正在尝试使用 Istio 和 Envoy 通过 Kubernetes 实现服务网格 我能够设置服务和 istio proxy 但无法控制容器和 istio proxy 的启动顺序 我的容器是第一个启动的 并尝试通过 TCP 访问外部资源
  • kubernetes 集群中 django 应用程序的 Nginx 配置

    我在为部署在 kubernetes 中的 django 应用程序创建 nginx 配置文件时遇到困难 Nginx 和 app 是同一集群中的两个独立容器 据我了解 容器可以通过 127 0 0 1 XX 和主机名相互通信 我为此使用 min
  • kubectl --token=$TOKEN 未使用令牌的权限运行

    当我使用命令时kubectl与 token标记并指定令牌 它仍然使用来自kubeconfig file 这就是我所做的 NAMESPACE default SERVICE ACCOUNT NAME sa1 kubectl create sa
  • Kubernetes 集群自动缩放器似乎不适用于 GKE?

    我定义了一个节点池 最小实例设置为 1 最大实例设置为 5 并启用了自动缩放 但它似乎并没有缩小规模 我已经封锁了一个节点 已经过去12个多小时了 没有待处理的 Pod 删除节点不会减少我自己的部署的副本数量 相关节点上运行以下 pod f
  • Kubernetes - 服务之间的通信

    我目前正在开发 kubernetes 集群 集群工作正常 我需要在不使用代理的情况下建立服务之间的通信 例如我有以下服务 worker app1 app2 app3 Worker 需要直接通过 SSH 登录应用程序容器并执行一些命令 在 d
  • Spring OAuth2 Keycloak Kubernetes 内部/外部访问

    我在 Kubernetes 集群内配置了 Keycloak 10 0 3 服务器 keycloak 服务器必须处理外部用户的身份验证 使用外部 url 并处理用于 Spring 微服务通信的 oauth2 令牌 然后Web应用程序Sprin
  • 如何根据 Kubernetes / Docker 事件发送警报?

    是否可以根据 Kubernetes 集群内发生的事件以某种方式发送警报 到电子邮件 slack 特别是 如果 Pod 意外重新启动或 Pod 无法启动 那么获取警报将非常有用 同样 了解 Pod 的 CPU 使用率是否超过特定阈值并获取警报
  • Spring Cloud Kubernetes + Spring Cloud Gateway:无法找到 k8s 服务的实例

    我正在使用 Spring Cloud Kubernetes Spring Cloud Gateway SCG 但在 GKE 上部署应用程序时遇到一些问题 SCG 找不到 k8s 服务 我仍然收到此错误 There was an unexpe
  • 如何将新的 Kubernetes Minion 添加到当前集群

    我有一个运行在 3 台服务器上的 Kubernetes 集群 一台主服务器和 2 台服务器 我想添加另一个小黄人 是否可以添加 Minion 而无需再次进行完整安装 到目前为止 在寻找执行此操作的指南时 我只能找到有关建立整个集群的优秀指南
  • Kubernetes WatchConnectionManager:执行失败:HTTP 403

    我遇到错误Expected HTTP 101 response but was 403 Forbidden 在我使用以下命令设置新的 Kubernetes 集群之后Kubeadm当我提交下面遇到的 pyspark 示例应用程序时 只有一个主
  • 入口和 SSL 直通

    我最近一直在使用 nginxdemo nginx ingress 控制器 据我了解 该控制器无法执行 SSL 直通 我的意思是 将客户端证书一直传递到后端服务进行身份验证 因此我一直通过标头传递客户端主题 DN 最终 我更喜欢 SSL 直通
  • Kubernetes 通过基于时间的触发器扩展 Pod

    我有一台在 Kubernetes 上运行的服务器来处理每小时的处理作业 考虑使用服务来公开 pod 并使用 外部 cron 作业来访问负载均衡器 以便 kubernetes 可以根据需要自动缩放以处理更高的负载 然而在实现中 如果 cron
  • 如何从清单文件(通常是清单文件与 kubectl 运行)使用 kubectl port-forward

    我正在尝试在本地使用 Kubernetes 运行我的第一个应用程序 或者我应该说 minikube 我有一个非常基本的 Web 服务器 一个本地 docker 镜像 和官方 mongodb 我想从 dockerhub 中提取 镜像 我并不是

随机推荐

  • 无法使用 [formControlName] 禁用 matInput 元素

    我在用着matInput and mat form field angular material 在 Angular 组件中 我无法禁用matInput 可以在这里看到一个工作示例 https stackblitz com edit ang
  • SSL 握手挂起

    我在论坛上看到过这个问题 但找不到任何合适的解决方案 此外 所有这些问题都缺少一些信息 所以我想把我学到的所有东西放在这里 连接点 我正在使用 SSL TLSopenfire具有2路身份验证 获得自签名通配符证书 这意味着我在客户端和服务器
  • startMonitoringForRegion并不总是将区域添加到monitoringRegions

    我无法让 startMonitoringForRegion 持续添加区域 int i 0 for Deals d in deals NSLog deal addRegionsInDealsArray d deal id if d latit
  • 在托管 ASP 站点的 URL 中附加 www(即无 IIS 访问权限)

    我看到很多类似的问题都是用乱码写的 我不明白 使用 htaccess 将非 www URL 重定向到 www https stackoverflow com q 50931 153923 将不带 www 的 URL 重定向到 www htt
  • jQuery 从 DOM 中删除元素仍将报告保留为当前状态

    我有一个地址查找系统 用户输入邮政编码 如果邮政编码经过验证 则返回并显示地址列表 然后他们选择一个地址行 该列表消失 然后地址行进一步分成一些表单输入 我面临的问题是 当他们完成上述过程 然后清除邮政编码表单字段 点击查找地址按钮 地址列
  • 抛出异常时如何显示堆栈跟踪

    我希望有一种方法可以在引发异常时向用户报告堆栈跟踪 做这个的最好方式是什么 如果可能的话 我希望它是便携式的 我希望弹出信息 以便用户可以复制堆栈跟踪并在出现错误时通过电子邮件发送给我 安德鲁 格兰特的回答 https stackoverf
  • 如何锁定表...做事...使用 Spring Boot 解锁表?

    这个想法基本上是扩展some具有自定义功能的存储库 所以我得到了这个设置 它确实有效 MappedSuperclass abstract class MyBaseEntity Id GeneratedValue strategy Gener
  • PHP 中的 ' 和 " 有什么区别? [重复]

    这个问题在这里已经有答案了 可能的重复 PHP 不同的引号 https stackoverflow com questions 1318028 php different quotes 简单的问题 php 中 和 有什么区别 什么时候应该使
  • 将密码重置邮件模板替换为自定义模板 laravel 5.3

    我为身份验证系统执行了 laravel 命令 php artisan make auth它为我的应用程序制作了身份验证系统 几乎一切都正常 现在 当我使用忘记的密码时 它会向我的邮件 ID 发送一个令牌 我看到模板包含 laravel 和一
  • 具有 2FA 的 Asp.Net Identity - 记住会话后不保留浏览器 cookie

    我正在使用带有 Asp Identity 和两因素身份验证的 MVC5 2 的最新示例代码 启用 2FA 后 当用户登录时 系统会提示输入代码 通过电话或电子邮件发送 并且他们可以选择 记住浏览器 这样他们就不会在该浏览器上再次要求输入代码
  • 在flex中以编程方式获取SIM号码

    我想以编程方式获取SIM号码 在flex中可以吗 在android开发人员指南中我看到了电话管理器类 同样我们在flex中有什么东西吗 提前致谢 看看这个 这确实是一个 hack 但却是您从 Flex Mobile 调用 Java API
  • 使用不带操作栏的选项菜单

    我正在使用它来隐藏 Android 应用程序中的操作 标题栏 this requestWindowFeature Window FEATURE NO TITLE 我用这个创建了我的选项菜单 MenuInflater inflater get
  • Android 每 4 秒运行一个任务

    您好 我需要每 4 秒调用一个方法 即使设备处于睡眠状态 我使用带有服务 Start stick 的警报管理器 服务名称为 TransactionService 当设备处于活动状态并且每 4 秒调用一次该方法时 代码运行良好 但是当屏幕锁定
  • Django+MongoDB 与 Node.js+MongoDB

    我已经建立并运行了一个带有使用 Python Django MySQL 构建的同步服务的网站 很长一段时间以来 我一直在关注 Node js 和 MongoDB 方面 我即将做出决定 将系统的一部分迁移到 MongoDB 该系统托管来自用户
  • 在回发期间保留 C# 对象

    我有一个 asp net 页面 其中包含 C 代码隐藏 它在 Page Load 方法中执行一些操作 例如查询数据库并进行一些其他调用以使用数据填充对象 然后我在页面上显示这些数据 这一切都很好 我设置了几个回发 以便当单击列表框中的值时
  • R中按字符串列名聚合

    我想按两列对 data frame 中的数据进行分组 然后对特定的第三列进行求和 例如 gt aggregate mpg gear cyl data mtcars FUN sum gear cyl mpg 1 3 4 21 5 2 4 4
  • GUI 开发人员如何处理可变像素密度?

    当今的显示器在尺寸和分辨率方面具有相当大的范围 例如 我的 34 5 厘米 19 5 厘米显示屏 对角线为 39 6 厘米或 15 6 英寸 具有 1366 768 像素 而对角线为 15 英寸的 MacBook Pro 第三代 具有 28
  • 使用 dplyr 将组汇总为区间

    H 我有一个像这样的数据框 d lt data frame v1 seq 0 9 9 0 1 v2 rnorm 100 v3 rnorm 100 gt head d v1 v2 v3 1 0 0 0 01431916 0 5005415 2
  • 如何使用 JodaTime 获取一年中的天数?

    我已尝试以下方法但无济于事 new Period Years ONE getDays new Period 1 0 0 000 getDays 我想要的答案显然是365 你想要的答案并不明显365 它是365 or 366 您在示例中没有考
  • Rancher - 如何公开我的服务?

    我有一个正在运行的 Rancher 设置 如下所示 主机 运行牧场主 https github com rancher rancher容器 在公共IP上 无法从 Internet 访问专用网络 10 1 1 0 24 中的节点 我的目标是使