5 votes

connexion d'un cont cont cont cont d docker à un réseau local

Ce que j'essaie de faire

J'essaie de rendre mon conteneur disponible pour le réseau à tous les appareils, pas seulement à l'hôte Docker.

Information

  • Mon sous-réseau est le 9.158.143.0/24.
  • ma passerelle est 9.1158.143.254
  • mon IP d'hôte docker est 9.158.143.52 interface primaire (ens160)
  • et l'IP de mon conteneur est 9.158.143.65
  • docker-pid est l'identifiant du processus docker
  • l'identifiant du docker est l'ip du docker

Ce que j'essaie de faire

J'essaie de rendre mon conteneur disponible pour le réseau à tous les appareils, pas seulement à l'hôte Docker.

Je veux que la configuration du docker soit telle que l'on puisse accéder au docker (ssh dans mon cas) de n'importe où dans mon réseau.

Étapes suivies jusqu'à présent

  1. Commencez par créer un nouveau périphérique de pont.

    • brctl addbr br-em1

    • ip link set br-em1 up

  2. ajouter ce dispositif à votre pont

    • brctl addif br-em1 ens160
  3. Configurer le pont avec l'adresse qui appartenait à ens160

    • ip addr del 9.158.143.52/24 dev ens160

    • ip addr add 9.158.143.52/24 dev br-em1

  4. déplacer la route par défaut vers le pont

    • ip route del default
    • ip route add default via 9.158.143.254 dev br-em1

Jusqu'à ce point, tout fonctionne. L'hôte docker a une connectivité réseau.

  1. docker run -itd --name web ubuntu

  2. Créer une paire d'interfaces veth :

    • ip link add web-int type veth peer name web-ext
  3. brctl addif br-em1 web-ext

  4. Et ajoutez l'interface web-int à l'espace de nom du conteneur :

    • ip link set netns $(docker-pid web) dev web-int
  5. nsenter -t $(docker-pid web) -n ip link set web-int up

  6. nsenter -t $(docker-pid web) -n ip addr add 9.158.143.65/24 dev web-int

Jusqu'à présent, veth est créé dans un conteneur docker et Internet fonctionne dans le conteneur.

  1. nsenter -t $(docker-pid web) -n ip route del default

  2. nsenter -t $(docker-pid web) -n ip route add default via 9.158.143.254 dev web-int

Le problème

Ce sont les étapes suivies. Après les 2 dernières étapes, l'Internet cesse de fonctionner dans le conteneur. Je ne suis pas capable d'envoyer un ping à la machine hôte du docker à partir d'une autre machine du réseau (qui fonctionnait auparavant).

Y a-t-il une règle iptables qui doit être ajoutée en plus de ces étapes ? Si oui, veuillez m'aider.

PS : mon ip de docker0 est 172.17.0.1 Lien utilisé : http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/ (avec des dispositifs de pontage linux)

L'image Ubuntu utilisée a un service ssh opérationnel.

1voto

nex3 Points 4309

L'approche que j'ai adoptée lors de la mise en place de quelque chose de similaire était d'attribuer statiquement des adresses IP à chaque conteneur. J'ai ensuite "empilé" les adresses IP comme IP secondaires sur l'interface du pont, vmbr0 .

Ma configuration réseau :

$ ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:22:15:91:XX:XX brd ff:ff:ff:ff:ff:ff
    inet6 fe80::222:15ff:fe91:XXXX/64 scope link
       valid_lft forever preferred_lft forever
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:22:15:91:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global vmbr0
    inet 192.168.1.101/24 scope global secondary vmbr0
    inet 192.168.1.103/24 scope global secondary vmbr0
    inet6 fe80::222:15ff:fe91:c12d/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0

J'ai ajouté ces IPs secondaires comme ça :

$ ip addr add 192.168.1.101/24 dev vmbr0
$ ip addr add 192.168.1.101/24 dev vmbr0

Je ferais fonctionner mes conteneurs comme ça :

$ docker run --name='bind' -d \
    -p 192.168.1.101:53:53/udp \
    -p 192.168.1.101:10000:10000 sameersbn/bind:latest

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X