docker - 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 添加规则对微服务没有影响。
解决方案
推荐阅读
- python - 如何检查语句是否匹配(Zip 函数)
- javascript - 为什么用 puppeteer 抓取数据总是从第一页提供数据?
- awk - 如何使用 awk 过滤换行符作为记录分隔符和字段分隔符
- google-app-engine - 将路由设置为 dispatch.yaml 的锄头
- java - 编辑 HideBottomViewOnScrollBehavior 类 android
- ggplot2 - 如何移动图表的开头,使其以 0 以外的数字开头
- php - 如何更改其他 php.ini 文件的路径
- ios - 快速观察或跟踪每个功能的进度条
- c++ - std::array 的长度是否有大小限制?
- azure - 为 Azure 应用注册生成证书