Vernetzung

Vernetzung

In früheren Kapiteln wurden alle Knoten, die die Fraktalanwendung enthalten, an das gleiche Netzwerk angeschlossen.

In diesem Kapitel wird die Networking API vorgestellt. Dies ermöglicht es uns, Netzwerk-Topologien zu erstellen, die den öffentlichen Verkehrszugriff auf die Anwendung vom Verkehr zwischen der API und den Worker-Komponenten trennen. Wir führen auch Lastverteilung für Resilienz ein und schaffen ein sicheres Back-End-Netzwerk für die Kommunikation zwischen Datenbank, Webserver, Dateispeicher und Worker-Komponenten.

Warnung

In diesem Abschnitt wird davon ausgegangen, dass Ihr Cloud-Provider die OpenStack Networking API (Neutron) implementiert hat. Benutzer von Clouds, die Legacy Networking (nova-network) implementiert haben, haben Zugriff auf die Vernetzung über die Compute API. Melden Sie sich im Horizon-Dashboard an und navigieren Sie zu Project->Access % Security->API Access. Wenn Sie einen Service-Endpunkt für die Netzwerk-API sehen, ist Ihre Cloud wahrscheinlich die Netzwerk-API. Wenn Sie noch im Zweifel sind, fragen Sie Ihren Cloud-Anbieter nach weiteren Informationen.

Arbeit mit der CLI

Da die SDKs die OpenStack Networking API nicht vollständig unterstützen, verwendet dieser Abschnitt die Befehlszeilenclients.

Verwenden Sie diese Anleitung, um den Befehlszeilenclient ‚openstack‘ zu installieren: https://docs.openstack.org/cli-reference/common/cli_install_openstack_command_line_clients.html#install-the-clients

Verwenden Sie diese Anleitung, um die notwendigen Variablen für Ihre Cloud in einer ‚openrc‘ Datei einzurichten: https://docs.openstack.org/cli-reference/common/cli_set_environment_variables_using_openstack_rc.html

Stellen Sie sicher, dass Sie eine openrc.sh-Datei haben, sie sourcen, und überprüfen Sie dann, ob Ihr Openstack-Client funktioniert:

$ cat openrc.sh
export OS_USERNAME=your_auth_username
export OS_PASSWORD=your_auth_password
export OS_TENANT_NAME=your_project_name
export OS_AUTH_URL=http://controller:5000/v2.0
export OS_REGION_NAME=your_region_name

$ source openrc.sh

$ openstack --version
3.3.0

Vernetzungsegmentierung

In den traditionellen Rechenzentren sind Netzwerksegmente bestimmten Arten von Netzwerkverkehr gewidmet.

Die Fraktalanwendung, die wir bauen, enthält diese Arten von Netzwerkverkehr:

  • öffentlich zugänglichen Webverkehr
  • API-Verkehr
  • interner Worker-Verkehr

Aus Performance-Gründen ist es sinnvoll, ein Netzwerk für jede Stufe zu haben, so dass der Verkehr von einer Stufe nicht ‚andere Arten von Verkehr‘ ausläuft und die Anwendung fehlschlägt. Darüber hinaus, mit separaten Netzwerken ermöglicht die Kontrolle Zugriff auf Teile der Anwendung einfacher zu verwalten, die Verbesserung der Gesamtsicherheit der Anwendung.

Vor diesem Abschnitt wäre das Netzwerklayout für die Fractal-Anwendung ähnlich dem folgenden Diagramm:

In diesem Netzwerklayout gehen wir davon aus, dass die OpenStack-Cloud, in der Sie Ihre Applikation aufgebaut haben, einen öffentlichen Netzwerk- und Tenant-Router hat, der zuvor von Ihrem Cloud-Provider oder von Ihnen selbst erstellt wurde, und zwar nach den Anweisungen im Anhang.

Viele der Netzwerkkonzepte, die in diesem Abschnitt besprochen werden, sind bereits im obigen Diagramm vorhanden. Ein Tenant Router bietet Routing und externen Zugriff für die Worker-Knoten, und Floating-IP-Adressen sind mit jedem Knoten im Fractal Application Cluster zugeordnet, um den externen Zugriff zu erleichtern.

