Im dritten Teil des Tutorials richten wir jeweils eine Instanz für einen Web- sowie einen Datenbankserver ein und installieren WordPress auf den Servern.

Mit neutron das Netzwerk über die Kommandozeile verwalten

Als erstes müssen wir zwei weitere Sicherheitsgruppen mit entsprechenden Regeln für Web- und Datenbankserver anlegen.
Hierfür nutzen wir den neutron Client direkt auf der Kommandozeile Ihres Jumphosts. Bitte Loggen Sie sich, wie im vorherigen Tutorial beschrieben, auf Ihrem Jumphost per SSH ein und binden Sie das OpenStack RC File mit source ein. Wir werden die Konfiguration in diesem Teil des Tutorials aus Lernzwecken ausschließlich über die Kommandozeilenclient vornehmen. Viele der Aufgaben können jedoch auch über das Horizon Dashboard erledigt werden.

Mit dem neutron Kommandozeilenclient können Sie Ihr Netzwerk wie z.B. Sicherheitsgruppen etc. verwalten. Geben Sie folgendes Kommando ein um die vorhandenen Sicherheitsgruppen anzuzeigen:

ubuntu@jumphost:~$ neutron security-group-list
+--------------------------------------+-------------+-------------+
| id                                   | name        | description |
+--------------------------------------+-------------+-------------+
| 0de973dd-f2e7-470d-b178-19d018dd5306 | remote_mgmt | fernwartung |
| 1ec54ac3-56fb-4a40-81d7-41e34448fe8b | default     | default     |
+--------------------------------------+-------------+-------------+

In der Ausgabe sehen Sie neben der Sicherheitsgruppe default Ihre selbst eingerichtete Sicherheitsgruppe remote_mgmt.

Tipp: Wenn Sie Informationen über die verfügbaren Parameter wünschen können Sie dem Befehl ein “help” z.B. “$ neutron help security-group-list” voran stellen.

Legen Sie nun die neuen Sicherheitsgruppen web und database an in dem Sie folgenden Befehl ausführen:

ubuntu@jumphost:~$ neutron security-group-create web
Created a new security_group:
...
ubuntu@jumphost:~$ neutron security-group-create database
Created a new security_group:
...

Die neu erstellten Sicherheitsgruppen erscheinen nun in der Liste:

ubuntu@jumphost:~$ neutron security-group-list
+--------------------------------------+-------------+-------------+
| id                                   | name        | description |
+--------------------------------------+-------------+-------------+
| 0de973dd-f2e7-470d-b178-19d018dd5306 | remote_mgmt | fernwartung |
| 1ec54ac3-56fb-4a40-81d7-41e34448fe8b | default     | default     |
| 276d27a4-56f2-4c12-b0cb-21c84e31f418 | web         |             |
| 559b290d-c1de-489f-956f-bcb348e3840a | database    |             |
+--------------------------------------+-------------+-------------+

Mit folgendem Befehl können Sie sich eine Liste der vorhandenen Sicherheitsregeln anzeigen lassen:

ubuntu@jumphost:~$ neutron security-group-rule-list
+--------------------------------------+----------------+-----------+----------+------------------+--------------+
| id                                   | security_group | direction | protocol | remote_ip_prefix | remote_group |
+--------------------------------------+----------------+-----------+----------+------------------+--------------+
| 08ad83f7-433e-43a6-8996-57de14fb19cf | default        | ingress   |          |                  | default      |
| 0ccd87b3-8d7d-4fb0-a93e-9229caf83221 | remote_mgmt    | egress    |          |                  |              |
| 4cb44527-744f-4b94-a9be-ce08e6f79477 | database       | egress    |          |                  |              |
| 524fdab7-bcac-4f25-9cdf-dc5358f994b5 | web            | egress    |          |                  |              |
| 655de944-ce44-4df8-82f0-2e8438456259 | web            | egress    |          |                  |              |
| 6b2b983d-2e7c-4028-bf53-6730ac1a235d | default        | egress    |          |                  |              |
| b8613388-5b91-400c-a2a7-d22810059453 | database       | egress    |          |                  |              |
| bcc3da54-3d3e-442a-8dfb-cf1bf576dd7b | remote_mgmt    | ingress   | tcp      | 0.0.0.0/0        |              |
| c10fcf43-397c-44b3-be35-a933690ab933 | default        | ingress   |          |                  | default      |
| c5d16c8d-2e27-471c-8860-d489fae58527 | default        | egress    |          |                  |              |
| e49991b3-493f-40d3-bcf4-f19ea5a3f633 | remote_mgmt    | egress    |          |                  |              |
+--------------------------------------+----------------+-----------+----------+------------------+--------------+

