k8s网络分析2--在Node节点直接访问service

访问service,网络数据如何走?

说明:如果我们在k8s的一个node节点上直接请求k8s的service的ip来请求服务,网络数据是如何走的呢?

查看服务的ip

k8s网络分析2--在Node节点直接访问service
ip: 服务service-adp-project 的service ip: 10.101.166.131,端口:80

查看当前系统的路由:

k8s网络分析2--在Node节点直接访问service
说明:可以看到路由数据是走到eth0 设备,这是我们的网卡。
走到网卡设备,数据不是从本机出去了吗?
数据没出去,数据在出去前被系统的钩子函数拦截了,这个钩子就是iptables,iptables其实也是工具使用的系统内核的netfilter,这里不拉远了。
所以接下去查看iptables的规则:

查看iptables的规则集

iptables 有4表5链,他们有顺序和优先级?
raw > mangle > nat > filter
k8s网络分析2--在Node节点直接访问service
备注:raw 和 managle没有规则,接下来查看nat,注意看OUTPUT上的。
k8s网络分析2--在Node节点直接访问service
备注:转到自定义规则链KUBE-SERVICES
k8s网络分析2--在Node节点直接访问service
备注:发往10.101.166.131的数据转发到KUBE-SVC-DJA4VUKOSH7NVR4E
k8s网络分析2--在Node节点直接访问service
备注:数据转发到链KUBE-SEP-OIHJNKSRTDY73BWF
k8s网络分析2--在Node节点直接访问service
备注:这里要多说一句,对于后端有多个pod的情况,这里会有多条链路,默认1/n+1的计算规则,实行rr的负载均衡。
做DNAT转换:
k8s网络分析2--在Node节点直接访问service
可以看到 指向10.244.8.255:80 ,这个是endpoint,指向实际的pod的ip。
后续路由略。