Am Ende dieses Abschnitts machen Sie einige Änderungen an der Netzwerk-Topologie, indem Sie die OpenStack Networking API verwenden, um das 10.0.1.0/24 Netzwerk zu erstellen, an das die Worker-Knoten angeschlossen sind. Sie verwenden das 10.0.3.0/24 API-Netzwerk, um die Fractal-API-Server anzubringen. Web-Server-Instanzen haben ihr eigenes 10.0.2.0/24 Netzwerk, das von Fraktal-Aficionados weltweit zugänglich ist, indem es Floating-IPs aus dem öffentlichen Netzwerk zuteilt.

Einführung in die Tenant-Vernetzung

Mit der OpenStack Networking API ist der Workflow zur Erstellung einer Netzwerktopologie, die die öffentlich zugängliche Fractals App API vom Worker Back End trennt, wie folgt:

  • Erstellen Sie ein Netzwerk und ein Subnetz für die Webserverknoten.
  • Erstellen Sie ein Netzwerk und ein Subnetz für die Worker-Knoten. Dies ist das private Datennetzwerk.
  • Erstellen Sie einen Router für das private Datennetzwerk.
  • Weisen Sie Floating-IPs zu und weisen Sie sie den Webserverknoten zu.

Netzwerke erstellen

Die meisten Cloud-Provider machen ein öffentliches Netzwerk für Sie zugänglich. Wir werden einen Router an dieses öffentliche Netz anschließen, um den Internet-Zugang zu unseren Instanzen zu gewähren. Nachdem wir diesen Router auch an unsere internen Netzwerke angehängt haben, werden wir aus dem öffentlichen Netz Floating-IPs aus dem öffentlichen Netz zuordnen, für die aus dem Internet zugegriffen werden muss.

Bestätigen Sie, dass wir ein öffentliches Netz haben, indem wir die Netzwerke aufrufen, auf die unser Tenant zugreifen kann. Das öffentliche Netz muss nicht öffentlich benannt werden - es könnte ‚extern‘, ‚net04_ext‘ oder etwas anderes sein - das Wichtigste ist, dass es existiert und verwendet werden kann, um das Internet zu erreichen.

$ openstack network list
+--------------------------------------+------------------+--------------------------------------------------+
| ID                                   | Name             | Subnets                                          |
+--------------------------------------+------------------+--------------------------------------------------+
| 27e6fa33-fd39-475e-b048-6ac924972a03 | public           | b12293c9-a1f4-49e3-952f-136a5dd24980             |
+--------------------------------------+------------------+--------------------------------------------------+

Als nächstes erstellen Sie ein Netzwerk und Subnetz für die Worker.

$ openstack network create worker_network
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2016-11-06T22:28:45Z                 |
| description               |                                      |
| headers                   |                                      |
| id                        | 4d25ff64-eec3-4ab6-9029-f6d4b5a3e127 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| mtu                       | 1450                                 |
| name                      | worker_network                       |
| port_security_enabled     | True                                 |
| project_id                | a59a543373bc4b12b74f07355ad1cabe     |
| provider:network_type     | vxlan                                |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 54                                   |
| revision_number           | 3                                    |
| router:external           | Internal                             |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      | []                                   |
| updated_at                | 2016-11-06T22:28:45Z                 |
+---------------------------+--------------------------------------+


$ openstack subnet create worker_subnet --network worker_network --subnet-range 10.0.1.0/24
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| allocation_pools  | 10.0.1.2-10.0.1.254                  |
| cidr              | 10.0.1.0/24                          |
| created_at        | 2016-11-06T22:34:47Z                 |
| description       |                                      |
| dns_nameservers   |                                      |
| enable_dhcp       | True                                 |
| gateway_ip        | 10.0.1.1                             |
| headers           |                                      |
| host_routes       |                                      |
| id                | 383309b3-184d-4060-a151-a73dcb0606db |
| ip_version        | 4                                    |
| ipv6_address_mode | None                                 |
| ipv6_ra_mode      | None                                 |
| name              | worker_subnet                        |
| network_id        | 4d25ff64-eec3-4ab6-9029-f6d4b5a3e127 |
| project_id        | a59a543373bc4b12b74f07355ad1cabe     |
| revision_number   | 2                                    |
| service_types     |                                      |
| subnetpool_id     | None                                 |
| updated_at        | 2016-11-06T22:34:47Z                 |
+-------------------+--------------------------------------+

