OmniOS - Zones

Zones - kontenery lub uściślając: lekka wirtualizacja, jest to technologia pozwalająca na uruchomienie odseparowanej instancji systemu gospodarza w ściśle ograniczonym i kontrolowanym środowisku. OmniOS pozwala obecnie utworzyć tylko duże kontenery ("Whole Root zone") wymagające stworzenia pełnej minimalnej kopii plików systemowych (w odróżnieniu od małych kontenerów, które pozwalają współdzielić pewne zasoby plikowe ze środowiskiem strefy globalnej.

Przykład utworzenia kontenera używanego przeze mnie jako środowisko do budowy oprogramowania:

Zaczynam od utworzenia dedykowanego interfejsu sieciowego dla kontenera.

root@test-builder:~# dladm show-vnic
LINK         OVER         SPEED  MACADDRESS        MACADDRTYPE         VID
vnic0        rge0         100    2:8:20:dd:a5:25   random              0
myzone0      rge0         100    2:8:20:27:74:79   random              0
myzone1      rge0         100    2:8:20:bd:ad:91   random              0
printer0     rge0         100    2:8:20:af:cc:46   random              0
root@test-builder:~# _
root@test-builder:~# dladm create-vnic -l rge0 myzone2

Następnie rozpoczynam konfigurację kontenera:

root@test-builder:~# zonecfg -z pkgsrc64
pkgsrc64: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:pkgsrc64> create
zonecfg:pkgsrc64> set zonepath=/tank/zones/pkgsrc64
zonecfg:pkgsrc64> set autoboot=true
zonecfg:pkgsrc64> set limitpriv=default,dtrace_proc,dtrace_user
zonecfg:pkgsrc64> set ip-type=exclusive
zonecfg:pkgsrc64> add net
zonecfg:pkgsrc64:net> set physical=myzone2
zonecfg:pkgsrc64:net> end
zonecfg:pkgsrc64> verify
zonecfg:pkgsrc64> commit
zonecfg:pkgsrc64> exit
root@test-builder:~# _

Możliwości konfiguracji tworzonego kontenera są rozbudowane i odsyłam po szczegóły do podręcznika dla polecenia zonecfg, jednak na moje potrzeby powyższe minimum będzie wystarczające. Po stworzeniu konfiguracji nowego kontenera możemy wykonać polecenie jego instalacji:

root@test-builder:~# zoneadm -z pkgsrc64 install
A ZFS file system has been created for this zone.
   Publisher: Using omnios (http://pkg.omniti.com/omnios/release/ ).
   Publisher: Using ms.omniti.com (http://pkg.omniti.com/omniti-ms/).
   Publisher: Using perl.omniti.com (http://pkg.omniti.com/omniti-perl/).
       Image: Preparing at /tank/zones/pkgsrc64/root.
       Cache: Using /var/pkg/publisher.
Sanity Check: Looking for 'entire' incorporation.
  Installing: Packages (output follows)
           Packages to install: 379
       Create boot environment:  No
Create backup boot environment:  No
            Services to change:   5
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                              379/379 39407/39407  251.0/251.0
PHASE                                        ACTIONS
Install Phase                            57108/57108
PHASE                                          ITEMS
Package State Update Phase                   379/379
Image State Update Phase                         2/2
        Note: Man pages can be obtained by installing pkg:/system/manual
Postinstall: Copying SMF seed repository ... done.
        Done: Installation completed in 177,945 seconds.   Next Steps: Boot the zone, then log into the zone console (zlogin -C)
              to complete the configuration process.
root@test-builder:~# _

Uruchamiam stworzony kontener

root@test-builder:~# zoneadm -z pkgsrc64 boot

W tym momencie możemy zalogować się już do nowego środowiska. Jego stan jest taki, jak po nowej instalacji systemu, więc będzie konieczne wprowadzenie podstawowej konfiguracji.

root@test-builder:~# zlogin pkgsrc64
[Connected to zone 'pkgsrc64' pts/3]
OmniOS 5.11 006 June 2014
root@pkgsrc64:~# _
root@pkgsrc64:~# passwd
passwd: Changing password for root
New Password:
Re-enter new Password:
passwd: password successfully changed for root
root@pkgsrc64:~# _

Tworzenie kontenera rozpocząłem od stworzenia dedykowanego interfejsu sieciowego, by uruchomiona instancja systemu była widziana w sieci jako odrębny host. W tym celu konfiguruję w kontenerze unikatowy numer IP z używanej puli:

root@pkgsrc64:~# dladm show-phys
root@pkgsrc64:~# dladm show-vnic
LINK         OVER         SPEED  MACADDRESS        MACADDRTYPE         VID
myzone2      ?            100    2:8:20:98:5:c1    random              0
root@pkgsrc64:~# _
root@pkgsrc64:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
lo0/v6            static   ok           ::1/128
root@pkgsrc64:~# _
root@pkgsrc64:~# ipadm create-if myzone2
root@pkgsrc64:~# ipadm create-addr -T static -a 192.168.88.13/24 myzone2/v4static
root@pkgsrc64:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
myzone2/v4static  static   ok           192.168.88.13/24
lo0/v6            static   ok           ::1/128
root@pkgsrc64:~# _
root@pkgsrc64:~# route -p add default 192.168.88.1
add net default: gateway 192.168.88.1
add persistent net default: gateway 192.168.88.1
root@pkgsrc64:~# echo "nameserver 192.168.88.1" >> /etc/resolv.conf
root@pkgsrc64:~# cp /etc/nsswitch.conf{,.bak}
root@pkgsrc64:~# cp /etc/nsswitch.{dns,conf}
root@pkgsrc64:~# ping wp.pl
wp.pl is alive
root@pkgsrc64:~# _

Mamy działające środowisko w oparciu o które można uruchamiać serwisy sieciowe lub używać je do dowolnych innych celów, w szczególności gdy chodzi nam o podniesienie poziomu bezpieczeństwa serwera i odseparowanie środowiska usługowego od systemu gospodarza.


Skomentuj ten artykuł
 Odśiweż, jeśli nie widzisz poprawnie kodu
wpisz kod weryfikacyjny(pola wymagane)

Cookies allow us to offer our services. By using our services, you accept our use of cookies.  Accept  More information