根据docker文档(重点是我的):
在Linux上,Docker操纵iptables规则来提供网络隔离。虽然这是一个实现细节(…)你不应该修改规则Docker插入到你的iptables策略…
和
可以在Docker引擎的配置文件/etc/docker/daemon.中设置iptables键为false但是这个选项对于大多数用户来说并不合适。要完全阻止Docker创建iptables规则是不可能的,而且事后创建规则非常复杂,超出了这些指令的范围。将iptables设置为false很可能会破坏Docker引擎的容器网络。
文档确实非常清楚地表明你不应该混淆这些选项,但他们没有提供任何进一步的信息。那么,问题是禁用docker的iptables操作到底有什么问题?这将如何影响运行:
- 独立的容器?
- docker-compose吗?
- docker-swarm模式?
- kubernetes吗?
我假设容器互联网连接将通过手动为docker0
设置NAT规则来处理,如下面所述。
我决定回答部分与Kubernetes相关的问题。典型的Kubernetes网络设置依赖于符合容器网络接口规范的第三方工具(CNI插件)。您可以找到不同的Kubernetes网络选项参考Kubernetes网络模型文档
Kubernetes有自己的一套iptables
规则,由kube-proxy
管理,在pod和服务之间进行各种过滤和NAT转换。最重要的链是KUBE-SERVICES
,KUBE-SVC-*
和KUBE-SEP-*
(参见:Kubernetes网络基础)。
docker0
),因为它使用CNI进行网络设置。每个Kubernetes CNI插件的工作方式都有点不同,所以最好在官方文档中查看详细的概念。