{"id":3362,"date":"2017-05-12T08:53:02","date_gmt":"2017-05-12T06:53:02","guid":{"rendered":"http:\/\/vm.piszki.pl\/?p=3362"},"modified":"2019-01-03T09:50:53","modified_gmt":"2019-01-03T08:50:53","slug":"cloudstack-instalacja-i-konfiguracja-czesc-2-przygotowanie-sieci","status":"publish","type":"post","link":"https:\/\/vm.piszki.pl\/?p=3362","title":{"rendered":"CloudStack &ndash; instalacja i konfiguracja, cz\u0119\u015b\u0107 2, przygotowanie sieci."},"content":{"rendered":"<p align=\"justify\">Wydawa\u0107 by si\u0119 mog\u0142o, \u017ce zainstalowanie CloudStack to nic trudnego, i tak jest. Trzeba jednak dok\u0142adnie zaplanowa\u0107 jak b\u0119dziemy u\u017cywa\u0107 sieci i przestrzeni dyskowej i odpowiednio skonfigurowa\u0107 hosta lub hosty do pe\u0142nienia funkcji serwera zarz\u0105dczego i wirtualizatora. W tym po\u015bcie om\u00f3wi\u0119 dok\u0142adnie konfiguracj\u0119 sieci na poziomie serwera, pierwsza jest oparta na mostkach a druga na OpenvSwitch (obydwie wykluczaj\u0105 si\u0119 wzajemnie). Systemem operacyjnym jest najnowszy CentOS 7 (w wersji minimal install), na czas instalacji i konfiguracji proponuj\u0119 wy\u0142\u0105czy\u0107 SELinux i FirewallD (do ustawie\u0144 zapory jeszcze powr\u00f3cimy). Na potrzeby tego artyku\u0142u za\u0142o\u017cy\u0142em \u017ce serwer jest wyposa\u017cony w minimum dwie karty sieciowe, nie b\u0119dziemy u\u017cywa\u0107 LACP, u\u017cyjemy jednej sieci domy\u015blnej bez tagowania (VLAN1) i kilku sieci tagowanych. W przypadku braku w waszej domowej infrastrukturze sieci tagowanej mo\u017cecie u\u017cy\u0107 sieci nie tagowanych do wszystkiego, modyfikuj\u0105c odpowiednio konfiguracj\u0119.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/br6.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;\" title=\"br6\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/br6_thumb.png\" alt=\"br6\" width=\"256\" height=\"439\" border=\"0\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p align=\"justify\">W przypadku CloudStack ca\u0142o\u015bci\u0105 procesu konfiguracji sieci po stronie KVM i systemu operacyjnego (np. w trakcie uruchamiania VM) zarz\u0105dza CloudStack Agent instalowany na ka\u017cdym ho\u015bcie. Konfiguracja ta wymaga podania nazw dla sieci rozr\u00f3\u017cnianych na poziomie CloudStack. Sieci te to <strong>management, public, guest<\/strong> i opcjonalnie storage. Nazwy sieci musz\u0105 odpowiada\u0107 nazwie cloudbrN, gdzie N to numer (nie musi by\u0107 kolejny), standardowy schemat to:<\/p>\n<p>cloudbr0 \u2013 public<\/p>\n<p>cloudbr1 \u2013 mgmt<\/p>\n<p>cloudbr2 \u2013 guest<\/p>\n<p align=\"justify\">Wszystkie sieci mog\u0105 wsp\u00f3\u0142dzieli\u0107 jeden mostek podpi\u0119ty do interfejsu zsumowanego LACP (bond), panuje tutaj dowolno\u015b\u0107 konfiguracji. Sieci i ich nazwy definiujemy na poziomie <a href=\"https:\/\/vm.piszki.pl\/cloudstack-instalacja-i-konfiguracja-czesc-1-koncepcja-i-terminologia\/\">Zony<\/a> w sekcji sieci fizyczne (b\u0119dzie o tym dalej). Wygl\u0105da to tak (KVM traffic label):<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/br3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;\" title=\"br3\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/br3_thumb.png\" alt=\"br3\" width=\"458\" height=\"519\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Nazwa sieci cloudbrN jest jednocze\u015bnie nazw\u0105 mostka sieciowego (ethernet bridge), nazwy te musz\u0105 by\u0107 to\u017csame (CloudStack Agent &lt;-&gt; host) i sp\u00f3jne na przestrzeni ca\u0142ego klastra. W pliku konfiguracyjnym agenta sieci s\u0105 precyzyjnie opisane. Interfejs sieciowy cloudbrN musi by\u0107 zawsze podniesiony (UP), je\u015bli przejdzie w stan zatrzymania (Down), przestanie dzia\u0142a\u0107 ca\u0142a (np. public) sie\u0107. Liczba zdefiniowanych sieci na poziomie CloudStack nie przek\u0142ada si\u0119 wprost na liczb\u0119 interfejs\u00f3w cloudbrN na poziomie hosta. Na poziomie hosta tworzone s\u0105 dynamicznie interfejsy vnet zgodnie z potrzebami. Zdefiniowane na poziomie hosta interfejsy nie musz\u0105 mie\u0107 przypisanych adres\u00f3w IP ale mog\u0105, sie\u0107 management musi mie\u0107 przypisany adres IP (z wiadomych wzgl\u0119d\u00f3w). Temat stworzenia mostka sieciowego jest prosty, om\u00f3wi\u0142em go w tym <a href=\"https:\/\/vm.piszki.pl\/serwer-kvm-wewnatrz-serwera-vmware-esxi\/\">artykule<\/a> (wystarczy jeden mostek i jedna sie\u0107 lub tyle mostk\u00f3w ile potrzebujemy). Tak wygl\u0105daj\u0105 interfejsy sieciowe na poziomie hosta z wykorzystaniem mostk\u00f3w sieciowych przy uruchomionych VM (cloud0 i virbr0 s\u0105 tworzone automatycznie) :<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/br2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;\" title=\"br2\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/br2_thumb.png\" alt=\"br2\" width=\"572\" height=\"124\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Tutaj zajmiemy si\u0119 sieci\u0105 opart\u0105 na OpenvSwitch (konfiguracja sugerowana i zgodna z nie tagowan\u0105 sieci\u0105). Niestety nie ma pakiet\u00f3w z OpenvSwitch na CentOS 7, musimy je przygotowa\u0107 sami, na pocz\u0105tek instalujemy wymagane pakiety (ca\u0142o\u015b\u0107 procesu zajmuje 2 minuty):<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;\" title=\"3\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/3_thumb.png\" alt=\"3\" width=\"610\" height=\"320\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">W tym momencie mamy uruchomiony poprawnie OpenvSwitch, zanim przeprowadzimy jego konfiguracj\u0119, nale\u017cy przygotowa\u0107 pliki interfejs\u00f3w sieciowych i wgra\u0107 je do \/etc\/sysconfig\/network-scripts. Dla ka\u017cdej karty sieciowej tworzymy plik ifcfg-ens160 z zawarto\u015bci\u0105 (gdzie ens160 to oczywi\u015bcie przyk\u0142ad):<\/p>\n<pre>NAME=ens160\r\nDEVICE=ens160\r\nONBOOT=yes\r\nUSERCTL=no\r\nBOOTPROTO=static\r\nPEERDNS=no\r\nIPV6INIT=no\r\nIPV6_AUTOCONF=no\r\nDEVICETYPE=ovs\r\nTYPE=OVSPort\r\nOVS_BRIDGE=br0\r\nMTU=9000\r\ncheck_link_down() {\r\nreturn 1;\r\n}<\/pre>\n<p align=\"justify\">Jak wida\u0107, w moim przypadku mamy MTU ustawione na 9000, je\u015bli w Waszej sieci nie ma w\u0142\u0105czonych Jumbo Frame to t\u0119 lini\u0119 wystarczy skasowa\u0107.<\/p>\n<p align=\"justify\"><del>Ja stworzy\u0142em interfejs zsumowany Bond typu Aktywny-Pasywny (Backup) dla dw\u00f3ch kart sieciowych ens3s0 i ens5s0, plik o nazwie ifcfg-bond0:<\/del><\/p>\n<p><del>DEVICE=bond0<\/del><br \/>\n<del>ONBOOT=yes<\/del><br \/>\n<del>DEVICETYPE=ovs<\/del><br \/>\n<del>TYPE=OVSBond<\/del><br \/>\n<del>OVS_BRIDGE=br0<\/del><br \/>\n<del>BOOTPROTO=none<\/del><br \/>\n<del>BOND_IFACES=&#8221;ens3s0 ens5s0&#8243;<\/del><br \/>\n<del>OVS_OPTIONS=&#8221;bond_mode=active-backup lacp=off other_config:bond-detect-mode=miimon other_config:bond-miimon-interval=100&#8243;<\/del><br \/>\n<del>HOTPLUG=no<\/del><\/p>\n<p align=\"justify\">Powy\u017csze zostawiam jako przyk\u0142ad, w mi\u0119dzyczasie musia\u0142em przej\u015b\u0107 z fizycznych serwer\u00f3w na maszyny wirtualne (zagnie\u017cd\u017cone KVM w ESXi) i aktualizuj\u0119 sie\u0107 pod nie aby ca\u0142o\u015b\u0107 artyku\u0142\u00f3w by\u0142a sp\u00f3jna. Wirtualne hosty s\u0105 pod\u0142\u0105czone pod port grup\u0119 typu Trunk, wy\u017cej wymienione informacje nie ulegaj\u0105 zmianie.<\/p>\n<p align=\"justify\">Tworzymy teraz pliki dla interfejs\u00f3w cloudbrN, ka\u017cdy na innym VLAN (&#8222;br0 70&#8221;), oczywi\u015bcie wystarczy usun\u0105\u0107 VLAN i MTU aby dzia\u0142a\u0142o wszystko w sieci nie tagowanej z MTU 1500. Pliki ifcfg-cloudbrN:<\/p>\n<p align=\"justify\">DEVICE=cloudbr0<br \/>\nONBOOT=yes<br \/>\nDEVICETYPE=ovs<br \/>\nTYPE=OVSBridge<br \/>\nIPV6INIT=no<br \/>\nIPV6_AUTOCONF=no<br \/>\nBOOTPROTO=static<br \/>\nHOTPLUG=no<br \/>\nOVS_EXTRA=&#8221;br-set-external-id $DEVICE bridge-id $DEVICE&#8221;<br \/>\nOVS_OPTIONS=&#8221;br0 70&#8243;<br \/>\nIPADDR=192.168.70.71<br \/>\nNETMASK=255.255.255.0<br \/>\nDNS1=192.168.0.30<br \/>\nDNS2=192.168.0.200<br \/>\nMTU=9000<br \/>\nGATEWAY=192.168.70.1<\/p>\n<p align=\"justify\">DEVICE=cloudbr1<br \/>\nONBOOT=yes<br \/>\nDEVICETYPE=ovs<br \/>\nTYPE=OVSBridge<br \/>\nIPV6INIT=no<br \/>\nIPV6_AUTOCONF=no<br \/>\nBOOTPROTO=static<br \/>\nHOTPLUG=no<br \/>\nOVS_EXTRA=&#8221;br-set-external-id $DEVICE bridge-id $DEVICE&#8221;<br \/>\nOVS_OPTIONS=&#8221;br0 90&#8243;<br \/>\nMTU=9000<\/p>\n<p align=\"justify\">DEVICE=cloudbr2<br \/>\nONBOOT=yes<br \/>\nDEVICETYPE=ovs<br \/>\nTYPE=OVSBridge<br \/>\nIPV6INIT=no<br \/>\nIPV6_AUTOCONF=no<br \/>\nBOOTPROTO=static<br \/>\nHOTPLUG=no<br \/>\nOVS_EXTRA=&#8221;br-set-external-id $DEVICE bridge-id $DEVICE&#8221;<br \/>\nOVS_OPTIONS=&#8221;br0 30&#8243;<br \/>\nMTU=9000<\/p>\n<div class=\"post\">\n<div class=\"body\">\n<div id=\"4d40d526-d72b-4ff1-85bc-d8ab01e44bdc\" class=\"postBody\" style=\"margin: 4px 0px 0px; border-width: 0px; padding: 0px;\" contenteditable=\"true\">\n<p align=\"justify\">Pliki mostk\u00f3w g\u0142\u00f3wnych (br), ifcfg-br0:<\/p>\n<p>DEVICE=br0<br \/>\nONBOOT=yes<br \/>\nHOTPLUG=no<br \/>\nBOOTPROTO=none<br \/>\nDEVICETYPE=ovs<br \/>\nTYPE=OVSBridge<\/p>\n<p>Powy\u017csza konfiguracja dotyczy pojedynczej karty sieciowej w konfiguracji Trunk dla OpenvSwitch, ka\u017cdorazowy restart hosta powoduje za\u0142o\u017cenie ww interfejs\u00f3w od nowa w konfiguracji OvS.<\/p>\n<p>&nbsp;<\/p>\n<p><del>Teraz przyst\u0119pujemy do konfiguracji OpenvSwitch (moja konfiguracja na cztery karty) w konsoli (nie przez ssh):<\/del><\/p>\n<p><del>ovs-vsctl add-br br0<\/del><br \/>\n<del>ovs-vsctl add-bond br0 bond0 enp3s0 enp5s0<\/del><br \/>\n<del>ovs-vsctl add-br mgmt0 br0 50<\/del><br \/>\n<del>ovs-vsctl add-br cloudbr0 br0 0<\/del><br \/>\n<del>ovs-vsctl add-br cloudbr1 br0 61<\/del><br \/>\n<del>ovs-vsctl add-br br1<\/del><br \/>\n<del>ovs-vsctl add-bond br1 bond1 ens2f0 ens2f1<\/del><br \/>\n<del>ovs-vsctl add-br mgmt1 br1 60<\/del><\/p>\n<p><del>W ramach wyja\u015bnie\u0144, tworzymy mostek br0 do kt\u00f3rego podpinamy bond0, ustawiamy tagi VLAN, tworzymy mostki mgmt0 i cloudbrN. Wa\u017cne, \u017ce dla cloudbr0 ustawiamy tag 0, czyli natywny (na porcie mamy Trunk i domy\u015blny VLAN 60). Je\u015bli nie posiadasz sieci z VLAN to taka konfiguracja z cloudbr0 tag 0 zadzia\u0142a poprawnie dla wszystkich sieci (public, mgmt, guest) dok\u0142adnie tak samo jak w przypadku zwyk\u0142ego mostka sieciowego. Tak jak wspomina\u0142em wcze\u015bniej, standardowe mostki sieciowe wchodz\u0105 w interakcj\u0119 z OpenvSwitch, dlatego nale\u017cy je wy\u0142\u0105czy\u0107. Tworzymy plik \/etc\/modprobe.d\/blacklist.conf z zawarto\u015bci\u0105: blacklist bridge<\/del><\/p>\n<div class=\"post\">\n<div class=\"body\">\n<div id=\"4d40d526-d72b-4ff1-85bc-d8ab01e44bdc\" class=\"postBody\" style=\"margin: 4px 0px 0px; border-width: 0px; padding: 0px;\" contenteditable=\"true\">\n<p align=\"justify\">Dodatkowo w pliku \/etc\/sysctl.conf dodajemy dyrektywy:<\/p>\n<p>net.ipv4.ip_forward = 1<br \/>\nnet.ipv4.ip_nonlocal_bind = 1<br \/>\nnet.ipv4.conf.default.rp_filter = 0<br \/>\nnet.ipv4.conf.all.rp_filter = 0<\/p>\n<p>Restartujemy hosta, po restarcie wygl\u0105da to tak:<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/br5.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;\" title=\"br5\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2017\/05\/br5_thumb.png\" alt=\"br5\" width=\"433\" height=\"608\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Konstrukcja ca\u0142o\u015bci jest bardzo czytelna jak wida\u0107 (mostek cloud0 jest zak\u0142adany przez CloudStack Agent). Wa\u017cna informacja, dla danego mostka (br) tylko jeden port mo\u017ce mie\u0107 ustawiony tag 0 (brak VLAN). Przy poprawnej konfiguracji mo\u017cemy si\u0119 swobodnie komunikowa\u0107 z hostem poprzez interfejs cloud0. W nast\u0119pnej cz\u0119\u015bci om\u00f3wimy dok\u0142adnie przestrze\u0144 dyskow\u0105 (Primary i Secondary Storage) oraz zestawimy klaster MariaDB, skonfigurujemy te\u017c KeepaliveD, HAProxy.<\/p>\n<p align=\"justify\">EDIT:<\/p>\n<p align=\"justify\">Od wersji 4.11 Cloudstack wspiera sieci go\u015bcia L2, oznacza to, \u017ce VM wstaje bez sieci (jest wpi\u0119ta bezpo\u015brednio w OpenvSwitch i wszystko pozyskuje z zewn\u0119trznego DHCP) a ca\u0142a konfiguracja musi zosta\u0107 dostarczona spoza Cloudstack (brak wirtualnego routera). Jest to do\u015b\u0107 ciekawa opcja (rzek\u0142bym, \u017ce rewolucyjna dla CloudStack), je\u015bli kto\u015b chce zachowa\u0107 pe\u0142n\u0105 obs\u0142ug\u0119 sieci po stronie fizycznej (switche, routery) to ju\u017c mo\u017ce (jak w VMware).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div style='text-align:left' class='yasr-auto-insert-visitor'><\/div>","protected":false},"excerpt":{"rendered":"<p>Wydawa\u0107 by si\u0119 mog\u0142o, \u017ce zainstalowanie CloudStack to nic trudnego, i tak jest. Trzeba jednak dok\u0142adnie zaplanowa\u0107 jak b\u0119dziemy u\u017cywa\u0107 sieci i przestrzeni dyskowej i odpowiednio skonfigurowa\u0107 hosta lub hosty do pe\u0142nienia funkcji serwera zarz\u0105dczego i wirtualizatora. W tym po\u015bcie &hellip; <a href=\"https:\/\/vm.piszki.pl\/?p=3362\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":3343,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"yasr_overall_rating":0,"yasr_post_is_review":"","yasr_auto_insert_disabled":"","yasr_review_type":"","footnotes":""},"categories":[45],"tags":[116,108,117],"class_list":["post-3362","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-poradniki","tag-cloudstack","tag-kvm","tag-openvswitch"],"yasr_visitor_votes":{"stars_attributes":{"read_only":false,"span_bottom":false},"number_of_votes":2,"sum_votes":10},"_links":{"self":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3362"}],"collection":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3362"}],"version-history":[{"count":7,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3362\/revisions"}],"predecessor-version":[{"id":3549,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3362\/revisions\/3549"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/media\/3343"}],"wp:attachment":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}