Service & Cloud Computing - TU Dresden · Fakultät Informatik, Institut für...

Preview:

Citation preview

Fakultät Informatik, Institut für Systemarchitektur, Professur Rechnernetze

marius.feldmann@tu-dresden.de

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

Recommended