2017-10-01 3 views
0

macvlanネットワークに基づいた1つの追加インターフェイスを持つDocker Swarmスタック内のサービスが必要です。これは、このサービスのJBoss Clusterが、現在オーバーレイネットワークでサポートされていないIPマルチキャストを介して通信する必要があるためです。MACVLANネットワークのDocker Swarmコンテナが間違ったゲートウェイになりました - インターネットにアクセスできない

私はそのようmacvlanネットワークを作成しました:

# Worker 1: 
docker network create --config-only --subnet 10.140.0.0/16 -o parent=ens224.800 --ip-range 10.140.1.0/24 swarm-multicast-config-only 

# Worker 2: 
docker network create --config-only --subnet 10.140.0.0/16 -o parent=ens224.800 --ip-range 10.140.2.0/24 swarm-multicast-config-only 

# Worker 3: 
docker network create --config-only --subnet 10.140.0.0/16 -o parent=ens224.800 --ip-range 10.140.3.0/24 swarm-multicast-config-only 

# Master: 
docker network create -d macvlan --scope swarm --internal --config-from swarm-multicast-config-only swarm-multicast 

マルチキャストは、クラスタの形のように完全に正常に動作します。

しかし: とすぐに私は私のコンテナのいずれかにこのmacvlanネットワークを割り当てるように、このコンテナは、もはやインターネットにアクセスすることができます。 macvlanネットワークのないすべてのコンテナは正常に動作します。

は、ここに私のスタックファイルです:

version: '3.3' 
services: 
    ### Backend ### 
    petshop-backend: 
    image: com-registry.xxx.local/petshop-backend:100 
    extra_hosts: 
     - "petshop-db:10.164.210.214" 
    networks: 
     - backend 
     - external_access 
    deploy: 
     mode: replicated 
     replicas: 3 

    ### USER INTERFACE ### 
    petshop-ui: 
    image: com-registry.xxx.local/petshop-ui:107 
    networks: 
     external_access: 
     backend: 
     swarm-multicast: 
     aliases: 
      - ui-multicast 
    ports: 
     - "1002:8080" 
    deploy: 
     mode: replicated 
     replicas: 3 


networks: 
    external_access: 
    driver: overlay 
    internal: false 
    backend: 
    driver: overlay 
    internal: true 
    swarm-multicast: 
    external: true 

私はインターネットにアクセスするためにpetshop-uiのコンテナを有効にするにはどうすればよいですか? 彼らはmacvlanネットワークの範囲からですが、存在しない10.140.1.0のデフォルトゲートウェイを取得します。ここpetshop-uiコンテナのいずれかのルーティングテーブルがあります:例えばワーキングインターネットアクセス

[[email protected] /]# route -n 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use  Iface 
0.0.0.0   10.140.1.0  0.0.0.0   UG 0  0  0 eth2 
10.0.0.0  0.0.0.0   255.255.255.0 U  0  0  0 eth4 
10.0.1.0  0.0.0.0   255.255.255.0 U  0  0  0 eth1 
10.140.0.0  0.0.0.0   255.255.0.0  U  0  0  0 eth2 
10.255.0.0  0.0.0.0   255.255.0.0  U  0  0  0 eth0 
172.18.0.0  0.0.0.0   255.255.0.0  U  0  0  0 eth3 

コンテナ、 petshop-backendはデフォルトゲートウェイとして172.18.0.1を持っています。ここでは、そのようなルーティングテーブルです:

[[email protected] /]# route -n 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use  Iface 
0.0.0.0   172.18.0.1  0.0.0.0   UG 0  0  0 eth2 
10.0.0.0  0.0.0.0   255.255.255.0 U  0  0  0 eth1 
10.0.1.0  0.0.0.0   255.255.255.0 U  0  0  0 eth0 
172.18.0.0  0.0.0.0   255.255.0.0  U  0  0  0 eth2 
+1

移動 'EXTERNAL_ACCESSで下へfalse'のは、それはおそらく –

+0

@TarunLalwani働くだろう - 完璧に動作します。これはあまり透明ではないようですが。どうもありがとうございます! – t3chris

答えて

1

あなたは

networks: 
    backend: 
    driver: overlay 
    internal: true 
    swarm-multicast: 
    external: true 
    external_access: 
    driver: overlay 
    internal: false 

networks: 
    external_access: 
    driver: overlay 
    internal: false 
    backend: 
    driver: overlay 
    internal: true 
    swarm-multicast: 
    external: true 

を変更する必要がある現在は添付最後のネットワークは、ゲートウェイルートを引き継ぐようです。 ドライバ:オーバーレイ は内部:オープンあり、同じ

のための問題

https://github.com/moby/moby/issues/20179

関連する問題