Erstellen Sie nun ein Netzwerk und ein Subnetz für die Webserver.

$ openstack network create webserver_network
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2016-11-06T22:36:19Z                 |
| description               |                                      |
| headers                   |                                      |
| id                        | 2410c262-6c27-4e99-8c31-045b60499a01 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| mtu                       | 1450                                 |
| name                      | webserver_network                    |
| port_security_enabled     | True                                 |
| project_id                | a59a543373bc4b12b74f07355ad1cabe     |
| provider:network_type     | vxlan                                |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 96                                   |
| revision_number           | 3                                    |
| router:external           | Internal                             |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      | []                                   |
| updated_at                | 2016-11-06T22:36:19Z                 |
+---------------------------+--------------------------------------+

$ openstack subnet create webserver_subnet --network webserver_network --subnet-range 10.0.2.0/24
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| allocation_pools  | 10.0.2.2-10.0.2.254                  |
| cidr              | 10.0.2.0/24                          |
| created_at        | 2016-11-06T22:37:47Z                 |
| description       |                                      |
| dns_nameservers   |                                      |
| enable_dhcp       | True                                 |
| gateway_ip        | 10.0.2.1                             |
| headers           |                                      |
| host_routes       |                                      |
| id                | 5878afa5-8f1d-4de5-8018-530044a49934 |
| ip_version        | 4                                    |
| ipv6_address_mode | None                                 |
| ipv6_ra_mode      | None                                 |
| name              | webserver_subnet                     |
| network_id        | 2410c262-6c27-4e99-8c31-045b60499a01 |
| project_id        | a59a543373bc4b12b74f07355ad1cabe     |
| revision_number   | 2                                    |
| service_types     |                                      |
| subnetpool_id     | None                                 |
| updated_at        | 2016-11-06T22:37:47Z                 |
+-------------------+--------------------------------------+

Als nächstes erstellen Sie ein Netzwerk und Subnetz für die API-Server.

$ openstack network create api_network
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2016-11-06T22:38:51Z                 |
| description               |                                      |
| headers                   |                                      |
| id                        | 8657f3a3-6e7d-40a1-a979-1a8c54d5e434 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| mtu                       | 1450                                 |
| name                      | api_network                          |
| port_security_enabled     | True                                 |
| project_id                | a59a543373bc4b12b74f07355ad1cabe     |
| provider:network_type     | vxlan                                |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 64                                   |
| revision_number           | 3                                    |
| router:external           | Internal                             |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      | []                                   |
| updated_at                | 2016-11-06T22:38:51Z                 |
+---------------------------+--------------------------------------+

$ openstack subnet create api_subnet --network api_network --subnet-range 10.0.3.0/24
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| allocation_pools  | 10.0.3.2-10.0.3.254                  |
| cidr              | 10.0.3.0/24                          |
| created_at        | 2016-11-06T22:40:15Z                 |
| description       |                                      |
| dns_nameservers   |                                      |
| enable_dhcp       | True                                 |
| gateway_ip        | 10.0.3.1                             |
| headers           |                                      |
| host_routes       |                                      |
| id                | 614e7801-eb35-45c6-8e49-da5bdc9161f5 |
| ip_version        | 4                                    |
| ipv6_address_mode | None                                 |
| ipv6_ra_mode      | None                                 |
| name              | api_subnet                           |
| network_id        | 8657f3a3-6e7d-40a1-a979-1a8c54d5e434 |
| project_id        | a59a543373bc4b12b74f07355ad1cabe     |
| revision_number   | 2                                    |
| service_types     |                                      |
| subnetpool_id     | None                                 |
| updated_at        | 2016-11-06T22:40:15Z                 |
+-------------------+--------------------------------------+

