Generowanie i autoryzacja Terraform przy użyciu użytkownika Keycloak na NSIS Cloud
Dwa podstawowe sposoby korzystania z systemu OpenStack to praca z myszą w Horizon i wprowadzanie poleceń CLI. Dobrze sprawdzają się one przy interaktywnym wykonywaniu pojedynczych poleceń, ale nie skalują się łatwo. Narzędzie takie jak Terraform firmy HashiCorp, stanowi alternatywę dla ręcznych sposobów wprowadzania kaskadowych zmian. Na przykład, w następujący sposób można utworzyć kilka instancji jednocześnie:
Zdefiniuj parametry dla utworzenia jednej instancji,
zapisz je w pliku konfiguracyjnym Terraform i
pozwól Terraform automatycznie powtórzyć tę operację określoną liczbę razy.
Plan zakłada instalację Terraform, pobranie tokena OpenStack, wprowadzenie go do pliku konfiguracyjnego i uruchomienie. Dzięki temu będziesz w stanie efektywnie korzystać z Terraform w chmurze NSIS Cloud. Na przykład, za pomocą Terraform możesz:
automatyzować tworzenie wielu maszyn wirtualnych, każdej z własny adresem Floating IP, DNS i funkcjami sieciowymi lub
automatyzować tworzenie klastrów Kubernetes
i tak dalej.
Co zostanie omówione
Instalowanie Terraform jako użytkownik root
Ponowne połączenie się z chmurą
Pobranie tokena OpenStack
Utworzenie pliku konfiguracyjnego i zainicjalizowanie Terraform
Tworzenie kodu Terraform
Wyjaśnienie znaczenia używanych zmiennych
Uruchomienie skryptu Terraform
Wymagania wstępne
Nr 1 Konto
Jest wymagane konto hostingowe NSIS Cloud z dostępem do interfejsu Horizon: https://horizon.cloudferro.com. W szczególności będziesz potrzebować hasła do konta, więc przygotuj je wcześniej.
Nr 2 Zainstalowana wersja systemu Linux
Możesz użyć swojej bieżącej instalacji systemu Linux, jednak w tym artykule zaczniemy od czystej instalacji. Utwórz nową maszynę wirtualną z systemem Ubuntu zgodnie z opisem w tym artykule:
Nr 3 Zainstalowany OpenStackClient dla systemu Linux
Aby uzyskać token z chmury, najpierw należy włączyć dostęp z właśnie utworzonej maszyny wirtualnej z systemem Ubuntu:
Jak zainstalować OpenStackClient dla systemu Linux na NSIS
Pokazuje on, jak zainstalować środowisko Python, utworzyć i aktywować środowisko wirtualne, a następnie połączyć się z chmurą, pobierając i aktywując odpowiedni plik RC z chmury NSIS Cloud.
Nr 4 Połączenie się z chmurą za pomocą pliku RC
Artykuł:
Jak aktywować dostęp OpenStack CLI do chmury NSIS przy użyciu uwierzytelniania dwuskładnikowego
opisuje łączenie się z chmurą i obejmuje zarówno uwierzytelnianie jednoskładnikowe, jak i dwuskładnikowe, która jest włączona na twoim koncie. Obejmuje on także wszystkie główne platformy: Linux, MacOS i Windows.
Będziesz używać zarówno środowiska wirtualnego Python, jak i pobranego pliku RC po zainstalowaniu Terraform.
Krok 1 Zainstaluj Terraform jako użytkownik root
Zainstaluj wymagane zależności przy użyciu następującego polecenia:
sudo apt-get install wget curl unzip software-properties-common gnupg2 -y
Pobierz i dodaj do systemu podpisane klucze gpg HashiCorp. Aby wykonać tę czynność, najpierw wejdź w tryb root:
sudo su # Enter root mode
curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add -
Dodaj repozytorium HashiCorp do APT:
sudo apt-add-repository "deb [arch=$(dpkg --print-architecture)] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
Poniższe polecenia zaktualizują Ubuntu, zainstalują Terraform i sprawdzą jego wersję:
apt-get update -y #update Ubuntu
apt-get install terraform -y # install Terraform
terraform -v # check the version
Teraz wyjdź z trybu root i przejdź w tryb normalnego użytkownika eouser.
su eouser # Exit root mode
Krok 2 Ponownie połącz się z chmurą
Po wykonaniu czynności opisanych w sekcjach Wymagania wstępne nr 2 i 3 połączenie z chmurą zostało zakończone. To połączenie zostało teraz utracone, ponieważ nastąpiło przełączenie na użytkownika root i z powrotem, do normalnego użytkownika eouser dla chmury NSIS Cloud. Aby ponownie połączyć się z chmurą, odnieś się do sekcji Wymagania wstępne nr 4 Połączenie się z chmurą za pomocą pliku RC. Poniższe polecenie posłuży jako test:
openstack flavor list
i powinno wyświetlić początek listy flavorów dostępnych w systemie:
Teraz możesz otrzymać token z chmury, z którą pracujesz. „Token” to bardzo długi ciąg znaków, który służy jako rodzaj hasła do twojego kodu.
Krok 3 Pobierz token OpenStack
Pobierz token za pomocą następującego polecenia:
openstack token issue -f shell -c id
Wynik jest następujący:
id="gAAAAABj1VTWP_CFhfKv4zWVH7avFUnHYf5J4TvuKG_Md1EdSpBIBZqTVErqVNWCnO-kYq9D7fi33aRCABadsp23-e-lrDFwyZGkfv-d83UkOTsoIuWogupmwx-3gr4wPcsikBvkAMMBD0-XMIkUONAPst6C35QnztSzZmVSeuXOJ33DaGr6yWbY-tNAOpNsk0C9c13U6ROI"
Wartość zmiennej id to token, który potrzebujesz. Skopiuj go i zapisz, aby wprowadzić go do pliku konfiguracyjnego Terraform.
Krok 4 Utwórz plik konfiguracyjny i zainicjuj Terraform
Utwórz nowy katalog, w którym będą przechowywane twoje pliki Terraform, i przejdź do niego:
mkdir terraform-dir # Name it as you wan
cd terraform-dir
Utwórz plik konfiguracyjny, yourconffile.tf, i otwórz go w edytorze tekstu. W tym przykładzie zostanie użyty edytor nano:
sudo nano yourconffile.tf # Name it as you want
Wklej poniższy kod do pliku:
# Configure the OpenStack Provider
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
}
}
}
Zapisz plik (w przypadku Nano, użyj Ctrl-X i Y).
Poniższe polecenia informują Terraform, że będzie współpracował z OpenStack.
Użyj następującego polecenia, aby zainicjować Terraform:
terraform init
Terraform odczyta plik yourconffile.tf z bieżącego katalogu. Rzeczywista nazwa pliku nie ma znaczenia, o ile jest to jedyny plik .tf w katalogu.
Możesz, oczywiście, używać wielu innych plików .tf, takich jak
main.tf dla głównego programu Terraform,
variable.tf do definicji zmiennych
i wiele innych.
Po zainicjowaniu ekran wyglądałby tak:
Terraform został zainicjowany i działa poprawnie z twoją chmurą OpenStack. Teraz dodaj kod, aby wykonać kilka przydatnych zadań.
Informacja
W poniższych przykładach używamy dwóch sieci, jednej z nazwą zaczynającą się od cloud_ i drugiej z nazwą zaczynającą się od eodata_. Pierwsza sieć powinna zawsze być obecna na koncie, ale druga nie musi być obecna. Jeśli nie masz sieci, której nazwa zaczyna się od eodata_, możesz ją utworzyć lub użyć dowolnej innej sieci, którą już masz i której chcesz użyć.
Krok 5 Utwórz kod Terraform
Wprowadzenie
Dopisz poniższy kod do zawartości pliku yourconffile.tf. Wygeneruje on cztery maszyny wirtualne, jak określono w wartości zmiennej count. Cały plik yourconffile.tf powinien teraz wyglądać następująco:
# Configure the OpenStack Provider
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
}
}
}
provider "openstack" {
user_name = "[email protected]"
tenant_name = "cloud_00aaa_1"
auth_url = "https://keystone.cloudferro.com:5000/v3"
domain_name = "cloud_00aaa_1"
token = "gAAAAABj1VTWP_CFhfKv4zWVH7avFUnHYf5J4TvuKG_Md1EdSpBIBZqTVErqVNWCnO-kYq9D7fi33aRCABadsp23-e-lrDFwyZGkfv-d83UkOTsoIuWogupmwx-3gr4wPcsikBvkAMMBD0-XMIkUONAPst6C35QnztSzZmVSeuXOJ33DaGr6yWbY-tNAOpNsk0C9c13U6ROI"
}
resource "openstack_compute_instance_v2" "test-terra" {
count = 4
name = "test-instance-${count.index}"
image_id = "d7ba6aa0-d5d8-41ed-b29b-3f5336d87340"
flavor_id = "eo2.medium"
security_groups = [
"default", "allow_ping_ssh_icmp_rdp" ]
network {
name = "eodata_00aaa_3"
}
network {
name = "cloud_00aaa_3"
}
}
Zawsze używaj najnowszej wartości image id
Od czasu do czasu domyślne obrazy systemów operacyjnych w chmurze NSIS Cloud są uaktualniane do nowych wersji. W związku z tym ich image id ulega zmianie. Załóżmy, że w momencie pisania tego artykułu image id dla Ubuntu 20.04 LTS miał wartość 574fe1db-8099-4db4-a543-9e89526d20ae Podczas pracy z artykułem zwykle używa się aktualnej wartości image id, która zastępuje wartość 574fe1db-8099-4db4-a543-9e89526d20ae w całym tekście.
Teraz, jeśli chcesz zautomatyzować procesy w OpenStack, być może przy użyciu Heat, Terraform, Ansible lub innego narzędzia do automatyzacji OpenStack; jeśli użyjesz wartości 574fe1db-8099-4db4-a543-9e89526d20ae jako image id, pozostanie ono zakodowane i gdy ta wartość ulegnie zmianie podczas uaktualnienia, zautomatyzowany proces może przestać działać.
Ostrzeżenie
Upewnij się, że twój kod automatyzacji używa aktualnej wartości image id systemu operacyjnego, a nie wartości zakodowanej.
Znaczenie używanych zmiennych
Znaczenie używanych zmiennych jest następujące:
- user_name
Nazwa użytkownika, z którą logujesz się do konta NSIS Cloud. Możesz tu użyć adresu e-mail.
- tenant_name
Zaczyna się od cloud_00. Można zobaczyć jej wartość w lewym górnym rogu okna Horizon.
- domain_name
Jeśli masz tylko jeden projekt w domenie, wartość tej zmiennej jest identyczne z wartością tenant_name powyżej.
- token
Wartość id uzyskana po wykonaniu polecenia openstack token issue.
- count
Ile razy należy powtórzyć operację (w tym przypadku zostaną utworzone cztery nowe maszyny wirtualne)
- name
Nazwa każdej maszyny wirtualnej; tutaj maszyny są rozróżniane przez dodanie kolejnych liczb na końcu nazwy, na przykład test-instance-1, test-instance-0, test-instance-2, test-instance-3.
- image_id
Nazwa lub ID kodu obrazu systemu operacyjnego, które podaje polecenie Compute -> Images. Na przykład, jeśli wybierzesz obraz Ubuntu 20.04 LTS, jego id to 5bf0da32-3419-4173-8ff2-a2524c153338.
- flavor_id
Nazwa flavoru, który będzie mieć każda maszyna wirtualna. Te nazwy są podawane przez polecenia openstack flavor list.
- security_groups
Tutaj jest to zestaw dwóch grup zabezpieczeń – default i allow_ping_ssh_icmp_rdp. Są to podstawowe grupy zabezpieczeń, których należy używać jako punkt wyjścia do konfiguracji wszystkich maszyn wirtualnych.
- network
Nazwa używanej sieci. W tym przypadku używamy sieci eodata_00aaa_3 dla eodata i cloud_00aaa_3 dla ogólnej komunikacji w chmurze.
Krok 6: Uruchom skrypt Terraform
Oto jak Terraform utworzy cztery instancje Ubuntu 20.04 LTS. Polecenie apply uruchomi skrypt; gdy zostanie wyświetlony monit o potwierdzenie wykonania operacji, wpisz yes, aby ją rozpocząć:
terraform apply
Wpisz
yes
Polecenie utworzy cztery maszyny wirtualne, jak jest to określone przez zmienną count.
Wynik powinien być podobny do tego:
W Horizon te maszyny wirtualne będą wyglądać tak:
Jeśli chcesz cofnąć operację, czyli usunąć właśnie utworzone maszyny wirtualne, polecenie będzie wyglądać następująco:
terraform destroy
Ponownie wpisz yes, aby rozpocząć operację.
Co można zrobić dalej
Szczególnie interesujące mogą być następujące polecenia CLI Terraform:
- plan
Pokazuje, jakie zmiany Terraform ma wykonać i umożliwia ich zatwierdzenie.
- validate
Sprawdza, czy konfiguracja jest prawidłowa.
- show
Pokazuje aktualny stan lub zapisany plan.
Użyj polecenia
terraform -help
aby dowiedzieć się o innych poleceniach Terraform.
Co można zrobić dalej
Artykuł Jak utworzyć zestaw maszyn wirtualnych przy użyciu OpenStack Heat Orchestration na NSIS Cloud wykorzystuje możliwości orkiestracji OpenStack do automatyzacji tworzenia maszyn wirtualnych. Jest to inne podejście niż w przypadku Terraform, ale może ono również zapewnić automatyzację pod OpenStack.