我在不同的命名空间上进行了不同的部署,我想将其中一些部署公开到Internet,即使我没有可用的静态和公共IP。不同的服务部署在Rancher k3s上,每个应该公开访问的服务都在同一个命名空间中定义了Ingress。
我试图追随兰彻-如何公开我的服务?,但我并没有真正得到我必须做的事情,而且:
- 为什么我们需要定义LoadBalancer?在我看来,k3s(Traefik?(使用的IngressController已经创建了一个。如果这是必须的(或者是一个很好的方法(,那么应该如何准确地定义服务
- 我的环境中没有任何Rancher UI。因此,有没有一种方法可以以声明的方式实现该链接中描述的内容
- 有没有办法使用像No IP或FreeDNS这样的服务作为最终主机名
如果我说得对,您在barebone/vms节点上手动部署了Kubernetes,现在您想接触到在该集群内运行的部署。
- 此设置中有两个级别的负载平衡,由您的ingress控制器管理的负载平衡在您的情况下听起来像是traefik,建议在您的工作人员面前运行第二个L4负载均衡器,以到达通常部署在多个/所有节点上的ingress pod。Traefik或其他lb控制器将在k8s集群内对流量进行负载均衡,即使您没有L4负载均衡器,也不会出现问题,但如果您失去了这个节点,则不会重新推荐,因为没有流量可以再到达kubernetes集群。你"只是";需要让你的dns解析指向你的公共ip,并路由到你的一个工作进程,或它前面的LB。然而,如果你没有L4 LB,你需要让入口吊舱监听端口80和/或443
- 您在Rancher UI中所做的大多数事情只是一种更容易查看k8s对象的方式,所有入口配置都可以通过kubectl、k9s(强烈建议使用那个!(、lens或其他方法实现。但是k8s对象仍然是k8s对象。在这种情况下,您需要使用ClusterIP公开您的服务,然后ingress pod可以访问这些服务
- 我从未在k8s中使用过这样的解决方案,但当我也使用过时,互联网路由器能够完成这一部分,一旦你到达那里,它就是内部路由
我希望这能有所帮助。Ingress绝对是一个很难把握的东西!