Jetzt haben Sie die Netzwerke erstellt, gehen Sie vor und erstellen Sie zwei Floating IPs, für Web-Server. Stellen Sie sicher, dass Sie ‚public‘ durch den Namen des öffentlichen/externen Netzwerks ersetzen, das von Ihrem Cloud-Provider angeboten wird.

$ openstack floating ip create public
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| created_at          | 2016-11-06T22:47:30Z                 |
| description         |                                      |
| fixed_ip_address    | None                                 |
| floating_ip_address | 172.24.4.2                           |
| floating_network_id | 27e6fa33-fd39-475e-b048-6ac924972a03 |
| headers             |                                      |
| id                  | 820385df-36a7-415d-955c-6ff662fdb796 |
| port_id             | None                                 |
| project_id          | a59a543373bc4b12b74f07355ad1cabe     |
| revision_number     | 1                                    |
| router_id           | None                                 |
| status              | DOWN                                 |
| updated_at          | 2016-11-06T22:47:30Z                 |
+---------------------+--------------------------------------+


$ openstack floating ip create public
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| created_at          | 2016-11-06T22:48:45Z                 |
| description         |                                      |
| fixed_ip_address    | None                                 |
| floating_ip_address | 172.24.4.12                          |
| floating_network_id | 27e6fa33-fd39-475e-b048-6ac924972a03 |
| headers             |                                      |
| id                  | 3d9f1591-a31e-4684-8346-f4bb33a176b0 |
| port_id             | None                                 |
| project_id          | a59a543373bc4b12b74f07355ad1cabe     |
| revision_number     | 1                                    |
| router_id           | None                                 |
| status              | DOWN                                 |
| updated_at          | 2016-11-06T22:48:45Z                 |
+---------------------+--------------------------------------+

Bemerkung

Die Welt verliert IPv4-Adressen. Wenn Sie den Fehler ‚Keine weitere IP-Adressen im Netzwerk‘ erhalten, wenden Sie sich an Ihren Cloud-Administrator. Sie können auch nach IPv6 fragen :)

Verbindung zum Internet herstellen

Die meisten Instanzen benötigen Zugang zum Internet. Die Instanzen in Ihrer Fractals App sind keine Ausnahme! Fügen Sie Router hinzu, um den Datenverkehr zwischen den verschiedenen Netzwerken, die Sie verwenden, zu übergeben.

$ openstack router create project_router
+-------------------------+--------------------------------------+
| Field                   | Value                                |
+-------------------------+--------------------------------------+
| admin_state_up          | UP                                   |
| availability_zone_hints |                                      |
| availability_zones      |                                      |
| created_at              | 2016-11-06T22:49:59Z                 |
| description             |                                      |
| distributed             | False                                |
| external_gateway_info   | null                                 |
| flavor_id               | None                                 |
| ha                      | False                                |
| headers                 |                                      |
| id                      | e11eba23-961c-43d7-8da0-561abdad880c |
| name                    | project_router                       |
| project_id              | a59a543373bc4b12b74f07355ad1cabe     |
| revision_number         | 2                                    |
| routes                  |                                      |
| status                  | ACTIVE                               |
| updated_at              | 2016-11-06T22:49:59Z                 |
+-------------------------+--------------------------------------+

Geben Sie ein externes Gateway für Ihren Router an, um OpenStack mitzuteilen, welches Netzwerk für den Internet-Zugang verwendet werden soll.

$ openstack router set project_router --external-gateway public
Set gateway for router project_router

