web-dev-qa-db-ja.com

インターネットアクセスを制限する-Dockerコンテナ

ロードバランサーネットワーク内のコンテナーのインターネットアクセスを制限する状況があります。例えば、下の写真で

easy for your reference

container4のみがインターネットに接続します。 otherthreeは、container4を介してのみ外部と通信します。たとえば、container1がsmtpサポートを必要とする場合、smtp要求をcontainer4に転送してアクセスを取得します。

container4以外のコンテナは、インターネットに直接アクセスできません。これはDockerレベルで実施する必要があります。

dockerネットワークの作成で設定可能になると思いますが、これを達成する方法を説明できる人はいますか?

18
Bilal Usean

インターネットにアクセスするためのネットワーク作成

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

23
Bilal Usean

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      
18
exic