k8s知识点整理
组件分类
kubelet
kube-proxy
kube-apiserver
k8s网络原理
k8s集群提供服务的最小单元是pod,但提供服务的实际还是docker容器,只是说一个pod管理了多个docker container,并如果是提供端口的服务则会在pod上起相应的端口使容器能够提供服务,外部在通过访问集群提供端口访问服务,内部则是做了多次映射将外部端口映射到服务容器中。
最外层网络类型
即集群提供服务的网络,常见的集群提供服务是通过负载均衡的方式,可以是nginx、haproxy等常见的反向代理,也可以是一些云厂商提供的负载均衡服务,总的来说还是通过一个统一的入口在通过负载均衡算法将服务交由后端节点处理。
- nodeport方式
将node节点的一个端口与pod的端口相关联,而pod则是依靠service实现一组pod的服务提供,service会提供一个虚拟ip即cluster ip,这个ip相当于所有pod的入口,clusterip+pod服务端口就组成了endpoint,是内网访问服务的直接方式,可以起一个简单的htpp服务然后用curl的方式进行试验,虽然pod是存活在某个node上,但这种映射关系会通过etcd同步到所有节点,所以即使是在节点a访问节点b的某个endpoint服务也是能正常访问的。 node节点的端口映射到cluster ip是依靠kube-proxy节点实现的,有两种方式,userspace和iptables两种实现方式。 userspace是在用户空间,通过kuber-proxy实现LB的代理服务。这个是kube-proxy的最初的版本,较为稳定,但是效率也自然不太高。 另外一种方式是iptables的方式。是纯采用iptables来实现LB。是目前一般kube默认的方式。kube-proxy会实时产生许多iptables规则链,将nodeport的端口转发到对应的serivce ip中,而这个service ip则是由一个网络组件(flanus等)的路由规则转发到具体的pod里 - loadbalance方式