概念
kube-proxy 实际上并不起一个 proxy 的作用,而是 watch 变更并更新 iptables,也就是说,client 的请求直接通过 iptables 路由。
如果kube-proxy通过iptables 转发。会修改filter和nat表
filter表
filter表通过OUTPUT链规定所有的出报文都要经过KUBE-SERVICES,如果一个Service没有对应的endpoint,则拒绝将报文发出。
例如,创建一个service,下图的frontend,没有对应的endPoint
查看filter:iptables -L -n -t filter
filter表中会将访问172.18.13.31的请求拒绝。
nat表
nat表中设置的规则比较多,查看nat表命令:iptables -L -n -t nat
1、在PREROUTING阶段,将所有报文转发到KUBE-SERVICES
2、在OUTPUT阶段,将所有报文转发到KUBE-SERVICES
3、在POSTROUTING阶段,将所有报文转发到KUBE-POSTROUTING
nat表中主要增加了如下几个链-规则
1)KUBE-SERVICES
每个Service的每个服务端口都会在Chain KUBE-SERVICES中有一条对应的规则,发送到clusterIP的报文,将会转发到对应的Service的规则链,没有命中ClusterIP的,转发到KUBE-NODEPORTS。
只有发送到被kubernetes占用的端口的报文才会进入KUBE-MARK-MASQ打上标记,并转发到对应的服务规则链。例如第一条划线的KUBE-MARK-MASQ这里分配给SE