Wie Sie in der Liste sehen sind für die Sicherheitsgruppen web und database noch keine eingehenden (ingress) Verbindungen gestattet.
Mit dem Kommando neutron security-group-rule-create und der Angabe der entsprechenden Parameter können Sie nun die Regeln anlegen.

ubuntu@jumphost:~$ neutron security-group-rule-create --direction ingress --protocol TCP --port-range-min 80 --port_range_max 80 web
Created a new security_group_rule:
...
ubuntu@jumphost:~$ neutron security-group-rule-create --direction ingress --protocol TCP --port-range-min 3306 --port_range_max 3306 database
Created a new security_group_rule:
...

Bei erneutem Anzeigen der Sicherheitsregeln erscheinen die neuen Regeln in der Liste:

ubuntu@jumphost:~$ neutron security-group-rule-list
+--------------------------------------+----------------+-----------+----------+------------------+--------------+
| id                                   | security_group | direction | protocol | remote_ip_prefix | remote_group |
+--------------------------------------+----------------+-----------+----------+------------------+--------------+
| 08ad83f7-433e-43a6-8996-57de14fb19cf | default        | ingress   |          |                  | default      |
| 0ccd87b3-8d7d-4fb0-a93e-9229caf83221 | remote_mgmt    | egress    |          |                  |              |
| 4242a249-b262-40a1-a86b-a611f86492b2 | database       | ingress   | tcp      |                  |              |
| 4cb44527-744f-4b94-a9be-ce08e6f79477 | database       | egress    |          |                  |              |
| 524fdab7-bcac-4f25-9cdf-dc5358f994b5 | web            | egress    |          |                  |              |
| 655de944-ce44-4df8-82f0-2e8438456259 | web            | egress    |          |                  |              |
| 6b2b983d-2e7c-4028-bf53-6730ac1a235d | default        | egress    |          |                  |              |
| b69ea8b0-ea65-41cc-b927-7337a1a95750 | web            | ingress   | tcp      |                  |              |
| b8613388-5b91-400c-a2a7-d22810059453 | database       | egress    |          |                  |              |
| bcc3da54-3d3e-442a-8dfb-cf1bf576dd7b | remote_mgmt    | ingress   | tcp      | 0.0.0.0/0        |              |
| c10fcf43-397c-44b3-be35-a933690ab933 | default        | ingress   |          |                  | default      |
| c5d16c8d-2e27-471c-8860-d489fae58527 | default        | egress    |          |                  |              |
| e49991b3-493f-40d3-bcf4-f19ea5a3f633 | remote_mgmt    | egress    |          |                  |              |
+--------------------------------------+----------------+-----------+----------+------------------+--------------+

Die Sicherheitsgruppen sind nun soweit eingerichtet so dass wir mit dem Anlegen der Instanzen fortfahren können.

Instanzen verwalten mit dem nova Kommandozeilenclient

Mit dem Kommandozeilenclient nova können Sie u.a. die Instanzen Ihrer OpenStack Cloud verwalten. Geben Sie zu erst das folgende Kommando ein um eine Liste der vorhandenen Instanzen anzuzeigen:

