Vagrant je mezi vývojáři a inženýry DevOps tak populární, protože mohou nadále používat stávající vývojářské nástroje (např. editory, prohlížeče, debuggery atd.) na svém místním systému. Vývojáři mohou například synchronizovat soubory z hostujícího počítače do místního systému, použít svůj oblíbený editor k úpravě těchto souborů a nakonec je synchronizovat zpět do hostujícího počítače. Podobně, pokud vytvořili webovou aplikaci na virtuálním počítači, mohou k ní přistupovat a testovat ji z webového prohlížeče svého místního systému. V této příručce se podíváme, jak nakonfigurovat síť ve Vagrant tak, aby poskytovala přístup k počítači hosta z místního hostitelského systému.
Konfigurace sítě ve Vagrant
Vagrant nabízí následující tři možnosti sítě:
- Přesměrování portů
- Soukromá síť (síť pouze pro hostitele)
- Veřejná síť (přemostěná síť)
1. Konfigurace přesměrování portů
Ve výchozím nastavení můžeme přistupovat k virtuálním počítačům Vagrant přes ssh pomocí vagrant ssh
příkaz. Když přistupujeme k virtuálnímu počítači přes SSH, Vagrant předá port 22 z hostujícího počítače na otevřený port v hostitelském počítači. Toto se nazývá přesměrování portů. Vagrant automaticky zpracovává tento proces přesměrování portů bez jakéhokoli zásahu uživatele. Můžete také přeposlat konkrétní port dle vašeho výběru. Pokud jste například přeposlali port 80 v hostujícím počítači na port 8080 na hostitelském počítači pak můžete přistupovat k webovému serveru přechodem na http://localhost:8080 na vašem hostitelském počítači.
Přesměrování portů lze nakonfigurovat ve "Vagrantfile". Přejděte do adresáře svého projektu Vagrant a otevřete Vagrantfile ve svém oblíbeném editoru.
Najděte následující řádek:
Vagrant.configure("2") do |config| [...] # config.vm.network "forwarded_port", guest: 80, host: 8080 end
Odkomentujte jej a definujte, které porty kam přeposlat. V tomto příkladu přesměrovávám port 80 v hostu na port 8080 v hostiteli.
Vagrant.configure("2") do |config| [...] config.vm.network "forwarded_port", guest: 80, host: 8080 end
Nyní restartujte počítač Vagrant s aktualizovaným souborem Vagrant:
$ vagrant reload --provision
Ve výstupu uvidíte, že přesměrování portů je nakonfigurováno:
==> default: Halting domain… ==> default: Starting domain. ==> default: Waiting for domain to get an IP address… ==> default: Waiting for SSH to become available… ==> default: Creating shared folders metadata… ==> default: Forwarding ports… ==> default: 80 (guest) => 8080 (host) (adapter eth0) ==> default: Rsyncing folder: /home/sk/myvagrants/ => /vagrant
Můžete také zničit virtuální počítač a znovu jej spustit pomocí aktualizovaného souboru Vagrantfile:
$ vagrant destroy <VM-name>
$ vagrant up
Nyní SSH do hostujícího počítače pomocí příkazu:
$ vagrant ssh
Nainstalujte si do něj webový server Apache. Pokud je virtuální počítač založený na Deb, spusťte:
$ sudo apt install apache2
Pokud se jedná o systém založený na RHEL, spusťte toto:
$ sudo yum install httpd
Spusťte službu Apache:
$ sudo systemctl enable --now httpd
Nyní otevřete webový prohlížeč ve svém hostitelském systému a přejděte na http://localhost:8080 adresu z vašeho prohlížeče. Ve vašem prohlížeči uvidíte testovací stránku Apache.
I když k webovému serveru přistupujeme pomocí URL http://localhost:8080 v hostitelském systému není obsluhován z místního webového serveru. Skutečný web (tj. testovací stránka Apache) je obsluhován z virtuálního počítače hosta a všechna skutečná síťová data jsou odesílána hostovi.
1.1. Co když port 8080 používá jiná aplikace?
V našem předchozím příkladu jsme předali port 80 z hosta na port 8080 v hostiteli. Jinými slovy, provoz odeslaný na port 8080 je ve skutečnosti přesměrován na port 80 na počítači hosta. Co když port 8080 aktuálně používá nějaká jiná aplikace? Ke kolizi portů dochází při spuštění více virtuálních počítačů. Můžete nevědomky přeposlat již použitý port. Bez obav! Vagrant má vestavěnou podporu pro detekci kolizí portů. Pokud je port již používán jinou aplikací, Vagrant to oznámí ve výstupu, takže můžete port buď uvolnit, nebo použít jiný port.
Vagrant je také dostatečně chytrý, aby automaticky našel a opravoval kolize portů. Pokud zjistí, že port je v kolizi s jiným portem, automaticky to opraví tím, že pro vás použije jakýkoli jiný nepoužívaný port.
Chcete-li povolit automatické opravy, přidejte další možnost auto_correct: true
v definici přesměrování portů ve vašem Vagrantfile.
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true
Ve výchozím nastavení Vagrant vybere port automatické opravy mezi portem 2200 a port 2250 rozsah. Můžete si také vybrat svůj vlastní rozsah definováním následujícího řádku ve Vagrantfile, jak je uvedeno níže.
config.vm.usable_port_range = (2200..2250)
Restartujte počítač Vagrant, aby se změny projevily:
1.2. Změnit síťový protokol
Ve výchozím nastavení používá Vagrant protokol TCP pro přesměrování portů. Pokud však chcete předávat pakety UDP, můžete použít protokol UDP.
Chcete-li použít port UDP, přidejte do souboru Vagrantfile následující definici:
config.vm.network "forwarded_port", guest: 80, host: 8080,auto_correct:
true
protocol: "udp"
Chcete-li použít změny, restartujte Vagrant VM.
2. Konfigurace privátní sítě
V privátní síti nebo síti pouze pro hostitele se vytvoří síťové připojení mezi hostitelským systémem a virtuálními počítači v hostitelském systému. Privátní síť je vytvořena pomocí virtuálního síťového adaptéru, který je viditelný pro hostitelský operační systém. Ostatní systémy v síti nemohou komunikovat s virtuálními počítači. V rámci hostitelského systému jsou povoleny všechny síťové operace.
Privátní síť může také fungovat jako DHCP server a má svou vlastní podsíť. Každý virtuální počítač v privátní síti získá IP adresu z tohoto IP prostoru. Můžeme tedy přistupovat k virtuálním počítačům přímo pomocí IP z hostitelského systému.
Chcete-li nakonfigurovat soukromou síť nebo síť pouze pro hostitele ve Vagrantu se statickou IP adresou, otevřete soubor Vagrantfile, najděte následující řádek a odkomentujte jej.
config.vm.network "private_network", ip: "192.168.121.60"
Zde 192.168.121.60 je IP adresa virtuálního počítače. Nahraďte to svou vlastní IP.
Restartujte virtuální počítač, aby se změny projevily.
Pokud chcete nastavit IP adresu automaticky z DHCP, upravte definici privátní sítě jako níže:
config.vm.network "private_network", type: "dhcp"
Virtuálnímu počítači bude přidělena náhodná IP adresa. Abyste mohli najít IP virtuálního počítače, musíte do něj vložit SSH pomocí vagrant ssh
a poté vyhledejte jeho IP adresu pomocí ip
příkaz.
3. Konfigurace veřejné sítě
Ve veřejných nebo přemostěných sítích budou všechny virtuální počítače ve stejné síti jako váš hostitelský počítač. Každý virtuální počítač obdrží svou vlastní IP adresu ze serveru DHCP (pokud je v místní síti k dispozici). Všechny virtuální počítače se tedy budou chovat jako další fyzický systém v síti a mohou komunikovat s jakýmkoli systémem v síti.
Chcete-li nakonfigurovat veřejné nebo přemostěné sítě, upravte soubor Vagrantfile, najděte následující řádek a zrušte jeho komentář:
config.vm.network "public_network"
Uložte a zavřete soubor. Chcete-li použít změny, restartujte virtuální počítač. VM automaticky získá IP adresu.
Pokud chcete nastavit statickou IP, stačí upravit definici sítě jako níže:
config.vm.network "public_network", ip: "192.168.121.61"
4. Nastavit název hostitele
Název hostitele můžete definovat pomocí config.vm.hostname
nastavení ve Vagrantfile.
Upravte Vagrantfile ve svém preferovaném editoru a přidejte/upravte následující řádek:
config.vm.hostname = "myhost.ostechnix.example"
Uložte a zavřete soubor. Výše uvedená definice přidá myhost.ostechnix.example
řádek v /etc/hosts
soubor.
Restartujte Vagrant VM, aby se změny projevily.
Ověřte, zda se název hostitele změnil:
[[email protected] ~]$ hostname -f
myhost.osechnix.example
Můžete také přímo zkontrolovat obsah /etc/hosts
soubor.
$ cat /etc/hosts
Ukázkový výstup:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.1.1 myhost.osechnix.example myhost
5. Povolit více možností sítě
Každá síťová možnost má své vlastní výhody a nevýhody. Z nějakého důvodu možná budete chtít nakonfigurovat všechny možnosti sítě na jeden virtuální počítač. Pokud ano, Vagrant má schopnost povolit více síťových možností. Jediné, co musíte udělat, je definovat možnosti sítě jednu po druhé ve Vagrantfile, jak je uvedeno níže:
config.vm.hostname = "myhost.ostechnix.example" config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true config.vm.network "private_network", ip: "192.168.121.60"."
Když vytvoříte nový virtuální počítač pomocí tohoto souboru Vagrantfile, vagrant vytvoří virtuální počítač s následujícími podrobnostmi o síti:
- nastavit název hostitele jako myhost.ostechnix.example
- nakonfigurujte přesměrování portů
- nakonfigurujte privátní se statickou IP 192.168.121.60
Kromě konfigurace více typů sítí můžeme také definovat více sítí. Můžete například definovat více sítí pouze pro hostitele s různými IP adresami, jak je uvedeno níže.
config.vm.network "private_network", ip: "192.168.121.60" config.vm.network "private_network", ip: "192.168.121.61"
Snad to pomůže. V této fázi můžete získat základní představu o typech sítí Vagrant a jak konfigurovat sítě ve Vagrant z příkazového řádku. Je toho ještě co učit. Doporučuji vám nahlédnout do oficiální dokumentace Vagrant pro podrobnější konfiguraci.