聊聊容器网络和 iptables

本文探讨了Docker如何利用iptables提供网络能力,详细解释了iptables的基础、Docker开启和关闭iptables支持的区别,以及Docker-USER、DOCKER-ISOLATION-STAGE-1/2、DOCKER链的作用。同时,提到了containerd与iptables的关系,以及在containerd中如何进行端口映射。
摘要由CSDN通过智能技术生成

大家好,我是张晋涛。

上周有小伙伴在群里问到 Docker 和 iptables 的关系,这里来具体聊聊。

Docker 能为我们提供很强大和灵活的网络能力,很大程度上要归功于与 iptables 的结合。在使用时,你可能没有太关注到 iptables 的作用,这是因为 Docker 已经帮我们自动完成了相关的配置。

(MoeLove) ➜  ~ dockerd --help |grep iptables
      --iptables                                Enable addition of iptables rules (default true)

docker daemon 有个 --iptables 的参数,便是用来控制是否要自动启用 iptables 规则的,默认已经设置成了开启(true)。所以通常我们不会过于关注到它的工作。

本文中,为了避免环境的干扰,我将使用 docker in docker 的环境来进行介绍,可通过如下方式启动该环境:

(MoeLove) ➜  ~ docker run --rm -d --privileged docker:dind 
f323aef7b532ba6d575ca6f9444a08f1a55f2447afec2e853954694c034e6ae0

iptables 基础

iptables 是一个用于配置 Linux 内核防火墙的工具,可用于检测、修改转发、重定向以及丢弃 IPv4 数据包。它使用了内核的 ip_tables 的功能,所以需要 Linux 2.4+ 版本的内核。

同时,iptables 为了便于管理,所以按照不同的目的组织了多张 表 ;每张表中又包含了很多预定义的 链;每个链中包含着顺序遍历的 规则;这些规则中又定义了动作的匹配规则和 目标。

对于用户而言,我们通常需要交互的就是 链 和 规则了。

理解 iptables 的主要工作流程有一张比较经典的图:

9d9325d2e0adc9b60ccafee90c545703.jpeg

img/tables_traverse.jpg

图片来源: https://www.frozentux.net/iptables-tutorial/images/tables_traverse.jpg

上面的小写字母是 表,大写字母则表示 链,从任何网络端口 进来的每一个 IP 数据包都要从上到下的穿过这张图。

  • 引用自 ArchWiki

不过这不是本篇的重点,所以就不展开了。如果大家对 iptables 的内容感兴趣也欢迎留言,后续可以写一篇完整的。

Docker 网络与 iptables

接下来我们直接看看 Docker 在开启和关闭 iptables 时,具体有什么区别。

关闭 Docker 的 iptables 支持

在本文开头已经为你介绍过 docker daemon 存在一个 --iptables 的参数,用于控制是否使用 iptables 。我们使用以下命令启动一个 docker daemon 并关闭 iptables 支持。

(MoeLove) ➜  ~ docker run --rm -d --privileged docker:dind  dockerd --iptables=false
7135a54c913af5e9ce69a45a0819475503ea9e3c5c673d62d9d38f0f0896179d

进入此容器,并查看其所有 iptables 规则:

(MoeLove) ➜  ~ docker exec -it $(docker ps -ql) sh
/ # iptables-save    
# Generated by iptables-save v1.8.8 on Mon Dec 12 01:46:38 2022
*filter                                                                                              
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2:80]                                                                        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张晋涛-MoeLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值