ubuntu@jumphost:~$ nova list
+--------------------------------------+---------+--------+------------+-------------+----------------------------------------+
| ID                                   | Name    | Status | Task State | Power State | Networks                               |
+--------------------------------------+---------+--------+------------+-------------+----------------------------------------+
| db53e63c-3c13-4940-b966-dc381636ea8d | Gateway | ACTIVE | None       | Running     | mein-network=192.168.1.2, 212.8.XXX.XX |
+--------------------------------------+---------+--------+------------+-------------+----------------------------------------+

Mit den Folgenden Befehlen bekommen Sie eine Übersicht, welche Images, Flavors und Schlüsselpaare zur Verfügung stehen. In einem Flavor ist festgelegt welche Ressourcen einer Instanz zur Verfügung gestellt werden.

ubuntu@jumphost:~$ nova image-list
+--------------------------------------+-------------------------------------------+--------+--------------------------------------+
| ID                                   | Name                                      | Status | Server                               |
+--------------------------------------+-------------------------------------------+--------+--------------------------------------+
| 1c7a20a9-bc69-4e61-b194-9e2c2ac29b9f | Docker Host Ubuntu 12.04.3 linux-3.8      | ACTIVE | d47dae9f-2d7e-47f4-87aa-9ce5e2f42f36 |
| 4c158046-5c94-42ff-ac3c-64d38ce052b5 | F19-x86_64-cfntools                       | ACTIVE |                                      |
| 60ffb761-0d64-4f3f-aa12-3584e3779096 | Fedora 19 x86_64                          | ACTIVE |                                      |
| b8d4a36d-2f5e-4360-93a8-6c05870a110e | Fedora-20-x86_64                          | ACTIVE |                                      |
| 198362fb-6182-4a8c-82d1-3646bdcdb778 | Ubuntu Precise 12.04.3                    | ACTIVE |                                      |
| 262ffe60-e504-4d5a-94a8-5fba543402c4 | Ubuntu Saucy 13.10                        | ACTIVE |                                      |
| 9b371320-223b-4950-96b7-f7a2ad51b97c | Ubuntu Trusty Tahr (14.04)                | ACTIVE |                                      |
| bdf82ebd-cb6c-453f-8bc2-537e398a5055 | Windows Server 2012 R2 Std Eval           | ACTIVE |                                      |
| ea21a7bc-d608-4f76-a64d-493725a8c1c4 | centos-6.4-x86_64-cloudinit               | ACTIVE |                                      |
| 985ccd6d-5284-404a-bc29-ef30a9fbd300 | centos-6.5-20140117.0.x86_64              | ACTIVE |                                      |
| d0c0f7bf-5453-409e-a074-dca3037be2c3 | cirros-0.3.1-x86_64                       | ACTIVE |                                      |
| 1a377877-1475-4d2b-9082-ef8b367c1fe6 | clonezilla                                | ACTIVE |                                      |
| cb65e61a-b9ac-483a-a45f-5c64cb25cd27 | coreos                                    | ACTIVE |                                      |
| efdc2493-4d65-4ef1-8aef-5b0ea90a8058 | coreos-prod-317                           | ACTIVE |                                      |
| beaa978e-5f9f-4ee3-ac03-7b67ceccaa64 | debian wheezy amd64                       | ACTIVE |                                      |
| a45c1d39-ebff-4382-a88f-545055393bb4 | debian-wheezy-7.0.0-3-cloudinit-amd64     | ACTIVE |                                      |
| 958ec3a3-a194-496c-ae7f-a79f2e115d09 | openSUSE 13.1 Cloud-Kit.org Kurt (x86-64) | ACTIVE |                                      |
| 344cca5c-cb48-4370-b384-161d5e7a9daa | teutostack-gateway                        | ACTIVE |                                      |
| 6e98d4ca-64eb-4680-9d3c-2bf8f5feb5a7 | teutostack-gateway-Ubuntu_trusty_tahr     | ACTIVE |                                      |
+--------------------------------------+-------------------------------------------+--------+--------------------------------------+