$ openstack router show project_router
+-------------------------+-------------------------------------------------------------------------+
| Field                   | Value                                                                   |
+-------------------------+-------------------------------------------------------------------------+
| admin_state_up          | UP                                                                      |
| availability_zone_hints |                                                                         |
| availability_zones      | nova                                                                    |
| created_at              | 2016-11-06T22:49:59Z                                                    |
| description             |                                                                         |
| distributed             | False                                                                   |
| external_gateway_info   | {"network_id": "27e6fa33-fd39-475e-b048-6ac924972a03", "enable_snat":   |
|                         | true, "external_fixed_ips": [{"subnet_id":                              |
|                         | "d02006a5-3d10-41f1-a349-6024af41cda0", "ip_address": "172.24.4.13"},   |
|                         | {"subnet_id": "b12293c9-a1f4-49e3-952f-136a5dd24980", "ip_address":     |
|                         | "2001:db8::9"}]}                                                        |
| flavor_id               | None                                                                    |
| ha                      | False                                                                   |
| id                      | e11eba23-961c-43d7-8da0-561abdad880c                                    |
| name                    | project_router                                                          |
| project_id              | a59a543373bc4b12b74f07355ad1cabe                                        |
| revision_number         | 5                                                                       |
| routes                  |                                                                         |
| status                  | ACTIVE                                                                  |
| updated_at              | 2016-11-06T22:53:04Z                                                    |
+-------------------------+-------------------------------------------------------------------------+

Jetzt fügen Sie Ihren Router an die Worker-, API- und Web-Server-Subnetze an.

$ openstack router add subnet project_router worker_subnet

$ openstack router add subnet project_router api_subnet

$ openstack router add subnet project_router webserver_subnet

Booten eines Workers

Nun, da Sie die Netzwerk-Infrastruktur vorbereitet haben, können Sie voran gehen und eine Instanz auf ihr booten. Vergewissern Sie sich, dass Sie geeignete Varianten- und Abbildwerte für Ihre Cloud verwenden - siehe get_started, wenn Sie noch nicht dort waren.

$ nova boot --flavor m1.tiny --image cirros-0.3.3-x86_64-disk --nic net-id=953224c6-c510-45c5-8a29-37deffd3d78e worker1
+--------------------------------------+-----------------------------------------------------------------+
| Property                             | Value                                                           |
+--------------------------------------+-----------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                          |
| OS-EXT-AZ:availability_zone          | nova                                                            |
| 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                            | 9vU8KSY4oDht                                                    |
| config_drive                         |                                                                 |
| created                              | 2015-03-30T05:26:04Z                                            |
| flavor                               | m1.tiny (1)                                                     |
| hostId                               |                                                                 |
| id                                   | 9e188a47-a246-463e-b445-027d6e2966e0                            |
| image                                | cirros-0.3.3-x86_64-disk (ad605ff9-4593-4048-900b-846d6401c193) |
| key_name                             | -                                                               |
| metadata                             | {}                                                              |
| name                                 | worker1                                                         |
| os-extended-volumes:volumes_attached | []                                                              |
| progress                             | 0                                                               |
| security_groups                      | default                                                         |
| status                               | BUILD                                                           |
| tenant_id                            | f77bf3369741408e89d8f6fe090d29d2                                |
| updated                              | 2015-03-30T05:26:04Z                                            |
| user_id                              | a61292a5691d4c6c831b7a8f07921261                                |
+--------------------------------------+-----------------------------------------------------------------+

Lastverteilung

Nach dem Trennen der Fractal-Worker-Knoten in ihre eigenen Netzwerke ist der nächste logische Schritt, den Fractal-API-Dienst zu einem Load-Balancer zu verschieben, so dass mehrere API-Worker Anfragen verarbeiten können. Durch die Verwendung eines Load-Balancers kann der API-Service in ähnlicher Weise wie die Worker-Knoten skaliert werden.

Neutron LbaaS API

Bemerkung

Dieser Abschnitt basiert auf der Neutron LBaaS API Version 1.0 https://docs.openstack.org/admin-guide/networking_adv-features.html#basic-load-balancer-as-a-service-operations

Die OpenStack Networking API bietet Unterstützung für das Erstellen von Loadbalancern, mit denen der Fractal App Web Service skaliert werden kann. Im folgenden Beispiel erstellen wir zwei Compute-Instanzen über die Compute API und instanziieren dann einen Load Balancer, der eine virtuelle IP (VIP) für den Zugriff auf den von den beiden Compute-Knoten angebotenen Webdienst verwendet. Das Ergebnis ist die folgende Netzwerktopologie:

