OpenStack Getting Started (Command Line)

We bieden een publieke cloud op basis van OpenStack. Dit robuuste en krachtige cloudplatform is ideaal voor bedrijven die een high-performance Cloud-omgeving nodig hebben, op zoek zijn naar extreme schaalbaarheid, gebruikmaken van eigen images, of een hoge mate van netwerkcomplexiteit hebben.

 OpenStack is een verzameling van open source cloudcomponenten (compute, networking en storage) voor het bouwen en in gebruik nemen van een cloudplatform voor publieke, private en hybride clouds. Ondersteund door onder andere HP, Cisco, Red Hat en IBM.

OpenStack heeft een enorm momentum. Veel cloudgebruikers willen namelijk een open platform om hun toekomstige cloud-infrastructuur op te bouwen, zonder bang te hoeven zijn voor ‘vendor lock-in’ bij eerste-generatie cloudaanbieders als Amazon Web Services en Microsoft.

In deze handleiding lopen we door alle stappen die nodig zijn om een nieuwe instance op te starten in een nieuw, leeg project via de command line tools. Aan het einde van de handleiding heeft u een project met alle onderdelen, zoals security groups, ssh keys en netwerkonderdelen. Zie onze andere gids voor de Horizon versie: https://www.cloudvps.nl/openstack/openstack-getting-started

U heeft een OpenStack 2.0 project nodig. U kunt hier lezen hoe u deze aanmaakt als u die nog niet heeft: https://www.cloudvps.nl/openstack/hoe-maak-ik-een-openstack-2.0-project

 

 

Command Line Clients

 

Voor deze handleiding heeft u de OpenStack command line clients nodig. Ook heeft u een OpenStack RC bestand nodig met daarin uw gegevens om in te loggen.

In de officiele documentatie kunt u lezen hoe u de command line clients moet installeren. We geven onderstaand een korte instructie voor Ubuntu 16.04. Als u een Windows machine gebruikt voor beheer raden we aan dat u een virtuele machine opstart met Ubuntu. 

Middels de package manager installeert u de clients:

sudo apt-get install python-novaclient \
python-glanceclient \
python-neutronclient \
python-swiftclient \
python-neutronclient

Voor de toegang heeft u een OpenStack RC bestand nodig. Deze kunt u in Horizon downloaden via het menu "Compute" / "Access & Security", tabblad "API Access". Kies de knop "Download OpenStack RC v3 file". Sla dit bestand op en source het in de shell:

source "<projectnaam>-openrc.sh"

Daarna voert u uw password in:

Please enter your OpenStack Password:

Nu kunt u testen of de client goed geladen is:

nova list
+----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+----+------+--------+------------+-------------+----------+
+----+------+--------+------------+-------------+----------+


Als u het volgende krijgt:

ERROR (CommandError): You must provide a username or user id via --os-username, --os-user-id, env[OS_USERNAME] or env[OS_USER_ID]

dan is uw password of RC bestand verkeerd. Als de clients goed geinstalleerd zijn kunnen we verder met het aanmaken van de resources.


Publiek of Prive netwerk

Als u een instance maakt met alleen het publieke netwerk (geen prive netwerk) dan kunt u de stappen 'Netwerk maken' overslaan.

 

Security Groups aanmaken

Security groups zijn firewallregels voor uw instances. U kunt ze gebruiken om bepaald verkeer of poorten toe te staan of te limiteren. De standaard security groups staan geen enkel inkomend verkeer toe, u moet daarom zelf een security group aanmaken.

Maak de security group aan, in dit voorbeeld "allow-web-management":

neutron security-group-create \
--description "Web and SSH allowed" \
allow-web-management

Output:

Created a new security_group:
+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| contrail:fq_name     | default-domain                       |
|                      | BXL00009 remy-documentation          |
|                      | allow-web-management                 |
| description          | Web and SSH allowed                  |
| id                   | 30fb52c9-6862-437c-b748-b5f71866849a |
| name                 | allow-web-management                 |
| security_group_rules |                                      |
| tenant_id            |                                      |
+----------------------+--------------------------------------+

 

Voeg de volgende ingress regels toe aan deze security group:

  • ALL ICMP
  • HTTP
  • HTTPS
  • SSH

 

neutron security-group-rule-create \
--direction ingress \
--ethertype IPv4 \
--port-range-min 22 \
--port-range-max 22 \
--protocol \
tcp allow-web-management

Output:

Created a new security_group_rule:
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| direction         | ingress                              |
| ethertype         | IPv4                                 |
| id                | 2a3580a9-d881-4349-af91-c80544a269ac |
| port_range_max    | 22                                   |
| port_range_min    | 22                                   |
| protocol          | tcp                                  |
| remote_group_id   |                                      |
| remote_ip_prefix  |                                      |
| security_group_id | 30fb52c9-6862-437c-b748-b5f71866849a |
| tenant_id         |                                      |
+-------------------+--------------------------------------+

Herhaal dit voor de andere protocollen en poorten:

