Home Github


基于IPVS的Kubernetes

iptables

iptables、ip6tables等都使用Xtables框架。存在“表(tables)”、“链(chain)”和“规则(rules)”三个层面。

Packet Flow

fitler表

通常用于过滤数据包,内建链:

  • INPUT, 处理发往本机的数据包。
  • OUTPUT, 处理从本机发出的数据包。
  • FORWARD, 将数据包转发到本机其他网卡设备上。

nat表

用于地址转换,内建链:

  • PREROUTING, 处理路由规则前通过此链,通常用于DNAT。
  • POSTROUTING, 完成路由规则之后通过此链,通常用于SNAT。
  • OUTPUT, 只处理本机发出的数据包。

mangle表

mangle表侧重处理每个数据包,比如修改TCP中的QoS,nat表侧重于连接, 内建PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

raw表

用于异常处理,内建PREROUTING,OUTPUT。

规则

目标(target):

  • ACCEPT, 允许接收数据包
  • DROP, 丢弃数据包
  • QUEUE, 移交到用户空间
  • RETURN, 停止执行当前链中的后续规则,返回到调用链。
  • REJECT, 可以发送ICMP报文回去。
  • LOG, 记录,但是数据包会继续沿着链往下走。

Iptables的规则执行:

  • 规则包括一个条件和一个目标。
  • 如果满足条件,就执行目标中的规则。
  • 如果不满足条件,就到下一条规则。

ipvs

标准的ipvs只支持DNAT,并不支持FullNAT,所以为了所有的流量会返回本机,需要配置额外的MASQUERADE规则。

ipset

用ipset可以显著减少iptables的规则数量,在Kubernetes中,有如下ipset已经被创建出来了。

  • KUBE-CLUSTER-IP, 所有的服务IP+Port,Mark-Masq for cases that masquerade-all=true or clusterCIDR specified
  • KUBE-LOOP-BACK, 所有的服务IP+Port+IP, masquerade for solving hairpin purpose
  • KUBE-EXTERNAL-IP, 服务的外部IP+Port, masquerade for packages to external IPs
  • KUBE-LOAD-BALANCER, 负载均衡入口IP+Port, masquerade for packages to load balancer type service
  • KUBE-LOAD-BALANCER-LOCAL, 负载均衡入口IP+Port(externalTrafficPolicy=local), accept packages to load balancer with externalTrafficPolicy=local
  • KUBE-LOAD-BALANCER-FW, 负载均衡入口IP+Port(loadBalancerSourceRanges), package filter for load balancer with loadBalancerSourceRanges specified
  • KUBE-LOAD-BALANCER-SOURCE-CIDR, 负载均衡入口IP+Port+源CIDR, package filter for load balancer with loadBalancerSourceRanges specified
  • KUBE-NODE-PORT-TCP, nodeport类型服务TCP端口, masquerade for packets to nodePort(TCP)
  • KUBE-NODE-PORT-LOCAL-TCP, nodeport类型服务TCP端口(externalTrafficPolicy=local), accept packages to nodeport service with externalTrafficPolicy=local
  • KUBE-NODE-PORT-UDP, nodeport类型服务UDP端口, masquerade for packets to nodePort(UDP)
  • KUBE-NODE-PORT-LOCAL-UDP, nodeport类型服务UDP端口(externalTrafficPolicy=local), accept packages to nodeport service with externalTrafficPolicy=local