libcloud support hinzugefügt 0.14: https://developer.rackspace.com/blog/libcloud-0-dot-14-released/

Beginnen Sie mit dem Betrachten, was bereits vorhanden ist.

$ openstack network list
+--------------------------------------+-------------------+---------------------------------------+
| ID                                   | Name              | Subnets                               |
+--------------------------------------+-------------------+---------------------------------------+
| 2410c262-6c27-4e99-8c31-045b60499a01 | webserver_network | 5878afa5-8f1d-4de5-8018-530044a49934  |
| 27e6fa33-fd39-475e-b048-6ac924972a03 | public            | b12293c9-a1f4-49e3-952f-136a5dd24980, |
|                                      |                   | d02006a5-3d10-41f1-a349-6024af41cda0  |
+--------------------------------------+-------------------+---------------------------------------+

Machen Sie weiter und erstellen Sie zwei Instanzen.

$ nova boot --flavor 1 --image 53ff0943-99ba-42d2-a10d-f66656372f87 --min-count 2 test
+--------------------------------------+-----------------------------------------------------------------+
| Property                             | Value                                                           |
+--------------------------------------+-----------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                          |
| OS-EXT-AZ:availability_zone          | nova                                                            |
| 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                            | z84zWFCcpppH                                                    |
| config_drive                         |                                                                 |
| created                              | 2015-04-02T02:45:09Z                                            |
| flavor                               | m1.tiny (1)                                                     |
| hostId                               |                                                                 |
| id                                   | 8d579f4a-116d-46b9-8db3-aa55b76f76d8                            |
| image                                | cirros-0.3.3-x86_64-disk (53ff0943-99ba-42d2-a10d-f66656372f87) |
| key_name                             | -                                                               |
| metadata                             | {}                                                              |
| name                                 | test-1                                                          |
| os-extended-volumes:volumes_attached | []                                                              |
| progress                             | 0                                                               |
| security_groups                      | default                                                         |
| status                               | BUILD                                                           |
| tenant_id                            | 0cb06b70ef67424b8add447415449722                                |
| updated                              | 2015-04-02T02:45:09Z                                            |
| user_id                              | d95381d331034e049727e2413efde39f                                |
+--------------------------------------+-----------------------------------------------------------------+

Bestätigen Sie, dass sie hinzugefügt wurden:

$ nova list
+--------------------------------------+--------+--------+------------+-------------+------------------+
| ID                                   | Name   | Status | Task State | Power State | Networks         |
+--------------------------------------+--------+--------+------------+-------------+------------------+
| 8d579f4a-116d-46b9-8db3-aa55b76f76d8 | test-1 | ACTIVE | -          | Running     | private=10.0.2.4 |
| 8fadf892-b6e9-44f4-b132-47c6762ffa2c | test-2 | ACTIVE | -          | Running     | private=10.0.2.3 |
+--------------------------------------+--------+--------+------------+-------------+------------------+

Schauen Sie, welche Ports verfügbar sind:

$ openstack port list
+--------------------------------------+------+-------------------+--------------------------------------------+
| ID                                   | Name | MAC Address       | Fixed IP Addresses                         |
+--------------------------------------+------+-------------------+--------------------------------------------+
| 11b38c90-f55e-41a7-b68b-0d434d66bfa2 |      | fa:16:3e:21:95:a1 | ip_address='10.0.0.1', subnet_id='e7f75523 |
|                                      |      |                   | -ae4b-4611-85a3-07efa2e1ba0f'              |
| 523331cf-5636-4298-a14c-f545bb32abcf |      | fa:16:3e:f8:a1:81 | ip_address='10.0.0.2', subnet_id='e7f75523 |
|                                      |      |                   | -ae4b-4611-85a3-07efa2e1ba0f'              |
|                                      |      |                   | ip_address='2001:db8:8000:0:f816:3eff:fef8 |
|                                      |      |                   | :a181', subnet_id='f8628fd8-8d61-43e2-9dc8 |
|                                      |      |                   | -a03d25443b7d'                             |
| cbba0f37-c1a0-4fc8-8722-68e42de7df16 |      | fa:16:3e:39:a6:18 | ip_address='2001:db8:8000::1', subnet_id=' |
|                                      |      |                   | f8628fd8-8d61-43e2-9dc8-a03d25443b7d'      |
+--------------------------------------+------+-------------------+--------------------------------------------+