neutron security-group-rule-create \
--direction ingress \
--ethertype IPv4  \
--protocol icmp \
allow-web-management
neutron security-group-rule-create \
--direction ingress \
--ethertype IPv4 \
--port-range-min 80 \
--port-range-max 80 \
--protocol tcp \
allow-web-management
neutron security-group-rule-create \
--direction ingress \
--ethertype IPv4 \
--port-range-min 443 \
--port-range-max 443 \
--protocol tcp \
allow-web-management

Indien gewenst kunt u de regels voor een specifiek IP limiteren door een CIDR range op te geven.


SSH Key toevoegen

SSH wordt gebruikt om uw instance te beheren via de commandline. Onze images hebben Cloud Init en zullen automatish bij de eerste opstart deze key plaatsen zodat u er gelijk mee kunt inloggen.

Als u niet weet hoe u een SSH key moet aanmaken, lees dan deze handleiding voor meer informatie.

Plaats het publieke deel van uw SSH key in een bestand genaamd "sshkey" middels een teksteditor en voeg de key toe:

nova keypair-add --pub-key sshkey SSHKey

Er is geen output. Middels onderstaande commando kunt u controleren welke keys er staan:

nova keypair-list
+-----------------+------+-------------------------------------------------+
| Name            | Type | Fingerprint                                     |
+-----------------+------+-------------------------------------------------+
| SSHKey          | ssh  | 1b:7b:73:7c:d8:7a:c6:29:ef:68:43:98:99:ad:34:9e |
+-----------------+------+-------------------------------------------------+

 

Netwerk aanmaken

Als u een instance wilt met alleen een publiek IP dan kunt u de volgende stappen overslaan tot aan "Instance aanmaken". Als u een instance in een prive netwerk wilt dan moeten er een aantal componenten aangemaakt worden.

Een publiek IP wordt verwijderd als u een instance verwijderd en u kunt dit IP niet terug krijgen. Aan een instance met een prive IP kunt u een floating IP koppelen. Dit floating ip blijft beschikbaar in uw account als u de instance verwijderd en kan aan andere instances gekoppeld worden. U kunt alleen een floating IP gebruiken als de instance in een prive netwerk zit.

Maak het netwerk aan:

neutron net-create "Netwerk"

Output:

Created a new network:
+-------------------------+--------------------------------------+
| Field                   | Value                                |
+-------------------------+--------------------------------------+
| admin_state_up          | True                                 |
| contrail:fq_name        | default-domain                       |
|                         | BXL00009 remy-documentation          |
|                         | Netwerk                              |
| contrail:instance_count | 0                                    |
| id                      | 656464d4-e296-4284-8605-d3a32c5c2233 |
| name                    | Netwerk                              |
| port_security_enabled   | True                                 |
| router:external         | False                                |
| shared                  | False                                |
| status                  | ACTIVE                               |
| subnets                 |                                      |
| tenant_id               |                                      |
+-------------------------+--------------------------------------+

Maak een subnet aan in dit nieuwe netwerk:

neutron subnet-create --name "Subnet" \
--dns-nameserver 8.8.8.8 \
Netwerk \
10.42.42.0/24

Output:

Created a new subnet:
+-------------------+------------------------------------------------+
| Field             | Value                                          |
+-------------------+------------------------------------------------+
| allocation_pools  | {"start": "10.42.42.2", "end": "10.42.42.254"} |
| cidr              | 10.42.42.0/24                                  |
| dns_nameservers   | 8.8.8.8                                        |
| enable_dhcp       | True                                           |
| gateway_ip        | 10.42.42.1                                     |
| host_routes       |                                                |
| id                | 1809d59e-3f3a-41e4-9e5d-bcef40744e4c           |
| ip_version        | 4                                              |
| ipv6_address_mode |                                                |
| ipv6_ra_mode      |                                                |
| name              | Subnet                                         |
| network_id        | 656464d4-e296-4284-8605-d3a32c5c2233           |
| tenant_id         |                                                |
+-------------------+------------------------------------------------+

 

Router aanmaken

Om het netwerk toegang tot het internet te geven heeft u een router nodig. De router zorgt er net als thuis voor dat al het verkeer door de router naar buiten gaat.

Maak de router aan:

neutron router-create "Router"

Output:

Created a new router:
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| admin_state_up        | True                                 |
| contrail:fq_name      | default-domain                       |
|                       | BXL00009 remy-documentation          |
|                       | Router                               |
| external_gateway_info |                                      |
| id                    | d193789c-3215-403c-9a1c-55b51de245c5 |
| name                  | Router                               |
| status                | ACTIVE                               |
| tenant_id             |                                      |
+-----------------------+--------------------------------------+

De router moet een gateway krijgen in het externe netwerk (floating). Met onderstaand commando koppelen we de router aan het externe netwerk:

neutron router-gateway-set Router floating

Output:

Set gateway for router Router

Nu moeten we de router koppelen aan het interne netwerk zodat het interne netwerk deze router gaat gebruiken:

neutron router-interface-add Router Subnet

Output:

Added interface 20e42a0a-5a02-49e7-9339-bffdeb348b52 to router Router.

