OpenStack Dashboard — Horizon
OpenStack to środowisko / platforma która, pozwala na stworzenie prywatnej lub publicznej chmury z Cloud Computing. W tym wpisie przyjrzyjmy się dostępnym w OpenStack środowisku WebGUI Dashboard Horizon.
Jeżeli trafiłeś na ten wpis i też chciałbyś przetestować OpenStack to zapraszam do mojego poprzedniego wpisu gdzie pokażę Ci jak uruchomić takie środowisko w trybie developerskim - DevStack, OpenStack i OpenStack z Kolla na kontenerach
Dodatkowa informacja - ja do swojej instancji będę łączył się po przez przekierowanie portu po nie zabezpieczonym otwartym protokole HTTP. Nie udostępniam tego środowiska publicznie zatem jest wyłączone u mnie HTTPS/SSL. W domyślnej instalacji środowisko DevStack też nie udostępnia połączenia HTTPS. Przekierowanie portu jest po tunelowaniu w SSH stąd adres localhost w przykładach.
Dashboard Horizon
Dashboard Horizon do OpenStack jest dostępny jako moduł dodatkowy, nie jest wymagane do działania. Jeżeli zainstalujesz środowisko DevStack, Horizon jest dostępne domyślnie. Własnie na takiej edycji OpenStack będę bazował ten wpis. Wersja OpenStack to Pike.
Logowanie
Adres naszego dashboard Horizon jest zazwyczaj dostępny pod adresem IP naszego serwera (http://<ip_address>/dashboard/) na którym, zainstalowaliśmy devstack. Jeżeli serwer ma kilka interfejsów sieciowych należy wskazać pod jakim adresem będzie on dostępny. Po zalogowaniu na użytkownika admin (użytkownika tego definiujemy na początku po przez plik konfiguracyjny devstack). Zobaczymy dostępne projekty
takie jak demo, service, admin, invisible_to_admin, alt_demo. Możemy stworzyć tutaj swój projekt lub zacząć pracę w ramach któregoś z tych. Ja w ramach tego wpisu przygotuje nowy projekt by zademonstrować wam możliwość środowiska OpenStack z poziomu WebGUI. Zatem stwórzmy nasz pierwszy projekt.
Nasz pierwszy projekt
Utworzenie nowego projektu z poziomu WebGUI możemy wykonać po przez przycisk z plusem Create Project umieszczony nad lista projektów w górnej części dashboard.
Otworzy nam się okno tworzenia nowego projektu (Create Project)
Opcje Domain ID oraz Domain Name będziecie mieli wyszarzane tak jak to jest u mnie. Opcja Name to nazwa naszego projektu która, będzie wyświetlana na liście dostępnych projektów. Description to opis. Załóżmy zatem projekt o nazwie TheRealMamuth. Przechodzimy na zakładkę Project Members gdzie będziemy mogli dodać naszych użytkowników. Na razie z listy wybieramy użytkownika admin.
Oraz przynależność z Member zmieniamy na admin. Przechodzimy do zakładki Project Groups
Tu z listy All Groups przydzielamy noadmins i wybieramy Member oraz anotherrole. W ostatniej zakładce Quotas możemy ustawić:
Metadata Items, VCPUs, Instances, Injected Files, Injected File Content (Bytes), Key Pairs, Length of Injected File Path, Volumes, Volume Snapshots, Total Size of Volumes and Snapshots (GiB), RAM (MB), Security Groups, Security Group Rules, Floating IPs, Networks, Ports, Routers, Subnets. Na razie nic tu nie zmieniajmy do tej zakładki wrócimy później i trochę ją zmodyfikujemy. Zapiszmy całość przyciskiem na dole Save. Komunikat zielony w górnej prawej części okna potwierdza poprawność stworzonego przez nas projektu i zapisane ustawienia.
Teraz wykorzystując menu z lewej górnej strony
Wybieramy z grupy Identity opcję Users i dodamy naszego użytkownika.
Klikamy na przycisk z plusem Create User.
Po kliknięciu przycisku Create User pokaże się nam okno
Create User gdzie będziemy mogli nadać User Name dla naszego użytkownika. Ustawić opis w polu Description, email przypisany do użytkownika w polu Email. Hasło i hasło które trzeba powtórzyć odpowiednio dla pól Password i Confirm Password. W opcji Primary Project wskazujemy nasz nowo utworzony projekt oraz na koniec określamy Role na Member. Po ustawianiu klikamy na przycisk Create User.
Po tym zabiegu wylogujmy się za użytkownika admin po przez pocję Sing Out i zalogujmy na nowo utworzonego użytkownika.
Po zalogowaniu na naszego użytkownika powinien przywitać nas panel Overview
Zobaczymy tu ustawiania zależne od zakładki Quotas z naszego projektu. Wylogujmy się z bieżącego użytkownika i raz jeszcze zalogujmy się na użytkownika admin i pozmieniajmy trochę tam te wartości. Dodatkowo opisze te wartości tutaj. Więc tak ustawmy:
- Metadata Items - odpowiada za meta date ustawiane w instancjach do tego wrócimy przy tworzeniu instancji.
- VCPUs - określa ilość dostępnych rdzeni przydzielanych dla naszej instancji (ilość dostępnych rdzeni można sprawdzić za pomoca na przykład polecania htop w systemie Linuks).
- Instances - ilość dostępnych maszyn wirtualnych.
- Injected Files - ilość plików konfiguracyjnych jakie można wstrzyknąć do naszej instancji.
- Injected File Content (Bytes) - rozmiar tych plików.
- Key Pairs to ilość możliwa ustawienia par kluczy publicznych i prywatnych.
- Length of Injected File Path - rozmiar ścieżki do pliku.
- Ilość Volumes.
- Ilość Volume Snapshots.
- Total Size of Volumes and Snapshots (GiB) - całkowity rozmiar woluminów i snapszotów w GiB.
- RAM - ilość przydzielonej pamięci w (MB).
- Security Groups ilość grup bezpieczeństwa,
- Security Group Rules - ilość rol bezpieczeństwa,
- Floating IPs - ilość ruchomych IP.
- Networks - liczba sieci,
- Ports - liczba porów tworzonych w sieciach i ruterach,
- Routers liczba ruterów, Subnets - liczba podsieci.
Ustawmy takie wartości
Zapiszmy ustawienia po przez kliknięcie przycisku Save w dolnej części otwartego okna. Po udanym zapisie logujmy się z powrotem na naszego nowo utworzonego użytkownika. Możemy zaobserwować, że nasze Overview się zmieniło:
Widzimy więc zależność ustawień Quotas dla projektu a dostępnością zasobów w projekcie. Spróbujmy zatem utworzyć 15 instancji. Z naszego lewego górnego bocznego menu wybierzemy Project -> Compute -> Instances.
I spróbujemy na podstawie domyślnego obrazu Cirros Linux utworzyć 15 instancji.
W projekcie TheRealMamuth nie mamy jeszcze żadnej Instancji. Spróbujmy zatem utworzyć 15 instancji.
instancje utworzymy przy pomocy przycisku z chmurą
W nowo otwartym oknie Lunch Instance spróbuj w pierwszym punkcie Details ustawić nazwę Instance Name na swoją własną oraz Count na liczbę 15.
Zobaczysz wtedy informacje o przekroczonych zasobach. Tak jak ustawiliśmy w projekcie w sekcji Quotas maksymalną liczbę 10 instancji a zatem każda liczba powyżej tej określonej wartości będzie powodować konflikt - i tak samo będzie w innych przypadkach.
Ok. Do uruchomienia instancji potrzebujemy sieci. Stwórzmy więc nasz pierwszy projekt sieci i instancji który, uruchomimy w OpenStack.
Założenia projektu. Stworzymy dwie sieci vxlan. Jedna będzie miała dostęp z zewnątrz dzięki Floating IPs. Druga zaś tylko z instancji z sieci poprzedniej. W każdej sieci utworzymy lekkie instancje z Cirros Linux by móc sprawdzić czy mamy połączenie z internetem. Dodatkowo utworzymy w każdej sieci dwie instancje z systemami Ubuntu i CentOS w każdej sieci. A zatem do dzieła.
Router, sieć i podsieć
Przejdźmy do utworzenia w pierwszej kolejności rutera. Połączy on nam sieć Internet z dwiema sieciami które, utworzymy. A zatem dodajmy nasz R1 (Router).
Z menu lewego górnego przechodzimy do Project -> Network -> Routers
Pierwszą sieć publiczną (public) mamy utworzoną. Dodajmy zatem nasz router - możemy też go dodać z Project -> Network -> Network Topology
Użyjmy przycisku Create Router
Choć w tym wpisie chciałem uniknąć zabawy w konsoli, na naszym serwerze z OpenStack. Jednak muszę coś wytłumaczyć. Nasza sieć publiczna która, istnieje jest powiązana z interfejsem br‑ex i mapowana w neutronie z nazwą public. Domyślnie przyjmuje taki adres IP
Reszta sądzę, że będzie na tyle jasna, że obejdzie się bez tłumaczenia - jeżeli coś będzie nie tak poproszę o komentarz i w następnym wpisie postaram się to wytłumaczyć. Wróćmy do naszego routera. Kliknijmy Create Router. W oknie które się pokaże uzupełniamy i wybieramy:
Router Name - ustawiamy na wspomniane R1, odznaczamy Enable Admin Site - czyli nie damy dostępu instancją do OpenStack Admin Site. External Network ustawiamy na public. Po ustawieniu wszystkiego klikamy Create Router.
Nasz schemat sieci trochę się zmienił.
Mamy router. Brama czyli nasz Gateway został dodany automatycznie. Nie widzimy adresu IP na sieci public ani na interfejsie rutera ponieważ nie mamy uprawnień administracyjnych. Jednak jak wejdziemy w dodatkowe informacje rutera zobaczymy że ten adres IP tam jest. A zatem kliknijmy View Routers Details.
Zobaczymy wtedy wszystkie informacje na temat naszego Routera. Ruter na interfejsie external czyli gateway ma adres 172.24.4.29 czyli z puli interfejsu br‑ex.
Czas teraz utworzyć sieć dla naszych instancji przejdźmy zatem do Project -> Networks
Zobaczymy tu listę sieci, na razie będzie to sieć tylko public. Zmieńmy to i dodajmy nową sieć.
Naciśnijmy przycisk z plusem Create Network
Naszym oczom ukaże się okno tworzenia sieci, dodajmy zatem Network Name w tym przypadku będzie to trm_first_network. Przechodzimy do zakładki Subnet
W tej zakładce ustawiamy naszą podsieć Subnet Name na subnet_trm_first_network, adres Network Adress Source ustawiamy na reczny i w polu Network Address wpisujemy adres sieci.
Przechodzimy do Subnet Details i zaznaczamy opcję Enable DHCP oraz alokujemy pulę w Allocation Pools (adres pierwszy zawsze będzie brany jako adres routera wiec należy go pominąć). Zatwierdzamy wszystko przyciskiem Create.
Jak widzimy nasz Network Topology nieco się zmienił, Pojawiła się dodatkowa sieć oznaczona kolorem pomarańczowym. Podepnijmy ją pod nasz router R1
W celu tym kliknijmy na nasz router i z dymka wybierzmy opcję z plusem Add Interface
Po kliknięciu tej opcji pokaże nam się okno Add Interface. Gdzie należy w opcji Subnet wybrać naszą nowo utworzoną sieć. Adres IP pozostawiamy automatyczny. Zostanie wybrany pierwszy dostępny z puli którą określiliśmy w naszej podsieci. Oczywiście możemy tu wpisać wartość z palca, jednak ten adres musimy uwzględnić w serwerze DHCP dla naszej podsieci. Tak by zakres DHCP nie wchodził w adres wykorzystywany przez port Routera R1
Nasz schemat wygląda już znacznie lepiej. Nabiera to już jakiejś struktury.
Dodajmy zatem nasza pierwszą instancje którą sprawdzimy nasze połączenie ze światem zewnętrznym. Uruchommy instancje z Cirros Linux
W oknie Launch Instance w pierwszej pozycji Details podajmy nazwę naszej instancji. Potrzebujemy jedną instancje wiec wartości nie będziemy zmieniać.
W drugiej pozycji Source wskażemy nasze źródło na podstawie jakiego image będziemy budować naszą instancje.
Wybieramy Flavor czyli zasoby jakie zostaną wydzielone dla naszej instancji
Wskazujemy naszą utworzoną sieć.
Security Groups pozostawiamy na razie default.
Po kliknięciu Launch Instance na widoku topologii sieci zobaczymy naszą instancje oraz gdzie jest podłączona. Przejdźmy teraz do konsoli naszej instancji.
Po prostu w dymku klikamy Open Console. W osobnym oknie przeglądarki zobaczymy czarny terminal.
Logowanie do Cirros zawsze jest podawane w komunikacie z instancji obrazu. W tym przypadku jest to user: cirros pass: cubswin:) <- Razem z tą buźką.
Po zalogowaniu wydajmy dwa polecenia które, w prosty sposób sprawdzą nam połączenie ze światem.
ping 8.8.8.8 ping wp.pl
Jak widać połączenie działa. Spróbujmy teraz nawiązać połączenie z naszym Cirrosem po SSH. Aby tego dokonać potrzebujemy adresu z sieci public. Możemy go uzyskać po przez przydzielenie naszej instancji floating IP.
Z menu które, będzie na końcu każdego wpisu o instancji wybieramy Associate Floating IP.
W oknie Manage Floating IP Associations możemy przydzielić nasze public IP do naszej instancji.
Jeżeli nie dysponujemy żadnym adresem w pozycji IP Address wystarczy kliknąć znaczek plusa. Spowoduje to otwarcie Allocate Floating IP gdzie będziemy mogli taki adres IP zarezerwować. Jak możemy zauważyć możemy tak jak ustawiliśmy ustawić tylko 10 takich adresów IP. Klikamy Allocate IP
Po zadeklarowaniu adresu z powrotem wrócimy do poprzedniego okna, gdzie będziemy mieli już nasz adres IP. Klikamy ostatecznie Associate i łączymy adres publiczny z interfejsem naszej instancji.
Nasza instancja będzie miała adres IP dzięki któremu, nasze instancje będą widziane na zewnątrz.
Jeżeli masz dostęp do konsoli serwera na którym, jest zainstalowany OpenStack spróbuj się połączyć z tym adresem po SSH.
Oczywiście próba będzie nie udana. Oczywiście nie dlatego, że SSH nie działa. Powód jest prosty. OpenStack ma Seciurity Policy które, określają dostęp do instancji zewnątrz. Są one dość ograniczone. Stwórzmy swoje Seciurity Group tak by działało SSH.
Dla osób które, wolą sprawdzić by się przekonać stworzyłem druga instancje. Wykorzystałem konsole OpenStack i połaczyłem się po SSH z naszym Cirrosem :)
Ustawmy nasze Seciurity Group. Z menu bocznego lewego wybieramy Project -> Network -> Seciurity Group.
W naszym projekcie będziemy mieli już domyślną SG. Jednak my jej nie zmienimy a dodamy po prostu nową.
Klikamy przycisk Create Seciurity Group
W Create Security Group Ustawiamy nazwę w polu Name i opis. I zatwierdzamy niebieskim przyciskiem. Mamy teraz dwie grupy.
Dodajmy port SSH do naszej nowo utworzonej grupy, skorzystajmy z przycisku na koncu grupy w kolumnie Action.
Znajdują się tam już dwa wpisy. możemy je zostawić, kliknijmy przycisk Add Role
By dodać naszą rolę odnośnie komunikacji SSH. Ustawimy zezwolenie na ruch przychodzący na porcie 22.
Ustawiamy Rule na Custom TCP Rule (mogli byśmy z tej listy rozwijanej wybrać SSH ale zmniejszyło by to naszą zabawę :P). Direction wybieramy wchodzący (Ingress). Wybieramy nasz port oraz określamy za pomocą CIDR jakie adresy mogą mieć dostęp. Zapis 0.0.0.0/0 oznacza każdy. Wszystko zapisujemy i wracamy do naszej instancji. Z Action wybieramy Edit Seciurity Group i dodajemy naszą grupę SSH. Wszystko zapisujemy naciskając Save.
Przetestujmy czy wszystko działa.
Wystarczy już teraz zatwierdzić.
Ok ale nie samym Cirrosem człowiek żyje. Dodajmy instancje z CentOS i Ubuntu przystosowanym do cloud. Obrazy można pobrać z:
Pobieramy wersję z rozszerzeniem qcow2. Obrazy zaimportujemy do naszego projektu w Project -> Compute -> Images. Tam klikamy Create Image. W oknie Create image nadajemy nazwę dla naszego obrazu i wskazujemy plik wcześniej pobrany.
Po zaimportowaniu pliku pokaże nam się on na liście. Obrazy cloud tak są stworzone, że wymagają uwierzytelnienia po kluczu prywatnym RSA. Pokaże Ci jak taki Klucz stworzyć i dodać do naszego OpenStack.
Przechodzimy do Project -> Compute -> Key Pairs
Potem klikamy Import Key Pair i postępujemy według instrukcji podanej w nowo otwartym oknie.
Możemy też wesprzeć się generatorem kluczy prywatnych i publicznych.
Po dodaniu klucza przejdźmy do stworzenia naszych dwóch instancji z Ubuntu i CentOS.
Jeżeli to jest nas jedyny klucz to wszystko zostanie wybrane automatycznie jeżeli mamy więcej musimy wskazać ten do którego mamy klucz prywatny.
No i mamy trzy instancje. Z resztą zadania już chyba sobie poradzicie. Ja na koniec zapraszam do innych moich tematów blogowych oraz do przyszłych wpisów w których, będę poruszał więcej tematów związanych z OpenStack.