Upload
phungdiep
View
216
Download
0
Embed Size (px)
Citation preview
Fakultät Informatik, Institut für Systemarchitektur, Professur Rechnernetze
IaaS - Cloud Konfiguration mit OpenStack
Service & Cloud Computing
Gliederung
1) Übersicht zu OpenStack
2) OpenStack-Kernkomponenten
3) Authentifizierung / Identity-Verwaltung
4) Abläufe beim Anlegen von VMs
5) Neutron
6) Dashboard
7) OpenStack-API
8) Cloud-Init
2
• Seit 2010 in Entwicklung befindliche Plattform für Public- und Private-Cloud-Lösungen
• Halbjährlicher Release-Zyklus• „Liberty“: 15.10.2015• „Mitaka“: 7.4.2016 • „Newton“: 6.10.2016• „Ocata“: 22.2.2017• „Pike“: 30.8.2017
• Offeriert neben eigener API eine zu Amazon EC2 and Amazon S3 kompatible API
• OpenStack wird im Wesentlichen aus mehreren modular einsetzbaren Komponenten mit unterschiedlichen Aufgabenfeldern gebildet
OpenStack (https://www.openstack.org/)
3
Nova Neutron
Cinder
Glance
Heat Keystone Telemetry Swift
Horizon
Ironic Sahara
Designate
Trove
Rally
Manila
MagnumTripleO
Barbician
Murano
Kolla
OS Ansible
OS Client
Docs
Kuryr
Tempest
Oslo RefStack
Nova
Swift
Keystone Glance
Cinder Neutron
● Keystone: Authentisierungs- und Autorisierungsdienst● Nova: Verwaltet Lebenszyklus von Virtuellen Maschinen● Glance: Verwaltung von Images und ihren Eigenschaften● Swift: Speicher für unstrukturierte Daten („Object Storage“)● Cinder: Bereitstellung von persistentem Speicher für VMs („Block Storage“)● Neutron: Verwaltung von Netzwerken und Anbindung von VMs an ein
Netzwerk
● Alle Basisprojekte sind bereits mindestens 4 Jahre in Entwicklung4
(Ursprüngliche) Basisprojekte
Relationale Datenbank (MariaDB
ggf. mit Galera)
AMQP (RabbitMQ)
Objekt-Cache(Memcached)
Load-Balancer(HAProxy)
Ausfallsicherung(Keepalived, Pacemaker)
Webserver (Apache mit mod_wsgi)
Telemetry Backend
(MongoDB, Gnocchi)
Konfigurations-management-
Server
DNS-Server
NTP-Server
LDAP-Server
...
5
Infrastrukturdienste
● Möglichkeit des Betriebs innerhalb von Kubernetes (innerhalb von Docker-Container)
OpenStack – Interaktion der Komponenten
= Neutron
6
OpenStack – Interaktion der Komponenten (vereinfacht)
„Nova“(Compute)
„Swift“(Object Storage)
„Glance“(Image Service)
„Heat“(Orchestration)
„Ceilometer“(Telemetry)
„Keystone“(Identity Service)
„Horizon“(Dashboard)
„Neutron“(Networking)
„Cinder“(Block Storage)
1
2
3 4
5
7
● Authentisierungs- und Autorisierungsdienst für OpenStack● Unterstützt mehrere Backends für die Ablage von Login/Passwort
● Insbesondere: SQL-Datenbank, LDAP (repliziertes LDAP ermöglicht „dezentralisierte“ Cloud)
● Grundprinzip:● Ausstellung eines Tokens nach Authentifizierung, das mit jedem Request an die
REST-API mitgesendet wird● Dienste, die Token erhalten, überprüfen dieses mittels Keystone, dazu Angabe
von Informationen zu Keystone in jedem Dienst notwendig, z.B. für Nova:
● Vielzahl von Konfigurationen von Keystone möglich, z.B.: Time-based One-time Password
[DEFAULT]...auth_strategy = keystone
[keystone_authtoken]...auth_uri = http://controller:5000auth_type = passwordproject_name = serviceusername = novapassword = SOMEPASS
8
Identity-Dienst: Keystone
client OS-API keystone
LoginPasswort
Prüfung
Erzeugung CMS-Token
Keystone-DB
CMS-Token
Sign. KeySign. Cert
CAkeyCACert
API Request+
CMS-Token
Prüfung CMS-Token
Sign. CertCACert
Valide?
Request bearbeitenRequest ablehnen
HTTP200
HTTP401
janein
Cryptographic Message Syntax (CMS):● CMS-Format gemäß RFC 5652● Generiert u.a. unter
Verwendung des Service-Katalogs, von Tenant-Informationen und User-Rollen
● Beinhaltet Expiration-Date
9
Identity-Dienst: Keystone - CMS
Domain
Project
User
Role
● Zentrale Einheit, der Ressourcen zugewiesen werden kann
● Beinhaltet Nutzer
● Menge von Projekten (projects), Gruppen (groups) und Nutzern (user)
● Entitäten, die auf API-Endpunkte zugreifen können● Einem Projekt zugeordnet
● Ermöglicht Zuordnung von Rechten und Privilegien zu Nutzeraccount (Rechte in policy.json des jeweiligen Dienstes festgelegt)
Service● OpenStack-Projekt, das Keystone zur Authentifizierung nutzt● Keystone verwaltet Liste von Diensten (openstack service list)
Endpoint● Schnittstelle hin zu einem API-Dienst, über den auf Funktion
des OpenStack-Projektes zugegriffen werden kann● Keystone verwaltet Liste von Endpunkten (openstack
endpoint list)
10
Identity-Dienst: Keystone – Konzepte (v3)
OpenStack – Interaktion der Komponenten
Nova API
REST
Nova Compute
Datenbank(u.a. Informationen zu
erstellten VMs, ...)
Virtualisierungstechnologien(Libvirt + KVM)
Nova Scheduler
Nova Conductor
Message Queue(RabbitMQ)
Direkter Zugriff
11
Controller Node
Compute Node
nova-api, nova-conductor, nova-consoleauth, nova-novncproxy, nova-cert, nova-api, nova-scheduler, ...
nova-compute
Dienste
● Feingranulare Verteilung von Diensten in produktiven Installationen zur Vergrößerung der Skalierbarkeit und für Hochverfügbarkeit:● Dienste auf „Controller Node“ können auf zwei Knotentypen aufgeteilt
werden:● nova-api, nova-consoleauth, nova-novncproxy, nova-cert: Zugriff von
extern● nova-scheduler, nova-conductor: Zugriff von intern
● Weiterhin: Neutron / Nova Network● Zusätzliche mögliche Dienste auf Controller: Proxy für HA (z.B. HAProxy),
Datenbanken plus Keystone-Infrastruktur
Controller Node
Compute NodeCompute NodeCompute
NodeCompute
NodeVM VM
12
Knotenrollen
OpenStack CLI /Horizon
Keystone 2
Novanova-api
nova-schedulerMessageQueue
NovaDB
3
4
5
6
7
8
9
● In Schritt 9 ist ein physischer Host bestimmt, auf dem die VM ausgeführt wird.
● Nova-Scheduler sendet im Schritt 9 eine rpc.cast-Nachricht an die Message Queue, um die VM auf dem selektierten Host zu starten.
113
Anlegen einer VM: Selektion des Hypervisors
KeystoneDB
Keystone
KeystoneDB
Nova
nova-computeMessageQueue
NovaDB
11
12
10
Glance Neutron Cinder
nova-conductor
14 16
13
15 18 21
17 19 2020 22
● In Schritt 23 wird auf dem Hypervisor (lokaler Zugriff durch nova-compute) unter Verwendung der ermittelten Parameter eine VM gestartet und in das Netzwerk integriert.
● Durchlaufene Tasks: Scheduling, Networking, Block Device Mapping, Spawning
23
Hypervisor
14
Anlegen einer VM: Instanziierung auf Host
[DEFAULT]core_plugin = ml2service_plugins =
neutron.confml2_conf.ini
● Neutron (früher: Quantum) offeriert modulare Konfiguration des Netzwerks● Setzt technisch auf Basismechanismen des Linux-Kernels auf (Network
Namespaces, Linux Bridge, iptables, …)● Projekt umfasst neben Server (auf Control-Node auszuführen) insbesondere mehrere
Agents (z.B. für DHCP) wie auch Plugins (z.B. zur Untersützung verschiedener L2-Mechanismen)
● Minimalsetup (Provider-Network) mittels Linux Bridge unter Verwendung von Controller- plus Compute-Node möglich
[ml2]type_drivers = flat,vlantenant_network_types =mechanism_drivers = linuxbridgeextension_drivers = port_security
[ml2_type_flat]flat_networks = provider
[ml2_type_vlan]network_vlan_ranges = provider
[securitygroup]firewall_driver = iptables
[linux_bridge]physical_interface_mappings = provider:eth1[vxlan]enable_vxlan = False
[securitygroup]firewall_driver = iptablesenable_security_group = True
linuxbridge_agent.ini
Zusätzlich: Konfiguration in dhcp_agent.ini
Modular Layer 2 Framework
15
Neutron
Network Node
Open vSwitch
L3 Agent
qrouter(network
namespace)
DHCP Agent
qdhcp(network
namespace)
Open vSwitchAgent
IntegrationBridgebr-int
TunnelBridgebr-tun
TunnelBridgebr-tun
VLANBridgebr-vlan
ExternalBridgebr-ext
MetadataAgent
Interface 1
Interface 2
Interface 3
VxLAN/GRE
VLAN
Internet
● Vier Komponenten auf Network Node benötigt:● Open vSwitch für die
Bereitstellung virtueller Switches● DHCP-Agent● Router● Metadata-Agent
● Zentrale Bridge: br-int (führt verschiedene Netze zusammen)
16
Neutron – Übersicht zum Network Node
Compute Node
Open vSwitch
Linux Bridgeqbr
SecurityGroups
Open vSwitchAgent
IntegrationBridgebr-int
TunnelBridgebr-tun
TunnelBridgebr-tun
VLANBridgebr-vlan
Instanz
Interface 1
Interface 2
VxLAN/GRE
VLAN
● Zwei Komponenten auf Compute Node benötigt:● Open vSwitch für die
Bereitstellung virtueller Switches
● Linux Bridge (Anwendung von iptables-Regeln)
● Instanz wird an Linux Bridge angebunden
17
Neutron – Übersicht zum Compute Node
● Web-basierte Benutzungsoberfläche für OpenStack-Basisprojekte (bzw. weitere Projekte)
● Implementiert unter Verwendung von Django● Kann durch eigene Themes in Bezug auf Design / Layout adaptiert werden● Integration von weiteren Sichten sehr leicht realisierbar durch Registrierungs-
Mechanismus in horizon/openstack_dashboard/enabled
Dashboards
Panel
Tab
18
Dashboard: Horizon
OpenStack API
• Ermöglicht Kontrolle der Cloud-Ressourcen (insbesondere Anlegen, Konfigurieren, Löschen) mittels REST-API
• Neben OpenStack-spezifischer API wird zu AWS konforme API offeriert
• Für API-Operationen ist Token erforderlich, das mittels Keystone angefordert wird
curl -i -H "Content-Type: application/json" -d '{ "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "username", "domain": { "id": "default" }, "password": "xyz" } } } }}' http://ENDPOINT:5000/v3/auth/tokens ; echo
19
● Alle Basisdienste plus weitere Dienste verfügen über dedizierte Kommandozeilenwerkzeuge (in Python implementiert; CLI-Werkzeug selbst überwiegend deprecated) mit zugehöriger Bibliothek
● Werkzeug „openstack“ greift auf Bibliotheken zu, um mit verschiedenen Diensten zu interagieren
● Installation via „pip install python-openstackclient“● Run-Command-Datei für Export der Authentifizierungsinformationen in
Umgebung (wird von Kommandozeilenwerkzeugen verwendet)
#!/bin/bash
export OS_USERNAME=maxmustermannexport OS_TENANT_NAME=maxmustermannexport OS_AUTH_URL=http://identity.someprovider.com:5000/v2.0export OS_REGION_NAME=SOME_REGION
echo "Please enter your OpenStack Password: "read -sr OS_PASSWORD_INPUTexport OS_PASSWORD=$OS_PASSWORD_INPUT
20
Kommandozeilenwerkzeuge
● Beispiel: Abfrage von Informationen von Basisdiensten und Anlegen einer VM:
$ ssh-keygen -q -N ""$ openstack keypair create --public-key ~/.ssh/id_rsa.pub keyname$ openstack security group rule create --proto icmp default$ openstack security group rule create --proto tcp --dst-port 22 default$ openstack flavor list$ openstack image list$ openstack security group list$ openstack server create --flavor m1.tiny --image cirros \ --security-group default \ --key-name keyname mynewinstance
CLI-Kommandos
catalog
...
imagenetworkkeypair
quota
server
snapshot
tokenflavor
21
Kommandozeilenwerkzeuge
● Beispiel: Anlegen einer IP-Adresse und Zuweisung zu einer VM:
#Anlegen einer sogenannten „floating IP“$ openstack floating ip create provider# Zuweisen der IP zu Server$ openstack server add floating ip $INSTANCE_NAME 87.20.20.54
CLI-Kommandos
catalog
...
imagenetworkkeypair
quota
server
snapshot
tokenflavor
22
Kommandozeilenwerkzeuge
Cloud-Init
• Cloud-Init ermöglicht es, Information als Parameter an eine startende Instanz zu übergeben und automatisiert Skripte nach dem Start der Instanz auszuführen
• Informationen werden als „user-data“ übergeben• Unterschiedliche Syntax verfügbar:
● Cloud-config-Dateien● Shellskripte
23
#cloud-configusers: - name: ubuntu groups: sudo shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] ssh-authorized-keys: - ssh-rsa AAAAuzaueeafz...adca user@domainruncmd: - touch /home/ubuntu/demo.txt