ubuntu@jumphost:~$ nova flavor-list
+--------------------------------------+---------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID                                   | Name                | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+--------------------------------------+---------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 14b71cfb-1442-4c92-aedd-2b7eedb72bfd | teutostack.light    | 1024      | 4    | 0         |      | 1     | 1.0         | True      |
| 245e66c6-edaa-4f9d-aeec-0725fe504f86 | teutostack.pro      | 6192      | 150  | 0         |      | 4     | 1.0         | True      |
| 24fd48e2-099c-4051-81c5-6f400029ee87 | teutostack.ultra    | 12288     | 300  | 0         |      | 6     | 1.0         | True      |
| 5fd4feef-d67f-42f4-8e4b-a9a209f5e938 | teutostack.ram-huge | 32768     | 300  | 0         |      | 4     | 1.0         | True      |
| 7aa69376-ab8a-4204-b552-f644bb1e7c11 | teutostack.ram-plus | 16384     | 300  | 0         |      | 4     | 1.0         | True      |
| df896e15-8ed5-4a7b-b950-1039fc2ed0cf | teutostack.standard | 4096      | 20   | 0         |      | 2     | 1.0         | True      |
+--------------------------------------+-----------------+-----------+------+-----------+------+-------+-------------+-----------+

ubuntu@jumphost:~$ nova keypair-list
+------+-------------------------------------------------+
| Name | Fingerprint                                     |
+------+-------------------------------------------------+
| demo | 44:66:bd:90:a2:06:e6:a6:e6:b2:f8:3f:c6:6f:ec:e3 |
+------+-------------------------------------------------+

Wir legen nun für Web- und Datenbankserver jeweils eine Instanz in der Variante teutostack.pro mit einem Ubuntu Trusty Tahr (14.04) Image an. Die Auswahl erfolgt jeweils über die ID der Datensätze. Die Sicherheitsgruppe remote_mgmt wird zusätzlich hinzugefügt, damit wir uns auch per SSH auf dem Server einloggen können. Da die Server jedoch noch keine Floating IP besitzen sind diese nur intern z.B. über den Jumphost erreichbar.

Geben Sie nun folgende Befehle an um die Instanzen zu erstellen und beachten Sie, dass Sie evtl. die IDs für Image und Flavor gegen die gültigen IDs der vorherigen Befehlsausgaben ersetzen müssen.

ubuntu@jumphost:~$ nova boot --image 9b371320-223b-4950-96b7-f7a2ad51b97c --security-groups remote_mgmt,web --flavor 245e66c6-edaa-4f9d-aeec-0725fe504f86 --key-name demo web1
...

ubuntu@jumphost:~$ nova boot --image 9b371320-223b-4950-96b7-f7a2ad51b97c --security-groups remote_mgmt,database  --flavor 245e66c6-edaa-4f9d-aeec-0725fe504f86 --key-name demo db1
...

Nach dem Anlegen können Sie mit nova list prüfen ob die Instanzen eingerichtet wurden:

ubuntu@jumphost:~$ nova list
+--------------------------------------+----------+--------+------------+-------------+----------------------------------------+
| ID                                   | Name     | Status | Task State | Power State | Networks                               |
+--------------------------------------+----------+--------+------------+-------------+----------------------------------------+
| db53e63c-3c13-4940-b966-dc381636ea8d | Jumphost | ACTIVE | None       | Running     | mein-network=192.168.1.2, 212.8.XXX.XX |
| 7195b222-45ff-4d18-820f-bd85c2f8455a | db1      | ACTIVE | None       | Running     | mein-network=192.168.1.5               |
| 47024cab-3b57-4efa-b1b1-9f9d08e1c04d | web1     | ACTIVE | None       | Running     | mein-network=192.168.1.4               |
+--------------------------------------+----------+--------+------------+-------------+----------------------------------------+

Da beide Instanzen nun erfolgreich erstellt wurden können wir nun Apache2 mit PHP auf der Instanz web1 sowie MariaDB auf db1 installieren.

Einrichten von MariaDB auf der Datenbankinstanz