Als nächstes erstellen Sie zusätzliche Floating-IPs. Geben Sie die festen IP-Adressen an, auf die sie verweisen sollen, und die Ports, die sie verwenden sollten:

$ openstack floating ip create public --fixed-ip-address 10.0.0.2 --port 523331cf-5636-4298-a14c-f545bb32abcf
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| created_at          | 2016-11-06T23:23:29Z                 |
| description         |                                      |
| fixed_ip_address    | 10.0.0.2                             |
| floating_ip_address | 172.24.4.2                           |
| floating_network_id | 27e6fa33-fd39-475e-b048-6ac924972a03 |
| headers             |                                      |
| id                  | 0ed15644-4290-4adf-91d4-5713eea895e5 |
| port_id             | 523331cf-5636-4298-a14c-f545bb32abcf |
| project_id          | 3d2db0593c8045a392fd18385b401b5b     |
| revision_number     | 1                                    |
| router_id           | 309d1402-a373-4022-9ab8-6824aad1a415 |
| status              | DOWN                                 |
| updated_at          | 2016-11-06T23:23:29Z                 |
+---------------------+--------------------------------------+

$ openstack floating ip create public --fixed-ip-address 10.0.2.4 --port 462c92c6-941c-48ab-8cca-3c7a7308f580
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| created_at          | 2016-11-06T23:25:26Z                 |
| description         |                                      |
| fixed_ip_address    | 10.0.0.1                             |
| floating_ip_address | 172.24.4.8                           |
| floating_network_id | 27e6fa33-fd39-475e-b048-6ac924972a03 |
| headers             |                                      |
| id                  | 68082405-82f2-4072-b5c3-7047df527a8a |
| port_id             | 11b38c90-f55e-41a7-b68b-0d434d66bfa2 |
| project_id          | 3d2db0593c8045a392fd18385b401b5b     |
| revision_number     | 1                                    |
| router_id           | 309d1402-a373-4022-9ab8-6824aad1a415 |
| status              | DOWN                                 |
| updated_at          | 2016-11-06T23:25:26Z                 |
+---------------------+--------------------------------------+

Sie sind bereit, Mitglieder für den Load Balancer Pool zu erstellen, die auf die Floating-IPs verweisen:

$ neutron lb-member-create --address 203.0.113.21 --protocol-port 80 mypool
Created a new member:
+--------------------+--------------------------------------+
| Field              | Value                                |
+--------------------+--------------------------------------+
| address            | 203.0.113.21                         |
| admin_state_up     | True                                 |
| id                 | 679966a9-f719-4df0-86cf-3a24d0433b38 |
| pool_id            | 600496f0-196c-431c-ae35-a0af9bb01d32 |
| protocol_port      | 80                                   |
| status             | PENDING_CREATE                       |
| status_description |                                      |
| tenant_id          | 0cb06b70ef67424b8add447415449722     |
| weight             | 1                                    |
+--------------------+--------------------------------------+

$ neutron lb-member-create --address 203.0.113.22 --protocol-port 80 mypool
Created a new member:
+--------------------+--------------------------------------+
| Field              | Value                                |
+--------------------+--------------------------------------+
| address            | 203.0.113.22                         |
| admin_state_up     | True                                 |
| id                 | f3ba0605-4926-4498-b86d-51002892e93a |
| pool_id            | 600496f0-196c-431c-ae35-a0af9bb01d32 |
| protocol_port      | 80                                   |
| status             | PENDING_CREATE                       |
| status_description |                                      |
| tenant_id          | 0cb06b70ef67424b8add447415449722     |
| weight             | 1                                    |
+--------------------+--------------------------------------+

