开启bridge功能是什么意思(k8s安装时开启bridge-nf-call-iptables)

这个是k8s面试时候我经常问童鞋的一个问题,倒不是这个问题有多难,而是想看一下候选人有没有关注技术细节。我面试的候选人基本都安装过k8s,但这个问题却很少有人能回答出来。这里简单给大家介绍一下。

首先介绍一下bridge-nf 是干嘛的?

bridge-nf使得netfilter(iptables底层实现)可以对Linux网桥上的IPv4/ARP/IPv6包过滤。比如,设置
net.bridge.bridge-nf-call-iptables=1后,二层的网桥在转发包时也会被iptables的FORWARD规则所过滤。

那么为啥需要这个能力呢?

这里涉及到一个k8s sevice的实现了,k8s service 会通过DNAT 将sevice地址映射到后端pod,对应的回来的包会做SNAT,将源地址改回 service。之所以能改回去,netfilter 借助conntrack 保存NAT 映射关系。

但如果是同一台宿主机的两个容器之间通过service 访问的时候,虽然A 发出的数据包可以正常从 A 到 B, 但由于源IP 地址是 A,回来的数据包直接从网桥转发给了A ,那么这是 A就懵逼了,明明访问的是 service地址,返回的数据包源地址是B ,那么 A 就会丢弃,导致通信问题。

所以才需要开启 bridge-nf 功能,让回去的数据包也能走到 netfilter,执行SNAT 后再返回。

(41)
打赏 微信扫一扫 微信扫一扫
上一篇 2022年4月11日
下一篇 2022年4月11日

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们,一经查实,本站将立刻删除。