k3s学习笔记(三)
这篇文章主要看一下三种::ServiceType::。总的架构如下图所示:
这图里面涉及到的东西比较多,后续会用多篇文章进行说明。首先看下::k3s::默认启动的服务:
$ sudo kubectl get svc -n kube-system
下面是查询结果:
首先看一下这个traefik
这个service,这个service的类型是LoadBalancer
,所以它是直接把所有服务的端口转发到::node的ip地址上面::。看一下这个service的具体信息:
$ sudo kubectl describe svc -n kube-system traefik
上面命令的具体输出如下:
上面的输出有几点可以学习:
- 这个service的::Type::是LoadBalancer。
- 这个service的
LoadBalancer Ingress
地址是192.168.3.47
- 这个service提供的服务的端口是
80
和443
。
注意这个LoadBalancer Ingress
的地址,这个地址其实就是node的ip地址,也就是树莓派的主机地址。可以验证如下:
$ ip addr show wlan0
在树莓派的主机执行上面的查询命令,得到结果如下:
可以看到主机地址就是192.168.3.47
。那么我们可以试试看访问192.168.3.47
的80
端口。使用httpie
来访问一下试试:
$ http 192.168.3.47:80
可以看到访问结果如下:
可以看到上面404 page not found
,实际是traefik
的默认页面,因为我们还没有配置任何的url转发。
所以可以看到,traefik
作为一个::Ingress Controller::本身,它以::LoadBalancer::的service的形式在运行。
因此在架构方面,所有的其他service理论都应该以Ingress
的形式,通过traefik
的转发而提供访问。因此应该只有traefik
一个service以LoadBalancer
的形式存在。
至于NodePort
形式的service,类似于docker里面的端口映射,这个是最简单的service部署方案,在后续文章里面展示一下即可。
本文最后再说一下::k3s服务::里面::LoadBalancer::这个type的服务是怎么实现的。
实际上::LoadBalancer::这个类型的service是靠前一篇文章中列出的这个模块实现的:
- svclb-traefik (这个其实对应::klipper-lb::项目,后续会具体介绍)/ GitHub - rancher/klipper-lb: Embedded service load balancer in Klipper / Klipper Service Load Balancer
上面提到的这个模块,会为每一个::LoadBalancer::类型的service创建一个::pod功能模块::,提供::直接的端口转发::,并且这个功能模块会命名为svclb-xxx
。可以通过下面的查询命令验证这一点:
$ sudo kubectl get po -n kube-system
下面是查询结果:
可以看到名为svclb-traefik-bzbmj
的pod,这个就是::kilpper-lb::这个模块自动创建的用来提供::LoadBalancer::服务的pod。
以上就是本文的内容。