Loggen Sie sich, ausgehend vom Jumphost, per SSH auf der Datenbankinstanz ein. Die interne IP-Adresse der db1 Instanz sehen Sie in der vorher ausgegebenen Instanzliste.

ubuntu@jumphost:~$ ssh ubuntu@192.168.1.5

Bearbeiten Sie als erstes die /etc/network/interfaces Datei und fügen Sie die Adresse vom Jumphost als DNS Server hinzu.

auto eth0
iface eth0 inet dhcp
dns-nameservers 192.168.0.2

Damit die Änderung aktiv wird, starten wir einmal das Netzwerk-Interface neu.

$ ifdown eth0; ifup eth0

Anschließend aktualisieren Sie zu die Paketlisten des apt Paketmanagers und installieren die benötigten Pakete mit folgenden Befehlen:

ubuntu@db1:~$ sudo apt-get update
...
Reading package lists... Done
ubuntu@db1:~$ sudo apt-get install mariadb-server mariadb-client
...

Benutzen Sie nun den MariaDB-Client um eine Datenbank für WordPress anzulegen. Bei der Installation können Sie ein Passwort festlegen. Bitte notieren Sie sich dieses Passwort.

Starten Sie den Client und geben Sie nach dem Start Ihr notiertes Passwort ein:

ubuntu@db1:~$ mysql -u root -p

Fügen Sie nun den folgenden SQL-Code in die Konsole des MariaDB-Clients ein, um eine Datenbank für Ihr WordPress anzulegen.
Ersetzen Sie GEHEIMESPASSWORT gegen ein eigenes Passwort.

CREATE DATABASE IF NOT EXISTS wordpressdb;
GRANT ALL ON wordpressdb.* TO wordpressdb@'192.168.1.%' IDENTIFIED BY 'GEHEIMESPASSWORT';

Sie haben erfolgreich eine leere Datenbank angelegt und können den Client durch Eingabe von quit wieder beenden.
Damit der Zugriff auf die Datenbank auch von anderen Hosts im internen Netz gestattet wird, kommentieren Sie die folgende Zeile in der Datei /etc/mysql/my.cnf ein:

#bind-address           = 127.0.0.1

Anschließend starten Sie die Datenbank neu.

ubuntu@db1:~$ sudo /etc/init.d/mysql restart
* Stopping MariaDB database server mysqld                                                                                                                                                                                                                                                                                       [ OK ]
* Starting MariaDB database server mysqld                                                                                                                                                                                                                                                                                       [ OK ]
* Checking for corrupt, not cleanly closed and upgrade needing tables.

Geben Sie nun exit ein, um zum Jumphost zurück zu kehren.

Einrichten von Apache auf der Webserverinstanz

Loggen Sie sich, wie bereits zuvor bei der Datenbankinstanz, per SSH auf der Webserverinstanz ein. Die interne IP-Adresse der web1 Instanz sehen Sie in der Instanzliste mit dem Kommando nova list.

Wie zuvor bei der Einrichtung der Datenbankinstanz müssen Sie den Jumphost als DNS-Server einrichten. Anschließend aktualisieren Sie zu die Paketlisten des apt Paketmanagers und installieren die benötigten Apache2 und diverse PHP-Pakete mit folgenden Befehlen:

ubuntu@db1:~$ sudo apt-get update
...
Reading package lists... Done
ubuntu@db1:~$ sudo apt-get -y install libapache2-mod-php5 php5-mysql
...

Wechseln Sie nun in das Verzeichnis /var/www/ des Webservers, laden Sie mit wget eine aktuelle Version von WordPress herunter und entpacken Sie die Datei. Anschließend kann die .tar.gz Datei wieder gelöscht werden da diese nicht mehr benötigt wird.

ubuntu@db1:~$ cd /var/www
ubuntu@web1:/var/www$ sudo wget https://wordpress.org/latest.tar.gz
...
ubuntu@web1:/var/www/html$ tar -xzf latest.tar.gz
...
ubuntu@web1:/var/www$ sudo rm latest.tar.gz

