2014-10-21 20 views
9

Mam konfigurację Vagrant z wieloma maszynami. Korzystając z NFS i private_network mogę uzyskać wszystko, co potrzebne do pracy (Drupal, PHP itp.), Z WYJĄTKIEM pozwalającym komuś na korytarzu na odwiedzenie aplikacji sieciowej uruchomionej na mojej maszynie wirtualnej. Rozumiem, że private_network uniemożliwia połączenie się z maszynami wirtualnymi ze świata zewnętrznego.Wystaw wirtualną maszynę Vagrant na sieć podczas korzystania z NFS i private_network

Czy istnieje sposób na utworzenie sieci prywatnej i publicznej, aby wszystkie systemy VMS Z WYJĄTKIEM równoważnika obciążenia były prywatne, a system równoważenia obciążenia jest dostępny za pośrednictwem adresu IP hosta?

hosts = { 
    "wloadlocal" => "192.168.33.10", 
    "wweblocal1" => "192.168.33.11", 
    "wweblocal2" => "192.168.33.12", 
    "wwhlocal" => "192.168.33.13", 
} 

Vagrant.configure("2") do |config| 
    hosts.each do |name, ip| 
    config.vm.define name do |machine| 
     machine.vm.box = "precise32" 
     machine.vm.box_url = "http://files.vagrantup.com/precise32.box" 
     machine.vm.hostname = "%s.example.org" % name 
     machine.vm.network :private_network, ip: ip 
     machine.vm.network "public_network" 
     machine.vm.provider "virtualbox" do |v| 
      v.name = name 
      v.customize ["modifyvm", :id, "--memory", 200] 
     end 
     if name == "wloadlocal" 
     machine.vm.network "forwarded_port", guest: 80, host: 8880 
     end 
    end 
    #sync folders 
    config.vm.synced_folder "~/data", "/data", type: "nfs" 
    end 
end 

Edit # 1

Na Vagrant na NFS doc page stwierdza, że ​​podczas korzystania z VirtualBox i NFS należy użyć private_network:

Jeśli używasz dostawcy VirtualBox, będziesz również potrzebować aby upewnić się, że masz masz skonfigurowaną sieć prywatną. Wynika to z ograniczenia wbudowanej sieci VirtualBox. W VMware nie potrzebujesz tego.

Potrzebuję używać NFS z powodów związanych z wydajnością, ale chciałbym również w razie potrzeby móc udostępniać aplikacje działające na maszynach wirtualnych w sieci lokalnej. czy to możliwe?

+10

P.S. Dla wszystkich użytkowników: Vagrant jest narzędziem _dev_, nie jest narzędziem sieciowym/sysadmin. Jego celem jest umożliwienie programistom skonfigurowania receptur VM, które działają identycznie dla wszystkich programistów w zespole. –

+5

Podczas gdy Vagrant ma interfejs API, konfigurowanie sieci wewnętrznej w taki sposób, jaki chce OP, może być lepiej dopasowane do [su]. Gdy ta konfiguracja jest znana, umieszczenie jej w kodzie powinno być łatwe. W związku z pytaniem dotyczącym PO nie sądzę, aby można było stworzyć dwa rodzaje sieci wewnętrznie. –

+2

Myślę, że to podskakiwanie między witrynami jest po prostu głupie. Niech to będzie pytanie. W przypadku Superużytkowników nie jest to konfiguracja Vagrant. – eis

Odpowiedz

2

Najprostszy sposób, jaki mogłem znaleźć, to użycie wielu sieci wymienionych w jednym z komentarzy. Więc mój config kończy się wyglądać jak ten:

config.vm.define :host01 do |host01| 
    postgres01.vm.network :private_network, ip: '192.168.37.2' 
    config.vm.network "public_network" 
    host01.vm.hostname = 'host01' 
    configure_vm(host01) 
    end 

Potem zrobiłem vagrant ssh host01 zajrzeć do publicznego adresu IP, który zakończył się 192.168.0.102 w mojej sieci. Teraz mogę uzyskać dostęp do tego adresu IP z mojego hosta. Uwaga: do korzystania z funkcji publicznej sieci jest trochę caveats.

Powiązane problemy