We kunnen nu onze eerste instance opstarten.

 

Instance aanmaken

Middels de nova client gaan we nu onze instance opstarten. In dit voorbeeld gebruiken we de volgende gegevens:

  • Image source: "Ubuntu 16.04"
  • Availability Zone: "AMS-EQ1"
  • Flavor: "Standard 1GB"
  • Network: "net-public" of ons prive netwerk "Netwerk"
  • Security group: "allow-web-management"
  • Key Pair: "SSHKey"
  • Naam: "Instance"

Private Netwerk:

nova boot --flavor="Standard 1GB" \
--image "Ubuntu 16.04 (LTS)" \
--nic net-name=Netwerk \
--security-groups=allow-web-management \
--key SSHKey \
--availability-zone AMS-EQ1 \
Instance

Public Netwerk:

nova boot --flavor="Standard 1GB" \
--image "Ubuntu 16.04 (LTS)" \
--nic net-name=net-public \
--security-groups=allow-web-management \
--key SSHKey \
--availability-zone AMS-EQ1 \
Instance

Output:

+--------------------------------------+-----------------------------------------------------------+
| Property                             | Value                                                     |
+--------------------------------------+-----------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                    |
| OS-EXT-AZ:availability_zone          | AMS-EQ1                                                   |
| OS-EXT-STS:power_state               | 0                                                         |
| OS-EXT-STS:task_state                | scheduling                                                |
| OS-EXT-STS:vm_state                  | building                                                  |
| OS-SRV-USG:launched_at               | -                                                         |
| OS-SRV-USG:terminated_at             | -                                                         |
| accessIPv4                           |                                                           |
| accessIPv6                           |                                                           |
| adminPass                            | hunter2                                                   |
| config_drive                         |                                                           |
| created                              | 2017-08-02T10:10:58Z                                      |
| description                          | -                                                         |
| flavor                               | Standard 1GB (1001)                                       |
| hostId                               |                                                           |
| id                                   | 0113f173-2c0c-4704-b656-0df2fa0be5a5                      |
| image                                | Ubuntu 16.04 (LTS) (cb2c51a5-fb8e-433c-a05e-f1fc8b2e0c22) |
| key_name                             | SSHKey                                                    |
| locked                               | False                                                     |
| metadata                             | {}                                                        |
| name                                 | Instance                                                  |
| os-extended-volumes:volumes_attached | []                                                        |
| progress                             | 0                                                         |
| security_groups                      | allow-web-management                                      |
| status                               | BUILD                                                     |
| tenant_id                            |                                                           |
| updated                              | 2017-08-02T10:10:58Z                                      |
| user_id                              | k2k:                                                      |
+--------------------------------------+-----------------------------------------------------------+

In het overzichtsscherm staat de instance erbij, eerst in de status "Spawning" en een paar seconden later op "Running".

U kunt met onderstaand commando een overzicht van uw instances zien:

nova list

Output:

+--------------------------------------+----------+--------+------------+-------------+--------------------+
| ID                                   | Name     | Status | Task State | Power State | Networks           |
+--------------------------------------+----------+--------+------------+-------------+--------------------+
| 0113f173-2c0c-4704-b656-0df2fa0be5a5 | Instance | ACTIVE | -          | Running     | Netwerk=10.42.42.3 |
+--------------------------------------+----------+--------+------------+-------------+--------------------+

Als de instance een publiek IP heeft kunt u gelijk via SSH inloggen. Als de instance een private IP heeft moet u eerst een floating IP koppelen.

 


Floating IP Koppelen

Eerst registreren we een floating IP, deze komt uit het "floating" netwerk:

neutron floatingip-create floating

Output:

Created a new floatingip:
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| fixed_ip_address    |                                      |
| floating_ip_address | 83.96.236.55                         |
| floating_network_id | f9c73cd5-9e7b-4bfd-89eb-c2f4f584c326 |
| id                  | bfb450b9-aea2-427e-87b5-137968ce2fb6 |
| port_id             |                                      |
| router_id           |                                      |
| status              | ACTIVE                               |
| tenant_id           |                                      |
+---------------------+--------------------------------------+

We kunnen dit floating IP nu koppelen aan de instance:

nova floating-ip-associate Instance 83.96.236.55

Dit commando heeft geen output. Middels 'nova list' kunnen we controleren of het floating IP gekoppeld is:

+--------------------------------------+----------+--------+------------+-------------+----------------------------------+
| ID                                   | Name     | Status | Task State | Power State | Networks                         |
+--------------------------------------+----------+--------+------------+-------------+----------------------------------+
| 0113f173-2c0c-4704-b656-0df2fa0be5a5 | Instance | ACTIVE | -          | Running     | Netwerk=10.42.42.3, 83.96.236.55 |
+--------------------------------------+----------+--------+------------+-------------+----------------------------------+

 

Afgerond

U kunt nu via SSH inloggen op de nieuwe instance en doen wat u wilt. Gefeliciteerd, uw eerste OpenStack instance is aangemaakt.