首页 > 解决方案 > Docker Container 内的 IpTables 来控制 Subcontainer

问题描述

我目前正在为 Docker 容器内的微服务开发网络过滤器。

架构如下:

host
    container A                        // in bridge network docker0
        (Create network (bridge, name: testnet) for microservices)
        (Manage IpTable rules for microservices)
        microservice A                 // started in custom bridge network (interface name: testnet)
        microservice B                 // started in custom bridge network (interface name: testnet)
             ...
    container B (Some other functionality)
    container C (Some other functionality)
        ...

整个系统由多个容器组成,其中一个容器中又包含多个子容器(微服务)。

现在我想限制对微服务的访问,而不用 IpTables 限制其他容器的访问。

我现在正在做的是为容器 A 中的容器创建一个 Docker 网络,容器 A 中的系统负责处理 IpTable 规则。由于其他系统要求,这里需要进行 IpTable 管理。

如何将 docker 容器内的 IpTable 规则应用于 DOCKER-USER 链?

容器 A 的最小化 Dockerfile:

FROM node:14

RUN apt-get update
RUN apt-get install -y iptables build-essential

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
COPY package*.json ./

RUN npm install

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "node", "index.js" ]
docker run -it -p 8080:8080 --add-cap=NET_ADMIN -v /var/run/docker.sock:/var/run/docker.sock containera

微服务的启动方式如下:

docker run --network testnet microservicea

我要应用的示例规则:

iptables -I DOCKER-USER -i testnet -s xxx.xx.xxx -j REJECT

但是我在这里得到一个错误,因为容器内不存在链 DOCKER-USER。

我已经尝试在容器内安装 iptables,但是容器内的链是空的,并且缺少 DOCKER-USER:

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

向 INPUT 或 OUTPUT 添加规则对微服务没有影响。

标签: dockeriptables

解决方案


推荐阅读