K3S Helm 高可用安装 rancher 修改80和443端口
K3S Helm 高可用安装 rancher 修改80和443端口(k8s同理)请注意,本文是基于默认K3S安装了Traefik的基础上来写的。如果是使用自定义的IngressController,仅作参考,不过也具备参考意义。某些时候,我们需要修改rancher的默认端口。如果是单机安装,直接docker的-p就可以解决,因为这个时候,docker容器直接接管了流量。但是高可用部署,由于是部署在
K3S Helm 高可用安装 rancher 修改80和443端口(k8s同理)
请注意,本文是基于默认K3S安装了Traefik的基础上来写的。如果是使用自定义的IngressController,仅作参考,不过也具备参考意义。
某些时候,我们需要修改rancher的默认端口。
如果是单机安装,直接docker的-p就可以解决,因为这个时候,docker容器直接接管了流量。
但是高可用部署,由于是部署在K3S环境中,因此,不能简单的处理。必须通过修改K3S集群的流量控制入口(说白了,就是Ingress和LoadBanlencer)来处理。这个时候rancher是集群内部的一个POD而已,因此它自己不用修改端口。
这里,必须先搞清楚(我花了很多时间搞清楚)K3S的流量控制艺术,在搞清楚艺术之前,还得了解Ingress和IngressController,针对Ingress和IngressController,写的最好的文章是我认为写的最好的一篇。
有了Ingress和IngressController的认知之后,我们来看K3S的流量艺术。
- K3S默认会安装Traefik作为IngressController,接管集群内80和443的流量。如果看到写的最好的文章,我们就知道,一般情况下,其实IngressController本身并不会(除非特殊的启用hostPort)并不会在主机上监听端口,它依然属于集群内部。
- 从写的最好的文章我们知道,让IngressController能够对外服务,可以有三种做法:1)给IngressController开一个NodePort服务;2)IngressController作为DaemonSet部署,暴露hostPort;3)给IngressController暴露一个LoadBalancer服务;
其实说白了,就是想办法让IngressController这个容器,能够对外暴露服务端口。
不过,K3S没有采用上面三种做法,它使用了一个特别的办法,在官网我们可以得知(官网中文翻译根本看不懂,难啃),它采用了DaemonSet部署特殊的Klipper Load Balancer进程的方式,来给Traefik Ingress Controller提供流量导入
。 - 2所述的流量导入,可以简单图解为:
[client]-->(主机port)<--iptables监听-->[DaemonSet-Klipper]--iptables转发-->[集群内Traefik]
也就是说,K3S通过在每个节点部署Klipper,然后以iptables路由的方式,将节点流量转发到内部的IngressController。 - 我们可以在节点中通过
k3s kubectl get svc -n kube-system
k3s kubectl get pods -n kube-system
k3s kubectl get daemonset -n kube-system
k3s kubectl edit daemonset svclb-traefik -n kube-system
逐一验证2中所述的官网描述以及通过写的最好的文章所了解到的信息
有了上面的艺术刨析,我们就知道,端口的改造,重点是修改 Daemonset:svclb-traefik,我们从Klipper的github核心文件可以了解到,它是通过iptables来处理流量的。里面使用了一些环境变量来设置入口端口和转发信息
于是:
- k3s kubectl edit daemonset svclb-traefik -n kube-system
- 修改里面的环境变量端口以及容器端口,其中DEST_IP和DEST_PORT代表的是集群内部的Traefik的ServiceIP和端口。其他的就不用细讲了。
- 等待相关POD自动更新
或者,因为了解了刚才的艺术过程。
同样是在官网-ServiceLB如何工作这一节,我们可以得知——由于它使用了
Klipper Load Balancer
,因此,你在K3S上创建一个L4负载均衡(即type: LoadBalancer服务)
,K3S会自动启动一个Klipper Load Balancer,在主机上打开L4负载均衡中设置的服务端口,通过iptables转发你的请求到这个L4负载均衡上面,然后由L4负载均衡再转发到配置的内部端口上。基于这个信息,那么
- 打开服务发现,创建一个L4负载均衡,其目标选择POD:traefik
- 设置L4负载均衡的服务端口为需要的端口
- 保存,等待K3S自动构建svclb-traefik-xxxx
更多推荐
所有评论(0)