Korrigieren Sie nun die Besitzerangaben sowie Schreibberechtigungen für das WordPress-Verzeichnis mit:

ubuntu@db1:~$ sudo chown -R www-data:www-data /var/www/wordpress
ubuntu@db1:~$ sudo chmod -R g+w /var/www/wordpress

Legen Sie den DocumentRoot in das WordPress-Verzeichnis, in dem Sie die Zeile DocumentRoot /var/www/html in der Datei /etc/apache2/sites-enabled/000-default.conf auf DocumentRoot /var/www/wordpress mit Ihrem bevorzugtem Editor (z.B. vi oder joe) ändern.

Laden Sie die Konfiguration des Webservers anschließend mit folgendem Befehl neu:

ubuntu@web1:/var/www$ sudo /etc/init.d/apache2 restart

Die Konfiguration auf dem Webserver ist nun vorerst abgeschlossen. Mit exit können Sie nun auf den Jumphost zurück kehren.

Floating IP für Webserver einrichten

Damit Sie nun auch von Außen auf den Webserver zugreifen können müssen Sie nun noch eine Floating IP für den Webserver einrichten. Geben Sie folgende Befehle an um sich das verfügbare externe Netzwerk anzuzeigen und eine neue Floating IP aus dem Pool zu holen:

ubuntu@jumphost:~$ neutron net-external-list
+--------------------------------------+------------------+------------------------------------------------------+
| id                                   | name             | subnets                                              |
+--------------------------------------+------------------+------------------------------------------------------+
| b68d0b22-4391-4d5b-a715-344a6cd289d0 | external_network | 07b5745c-6a9e-4921-a98e-8274158c8aa7 212.8.XXX.XX/26 |
|                                      |                  | 4285d8bd-b762-46b5-b839-68d07808cb73 212.8.XXX.0/24  |
+--------------------------------------+------------------+------------------------------------------------------+

ubuntu@jumphost:~$ neutron floatingip-create external_network
Created a new floatingip:
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| fixed_ip_address    |                                      |
| floating_ip_address | 212.8.XXX.XX                         |
| floating_network_id | b68d0b22-4391-4d5b-a715-344a6cd289d0 |
| id                  | f0aa312e-4a9f-472e-a112-425f743e97c5 |
| port_id             |                                      |
| router_id           |                                      |
| tenant_id           | 71048925398147b2979f8d580b02f182     |
+---------------------+--------------------------------------+

Die neue Floating IP können Sie nun der Port ID des Webservers zuordnen. Die Port ID des Webservers können Sie mit nova port-list abfragen.

ubuntu@jumphost:~$ neutron port-list
...

Anhand der ausgegebenen IP-Adresse (in diesem Fall 192.18.1.4) können Sie den Webserver identifizieren. Sie können die IP-Adressen ggf. erneut mit der Instanzliste nova list abgleichen.

Mit neutron floatingip-associate ID-DER-FLOATING-IP ID-DES-WEBSERVER-PORT können Sie die IP Verknüpfen.

ubuntu@jumphost:~$ neutron floatingip-associate f0aa312e-4a9f-472e-a112-425f743e97c5 75922644-e900-4f73-a70a-c36810ca4f54
Associated floatingip f0aa312e-4a9f-472e-a112-425f743e97c5

Jetzt können Sie über Ihren Browser die weitere Installation von WordPress vornehmen welche weitestgehend selbsterklärend ist. Rufen Sie dazu die Webseite über die Floating IP in Ihrem Browser auf und folgen Sie den Schritten der Installation. Bei den Angaben zu Ihrer Datenbank geben Sie die zuvor notierten Daten sowie die interne IP des Datenbankservers anstatt localhost an. Sie können sich ggf. erneut mit nova list auf dem Jumphost die Instanzen mit zugehörigen IP Adressen anzeigen lassen.

Herzlichen Glückwunsch, Sie haben nun erfolgreich Ihre erste WordPress Webseite in einer OpenStack Cloud installiert!

zurück zur Übersichtweiter mit QuickStart Tutorial Teil 4