Sie sollten sie in der Mitgliederliste sehen können:

$ neutron lb-member-list
+--------------------------------------+--------------+---------------+--------+----------------+--------+
| id                                   | address      | protocol_port | weight | admin_state_up | status |
+--------------------------------------+--------------+---------------+--------+----------------+--------+
| 679966a9-f719-4df0-86cf-3a24d0433b38 | 203.0.113.21 |            80 |      1 | True           | ACTIVE |
| f3ba0605-4926-4498-b86d-51002892e93a | 203.0.113.22 |            80 |      1 | True           | ACTIVE |
+--------------------------------------+--------------+---------------+--------+----------------+--------+

Erstellen Sie nun einen Gesundheitsmonitor, der sicherstellt, dass Mitglieder des Load Balancer Pools aktiv sind und auf Anfragen antworten können. Wenn ein Mitglied im Pool stirbt oder nicht reagiert, wird das Mitglied aus dem Pool entfernt, so dass Client-Anfragen an ein anderes aktives Mitglied weitergeleitet werden.

$ neutron lb-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3
Created a new health_monitor:
+----------------+--------------------------------------+
| Field          | Value                                |
+----------------+--------------------------------------+
| admin_state_up | True                                 |
| delay          | 3                                    |
| expected_codes | 200                                  |
| http_method    | GET                                  |
| id             | 663345e6-2853-43b2-9ccb-a623d5912345 |
| max_retries    | 3                                    |
| pools          |                                      |
| tenant_id      | 0cb06b70ef67424b8add447415449722     |
| timeout        | 3                                    |
| type           | HTTP                                 |
| url_path       | /                                    |
+----------------+--------------------------------------+
$ neutron lb-healthmonitor-associate 663345e6-2853-43b2-9ccb-a623d5912345 mypool
Associated health monitor 663345e6-2853-43b2-9ccb-a623d5912345

Erstellen Sie nun eine virtuelle IP, die für den direkten Verkehr zwischen den verschiedenen Mitgliedern des Pools verwendet wird:

$ neutron lb-vip-create --name myvip --protocol-port 80 --protocol HTTP --subnet-id 47fd3ff1-ead6-4d23-9ce6-2e66a3dae425 mypool
Created a new vip:
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| address             | 203.0.113.63                         |
| admin_state_up      | True                                 |
| connection_limit    | -1                                   |
| description         |                                      |
| id                  | f0bcb66e-5eeb-447b-985e-faeb67540c2f |
| name                | myvip                                |
| pool_id             | 600496f0-196c-431c-ae35-a0af9bb01d32 |
| port_id             | bc732f81-2640-4622-b624-993a5ae185c5 |
| protocol            | HTTP                                 |
| protocol_port       | 80                                   |
| session_persistence |                                      |
| status              | PENDING_CREATE                       |
| status_description  |                                      |
| subnet_id           | 47fd3ff1-ead6-4d23-9ce6-2e66a3dae425 |
| tenant_id           | 0cb06b70ef67424b8add447415449722     |
+---------------------+--------------------------------------+

Und bestätigen das es vorhanden ist:

$ neutron lb-vip-list
+--------------------------------------+-------+--------------+----------+----------------+--------+
| id                                   | name  | address      | protocol | admin_state_up | status |
+--------------------------------------+-------+--------------+----------+----------------+--------+
| f0bcb66e-5eeb-447b-985e-faeb67540c2f | myvip | 203.0.113.63 | HTTP     | True           | ACTIVE |
+--------------------------------------+-------+--------------+----------+----------------+--------+

Jetzt schauen Sie sich das große Bild an.

Endergebnis

Mit der Ergänzung des Load Balancers spiegelt die Netzwerktopologie der Fractal App die modulare Art der Applikation selbst wider.

Nächste Schritte

Sie sollten jetzt ziemlich sicher sein, mit der Netzwerk-API zu arbeiten. Um Aufrufe zu sehen, die wir nicht abgedeckt haben, sehen Sie die Datenträgerdokumentation Ihres SDK oder versuchen Sie einen dieser Tutorial Schritte:

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.