k8s进阶笔记

发布时间 2023-05-28 19:12:17作者: tigergaonotes
k8s iptables 链:

svc映射到pod需要进行一次dnat转换。

最主要的链是kube-services,kube-svc-*,kube-SEP-*

1、kube-services链是访问集群内部服务的数据包入口点,它会根据匹配到目标ip:port 将数据包分发到相应的kube-svc-*2、kube-svc-* 链相当于一个负载均衡器,它会将数据包平均分发到kube-sep-* 链。每一个kube-svc-* 链后面的kube-sep-*链都和service的后端pod数量一样

3、kube-sep-*链通过DNAT 将连接的目的地址和端口从service的ip:port替换为后端pod的ip:port,从而将流量转发到相应的pod

kube-proxy IPVS模式

--procy-mode参数:除了现在有的userspace和iptables模式,ipvs模式通过--proxy-mode=ipvs进行配置

--proxy-scheduler:用来指定ipvs负载均衡算法,如果不配置则默认使用round-robin(rr)模式

ipvs支持的负载均衡算法有:
rr--轮询
lc--最小链接
dh--目的地址哈希
sh--源地址哈希
sed--最短时延

一旦创建一个service和一个endpoints,ipvs的kube-proxy进行做三件事:
1、确保一块dummy网卡(kube-ipvs0)存在,为什么要创建这块网卡?因为ipvs的netfiler钩子挂载input链,我们需要把service的访问ip都绑定在dummy网卡上让内核觉得虚拟ip就是本机ip,从而进入input链。
2、把service的ip绑定在dummy网卡上。
3、通过socket调用,创建ipvsde virtual server和real server,分别对应k8s的service 和 endpoint。