当前位置: 首页 > 知识库问答 >
问题:

多主机库伯内特斯入口控制器

欧阳安阳
2023-03-14

我已经研究Kubernetes几个星期了,并使用kube lego NGINX示例(https://github.com/jetstack/kube-lego)已使用DigitalOcean上的Rancher成功地将服务部署到Kubernetes群集。

我已经部署了示例静态站点、Wordpress、Laravel、Craft CMS等。所有这些都使用自定义命名空间、部署、秘密、具有外部注册表的容器、服务和入口定义。

使用示例(lego)NGINX Ingress Controller设置,我能够将DNS应用于我的K8s群集的公开IP地址,并显示结果站点。

不过,我不知道如何允许多个主机的入口控制器为相同的部署提供服务,从而为集群提供HA入口。(通过应用外部负载平衡器服务或geo ip或您拥有的其他服务)。

Rancher(稳定)允许我添加多个主机,我一次旋转了3到5个,并且库伯内特斯被配置和部署在所有主机上。此外,我将定义许多副本和/或部署(如上所列),它们将分布在集群中并按预期访问。我甚至指定了入口控制器的多个副本,但当然它们都被安排在同一台主机上,只给我一个入口的IP地址。

那么,我如何允许多个主机(每个主机都有自己的面向公共的IP地址)允许进入集群?我还阅读了有关设置多个IngresController的信息,但您必须指定由哪个IngresController提供服务的部署/服务,这完全违背了目的。

也许我遗漏了什么,但如果K8s multi-host应该提供HA,并且带有入口控制器的主机宕机,那么服务将在其他主机上重新调度,但所有内容指向的IP地址都将失效,从而导致停机。有没有办法将多个IP地址用于同一组部署/服务?

共有2个答案

孙洋
2023-03-14

入口控制器像任何常规pod一样部署。这意味着您可以拥有任意数量的副本,这些副本将分布在您的所有节点之间。

您需要一个服务对象来为入口控制器分组所有POD。

然后您只需要将该服务公开给集群外部。如果您使用的是云提供商,则可以使用负载平衡器(LoadBalancer)服务来实现这一点。或者,您可以只使用节点端口服务。

关键是该服务将平衡您的入口控制器在不同kubernetes节点上运行的所有pod之间接收的流量。如果其中一个节点出现故障,那并不重要,因为还有其他节点包含入口控制器pod。

尹欣怿
2023-03-14

今天我对我的设置进行了更多的调查,我想我找到了我遇到困难的原因。“LoadBalancer”经常被提及用于云提供商(在这两个文档中,以及@Fiunchino所描述的内容)。我在Rancher设置中使用它,它会自动为您在主机上创建HA代理负载平衡器入口。

默认情况下,它只会在其中一台主机上安排它。您可以指定希望通过提供io的“注释”对其进行全局调度。牧场主调度程序。全局:“true”。

像这样:

annotations:
  # Create load balancers on every host in the environment
  io.rancher.scheduler.global: "true"

http://rancher.com/docs/rancher/v1.6/en/rancher-services/load-balancer/

我更喜欢LoadBalancer而不是NodePort,因为我希望能够将端口80(以及未来的端口443)发送到任何节点,并让它们通过检查Host标头并根据需要进行指导来成功满足我的请求。

这些LBs也可以在Rancher UI的“Infrastructure Stack”菜单下设置。我已成功删除了单个LB,并在启用了“始终在每个主机上运行此容器的一个实例”选项的情况下重新添加了一个LB。

配置好之后,我可以向任何主机发出任何进入请求,并得到响应,无论容器计划在哪个主机上运行。

https://rancher.com/docs/rancher/v1.6/en/rancher-services/load-balancer/

太酷了!

 类似资料:
  • 新来的。我想知道是否有人可以帮助我区分我可以用来识别入口控制器和通过YAML和服务识别入口的特征。我有一个预先存在的集群,我认为入口控制器可能是通过helm安装的,但我不确定。有没有办法了解helm在安装nginx ingress控制器时使用的yaml?

  • 我在K8S集群中面临一个奇怪的问题 基本上我有两个应用程序: identity manager(基于WSO2,但该问题与WSO2无关) 将管理X509身份验证的外部SAML2 IDP 为了使用这个外部SAML2 IDP,我配置了WSO2 当我尝试通过X509登录时,WSO2显示登录页面,我单击智能卡,重定向到外部SAML IDP。 在这种情况下,nginx入口为我提供了502个坏网关。如果我复制U

  • 我试图更改client\u max\u body\u size值,因此我的nginx入口不会返回413错误。 我测试了一些解决方案。 这是我的测试配置图: 这些更改根本没有效果,加载后,在nginx控制器日志中,我可以看到有关重新加载配置映射的信息,但可以看到nginx中的值。形态相同: 我的nginx控制器配置使用以下图像:quay.io/kubernetes-ingres-controller

  • 我试图设置Kubernetes入口,将外部http流量路由到前端pod(路径/)和后端pod(路径/rest/*),但我总是得到400错误,而不是主nginx索引。html。 所以我在第https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer页尝试了谷歌库伯内特斯的例子,但我总是得到400个错误。有什么想法吗?

  • 具体来说,当我按照谷歌网站上的指示在GKE上设置nginx ingress时,为什么最终会有两个外部IP地址? 这两个IP地址用于LoadBalancer类型的入口资源和服务资源: 以下是我的想法: 这基本上就是我链接到的教程页面上的图表。因此,我希望负载平衡器是L4类型的,并且有一个外部IP(并且不需要花费任何金钱来使用!)。我希望入口(尽管其名称)没有外部IP,因为我用注释标记了它 谷歌应该承

  • 我正在尝试使用helm图表部署我的应用程序。我已经将statefulSet定义为一种正在部署的类型。yaml并根据规范serviceName提供无头服务。来自部署的代码片段。yaml如下所示。 部署后,当我启动“kubectl get pods”时,其显示的POD名称为“MyApp-100-deployment-n”,其中n 如果我使用kubectl exec进入Pod,并触发“主机名”命令,我会