云由临时的服务器组和向服务器分配容器的方法组成。容器是一种将应用程序打包到标准化单元中的方法,以便该应用程序可以在云中的任何服务器上平稳运行。经常出现的问题是需要将外部客户端的流量定向到云内的容器中,同时确保外部客户端不与云绑定。针对该问题,一个常见的解决方案是创建一个Ingress controller。
Kubernetes的Ingress
Kubernetes Ingress有两个要求:
-
Ingress controller
-
Ingress
这是为Kubernetes配置Ingress的端到端设置示例,以便集群的外部客户端可以Ingress controller访问集群内运行的Pod。一旦流量被引导到pod,流量将被引导至该Pod内的正确容器中。在本文中我们将K3s部署到树莓派上构建集群。您可以参考我们往期教程,了解如何在树莓派上搭建K3s集群:超强教程!在树莓派上构建多节点K8S集群!
上图描述了以下组件的工作:
客户端希望将流量发送到Pod。通过创建ClusterIP服务,将Pod部署到K3s集群并在集群内公开。客户端无法访问此服务,但是Ingress Controller可以访问该服务。Ingress controller执行Ingress定义的路由规则。Ingress controller通过NodePort服务向客户端公开。
Kubernetes并不部署Ingress controller,但是K3s会默认部署一个。上图展示了K3s部署Traefik作为Ingress controller的实现。因此,Traefik将会负责满足Ingress的请求。Ingress 请求由K3s提交,根据不同的HTTP属性实例化传入流量的路由规则。
上图中描述的Ingress在Traefik上创建了一个路由规则,这样传入的流量如何路径与“/”后面的内容相匹配,就会被重定向到80端口的nginx-svc服务。
创建K3s Ingress 资源
以下指南将根据上一部分的例子来构建对应的Ingress配置。
运行Traefik 仪表盘
K3s为Ingress controller创建了一个Traefik 部署,但默认情况下,仪表盘是禁用的。在启用仪表盘的情况下运行Traefik,可以实现应用Ingress创建的路由规则的概念。
必须编辑Traefik的ConfigMap才能启用仪表盘。