9.kube-proxy

一、Service的实现模型

  • kube-proxy的作用主要是负责service的实现,就是实现了内部请求到service和外部的从node port向service的访问,转发到后端某个pod。
  • 每个Node运行一个kube-proxy。
  • kube-proxy这个组件始终监视着apiserver中有关service变动信息,获取任何一个与service资源相关的变动状态,通过watch监控,一旦有service资源相关的变动和创建,kube-proxy都要转换为当前节点上的能够实现资源高度规则-----iptables、ipvs。

二、kube-proxy的三种代理模式  

userspace

  1.1之前默认模型。socket的方式实现代理的,最大问题:性能损耗,service请求从用户空间---内核iptables---再回到用户空间,由kube-proxy完成后端endpoints的先择和代理工作。

iptables

  1.1版为默认模型。iptables NAT,性能损耗,规模大时iptables rules将会宠大。

ipvs

  1.11为默认模型。与iptables类似,当创建了前面的Service 之后,kube-proxy首先会在宿主机上创建一个虚拟网卡(kube-ipvs0)并为他分配service VIP作为IP地址,kube-proxy会通过OS的IPVS模块为这个IP设置三个虚拟主机(后端的三个POD IP),使用轮询作为LB策略(ipvsadm命令查看),IPVS模块会负责请求的转发。

  在OS上需要加载内核模块nf_conntrack_ipv4ip_vsip_vs_rrip_vs_wrrip_vs_sh

modprobe ip_vs
.........
lsmod|grep -e ip_vs -e nf_conntrack_ipv4
或者
cat /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4

 

三、服务暴露方式

NodePort

hostNetwork

  宿主机上没有被占用的端口。外部可以通过宿主机IP:Pod端口访问

LoadBalancer

  需要云服务商支持。特点每个暴露的服务都需要一个IP,每个loadbalancer都需要向服务商付费。

Ingress

  ingress配置一种路由转发规则,ingress controller根据ingress中的规则,生成路由转发配置。如nginx-ingress-controller,控制循环会检测ingress对象的添加,通过其规则和service、pod信息生成nginx的配置,通过nginx对外服务和负载均衡。

 

启动kube-proxy示例

kube-proxy --kubeconfig=/var/lib/kubelet/kubeconfig --cluster-cidr=10.240.0.0/12 --feature-gates=ExperimentalCriticalPodAnnotation=true --proxy-mode=iptables

kube-proxy 目前仅支持 TCP 和 UDP,不支持 HTTP 路由,并且也没有健康检查机制。这些可以通过自定义 Ingress Controller 的方法来解决。

posted @ 2021-11-17 16:09  天涯160  阅读(205)  评论(0)    收藏  举报