ロードバランサーネットワーク内のコンテナーのインターネットアクセスを制限する状況があります。例えば、下の写真で
container4のみがインターネットに接続します。 otherthreeは、container4を介してのみ外部と通信します。たとえば、container1がsmtpサポートを必要とする場合、smtp要求をcontainer4に転送してアクセスを取得します。
container4以外のコンテナは、インターネットに直接アクセスできません。これはDockerレベルで実施する必要があります。
dockerネットワークの作成で設定可能になると思いますが、これを達成する方法を説明できる人はいますか?
インターネットにアクセスするためのネットワーク作成
docker network create --subnet = 172.19.0.0/16 internet
ブロックインターネットアクセスのためのネットワーク作成
docker network create --internal --subnet 10.1.1.0/24 no-internet
Dockerコンテナをインターネットに接続する場合
docker network connect internet container-name
インターネットアクセスをブロックする場合
docker network connect no-internet container-name
内部ネットワークでは、ポートを公開して外部に接続することはできません。詳細については、これを参照してください question
here が見つかったので、これをdocker-composeで動作させました。 docker-compose.yml
として保存:
version: '3'
services:
outgoing-wont-work:
image: Alpine
networks:
- no-internet
command: ping -c 3 google.com # will crash
internal-will-work:
image: Alpine
networks:
- no-internet
command: ping -c 3 internal-and-external
internal-and-external:
image: Alpine
networks:
- no-internet
- internet
command: ping -c 3 google.com
networks:
no-internet:
driver: bridge
internal: true
internet:
driver: bridge
次にdocker-compose up -d
を実行すると、docker-compose ps
は数秒後に次のようなものを表示します。
Name Command State Ports
----------------------------------------------------------------------------------
dco_inet_internal-and-external_1 ping -c 3 google.com Exit 0
dco_inet_internal-will-work_1 ping -c 3 internal-and-ext ... Exit 0
dco_inet_outgoing-wont-work_1 ping -c 3 google.com Exit 1