Adresse IP publique pour le conteneur LXC


26

Ok, donc je veux savoir comment faire du réseautage sur des conteneurs LXC. Pas seulement le genre d'informations vagues que vous obtenez des autres sites Web, mais un véritable guide pour les débutants pour les faire fonctionner .. Étant donné que la plupart des exemples sont essentiellement configurés pour que les gens puissent les tester, je veux exécuter un service sur un ... comme un serveur web par exemple.

J'utilise Ubuntu 12.04 LTS et j'ai installé LXC et je peux créer, démarrer et arrêter un conteneur. Mon serveur a évidemment une adresse IP publique et je voudrais savoir comment configurer un conteneur pour qu'il puisse lui aussi avoir une adresse IP publique. Puisqu'il semble déjà y avoir un pont en place à partir de mon conteneur actuel, il semblerait que je dois donner aux conteneurs une plage DHCP publique pour qu'ils fonctionnent ou attribuer manuellement une adresse IP statique à mon conteneur.

Si je veux attribuer statiquement une IP au conteneur, comment faire? Dois-je apporter des modifications à ma configuration de pont sur l'hôte? Est-il vraiment préférable de le faire avec l'option MACVLAN?

Toute aide serait appréciée.


Je ne connais pas LXC, mais votre FAI typique ne vous donnera qu'une seule adresse IP publique. Avez-vous un package avec plusieurs IPS statiques?
wlraider70

Les adresses IP publiques ne sont pas le seul cas d'utilisation, nous voulons que 2 adresses IP publiques soient attribuées à nos conteneurs d'équilibrage de charge, mais nous voulons des adresses IP LAN dédiées dédiées à une variété d'autres services. De cette façon, si nous déplaçons des conteneurs sur un matériel différent, c'est aussi simple que de déplacer l'IP (le DNS ne fonctionne pas à cet égard pour certains des composants que nous utilisons)
David Parks

Réponses:


23

Mon approche suppose que votre serveur possède une seule carte réseau et que vous devez partager cette carte réseau entre l'hôte et les invités LXC. Cela implique l'utilisation d'un pont. Le pont possède et gère eth0. L'hôte configure maintenant son propre réseau sur br0au lieu de eth0. Les invités LXC sont configurés pour se connecter au pont.

  1. Sur l'hôte, sudo apt-get install bridge-utils.

  2. Sur l'hôte, remplacez eth0par un pont:

    C'est dangereux. Se tromper et vous pourriez être verrouillé hors de votre serveur. Assurez-vous d'avoir une connexion locale activée et que l'accès à la console locale fonctionne, afin que vous puissiez annuler cette modification en cas de problème.

    Dans /etc/network/interfaces:

    1. Remplacez auto eth0par auto br0.
    2. Remplacer:

      iface eth0 inet dhcp
      

      avec:

      iface br0 inet dhcp
          bridge_ports eth0
      

      Si vous aviez une configuration réseau statique, vous remplaceriez alors:

      iface eth0 inet static
          address ...
          netmask ...
          gateway ...
          etc.
      

      avec:

      iface br0 inet static
          bridge_ports eth0
          address ...
          netmask ...
          gateway ...
          etc.
      

      Vous êtes juste changer eth0pour br0et en ajoutant la bridge_ports eth0ligne.

    3. Redémarrez l'hôte. Si vous faisiez cela localement, alors en cours d'exécution sudo ifdown eth0avant de commencer, et sudo ifup br0ensuite le ferait également. Notez que le pont peut prendre un peu de temps à se lever, alors donnez-lui cinq minutes après le redémarrage avant de supposer que tout est perdu.

  3. Pour déplacer un conteneur LXC nommé donné vers une IP publique:

    1. Arrêtez le conteneur.
    2. Sur l'hôte, modifiez et changez en ./var/lib/lxc/container_name/configlxc.network.linkbr0
    3. Sur l'hôte, modifiez et configurez votre IP publique comme vous le feriez normalement (DHCP ou une configuration statique selon les besoins). Notez que l'interface est toujours appelée du point de vue du conteneur./var/lib/lxc/container_name/rootfs/etc/network/interfaceseth0
    4. Redémarrez le conteneur.
  4. Pour modifier la valeur par défaut des nouveaux conteneurs LXC, modifiez /etc/lxc/default.confsur l'hôte et changez lxc.network.linken br0.

  5. Si vous n'avez pas du tout besoin du pont NAT fourni par LXC (c'est-à-dire que tous vos conteneurs utiliseront le nouveau pont à la place), alors sur l'hôte, éditez /etc/default/lxcet changez USE_LXC_BRIDGEen "false", puis sur l'hôte sudo service lxc restart.


Merci! Il y a beaucoup de questions similaires. Mais, cette réponse m'a finalement aidé à faire fonctionner les choses.
Mausy5043

1

Robie, merci beaucoup d'avoir posté cette réponse, j'ai taré mes cheveux en essayant de faire avancer les choses et cela a été la seule méthode qui a fonctionné!

J'ai pensé que je devrais mentionner quelques choses que j'ai découvertes afin d'aider à clarifier les instructions pour les autres administrateurs.

Mon hôte avait plusieurs alias IP statiques assignés à eth0 sur l'invité, par exemple:

iface eth0:1 inet static
  address 5.5.5.5
  netmask 255.255.255.5
  gateway 5.5.5.1
etc.

Maintenant, nous ne voulons pas configurer br0 de la même manière, nous voulons juste une adresse IP sans alias comme Robie indiqué ci-dessus.

Disons donc que vous voulez que 5.5.5.5 soit assigné au conteneur debian8.

Modifiez /var/lib/lxc/debian8/etc/network/interfaceset ajoutez:

iface eth0 inet static 
      address 5.5.5.5
      netmask 255.255.255.5
      gateway 5.5.5.1
    etc.

Exécutez ensuite cette commande: route add default gw <gateway-ip, in my case 5.5.5.1>

Après cela, redémarrez le conteneur et tout devrait enfin fonctionner! :)


1

J'ai eu le même problème et j'ai cette solution (rapide et sale).

server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24

container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28  (public ip address on eth0 alias)

Sur le serveur: route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0

En outre, si nécessaire, ajoutez une route aux routeurs en amont.

Probablement pas la meilleure solution mais cela ne demande pas beaucoup d'efforts! À votre santé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.