IBM Cloud Docs
Konfigurieren eines virtuellen Rechenzentrums in VMware Cloud Foundation as a Service mit Terraform

Konfigurieren eines virtuellen Rechenzentrums in VMware Cloud Foundation as a Service mit Terraform

Für dieses Lernprogramm können Kosten anfallen. Mit dem Kostenschätzer können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung generieren.

Dieses Tutorial demonstriert die grundlegenden Schritte zur Inbetriebnahme eines IBM Cloud® for VMware Cloud Foundation as a Service ein- oder mehrmandantenfähigen virtuellen Rechenzentrums (VDC) nach der anfänglichen Instanzbereitstellung. Dieses Tutorial sollte etwa 20-30 Minuten in Anspruch nehmen und setzt voraus, dass eine VMware Cloud Foundation as a Service Instanz und ein VDC bereits bereitgestellt wurden. In diesem Tutorial wird ein Beispiel-Terraform-Template verwendet, das bei Bedarf für Ihren Anwendungsfall angepasst und verändert werden kann.

Ziele

In diesem Lernprogramm lernen Sie:

  • Wie man VDC-Netzwerke mit Terraform erstellt.
  • Wie Sie mit Terraform virtuelle Maschinen (VMs) in Ihren VDC-Netzwerken erstellen.
  • So konfigurieren Sie Network Address Translation (NAT) und Firewall (FW)-Regeln auf Ihrem VDC-Edge-Gateway mit Terraform.

Das folgende Diagramm gibt einen Überblick über die zu implementierende Lösung.

des

  1. Verwenden Sie IBM Cloud Console, um ein VDC in Ihrer Single Tenant-Instanz zu erstellen. Ihre Instanz kann ein oder mehrere VDCs haben, so dass Sie ein spezielles VDC für Testzwecke haben können. Dieses Beispiel-VDC verwendet nur einen 2 IOPS/GB Speicherpool.
  2. Wenn ein VDC erstellt wird, werden automatisch ein Edge Gateway und externe Netzwerke erstellt. Externes Netzwerk bietet Ihnen Internetzugang, und ein IP-Adressblock von /29 mit 6 nutzbaren öffentlichen IP-Adressen wird bereitgestellt.
  3. Terraform-Vorlagen werden verwendet, um VDC-Netzwerke, VMs sowie Firewall- und Netzwerkadressübersetzungsregeln zu erstellen. Die Erstellung wird durch Variablen vollständig kontrolliert. Terraform authentifiziert sich bei der VMware Cloud Director API mit einem Benutzernamen und einem Passwort. Access Token werden in naher Zukunft unterstützt.
  4. Es werden drei VDC-Netze erstellt: zwei geroutete (application-network-1 und db-network-1) und ein isoliertes (isolated-network-1). Geroutete VDC-Netzwerke sind mit dem Edge-Gateway verbunden, während das isolierte VDC-Netzwerk ein eigenständiges Netzwerk ist. Sie können je nach Bedarf weitere Netzwerke erstellen.
  5. Ein Jump-Server (jump-server-1) wird mit dem Betriebssystem Windows 2022 erstellt. Der Server ist mit dem application-network-1 verbunden. Sie können auf die virtuelle Maschine über die VM-Konsole oder per RDP über die auf dem Edge Gateway erstellte DNAT-Regel zugreifen.
  6. Eine virtuelle Maschine (application-server-1) wird auf application-network-1 erstellt. Die application-server-1 hat eine zusätzliche Platte z.B. für die Protokollierung. Sie können je nach Bedarf weitere VMs oder Festplatten erstellen.
  7. Eine virtuelle Maschine (db-server-1) wird auf db-network-1 und isolated-network-1 mit zwei separaten vnics erstellt. Der db-server-1 hat zwei zusätzliche Festplatten z.B. für Daten und Protokollierung. Sie können je nach Bedarf weitere VMs oder Festplatten erstellen.
  8. Quell-NAT (SNAT) und Ziel-NAT (DNAT) Regeln werden für den öffentlichen Netzzugang erstellt. SNAT zum öffentlichen Internet ist für alle gerouteten Netzwerke konfiguriert, und DNAT ist für den Zugriff auf den Anwendungsserver konfiguriert.
  9. Firewall-Regeln werden eingerichtet, um den Netzzugang zur Umgebung zu sichern. Um Firewall-Regeln zu erstellen, werden statische Gruppen und IP-Sets für Netzwerke und einzelne IP-Adressen erstellt.

Dieses Tutorial ist in die folgenden Schritte unterteilt:

  1. Beispielrepositorium klonen
  2. Erhalten Sie die erforderlichen Informationen über Ihr VDC
  3. Konfigurieren Sie Terraform-Vorlagenvariablen
  4. Initieren, planen und anwenden
  5. Verbinden Sie sich mit der VMware Cloud Director Konsole
  6. Verbinden Sie sich mit den VMs über das Internet und überprüfen Sie die Konnektivität

Eine alternative Anleitung mit VMware Cloud Director Console ist ebenfalls verfügbar.

Vorbereitende Schritte

Für dieses Lernprogramm ist Folgendes erforderlich:

Anweisungen zum Herunterladen und Installieren dieser Tools für Ihre Betriebsumgebung finden Sie in der Anleitung zur Einführung in die Lernprogramme.

Beispiel-Repository klonen

Die Terraform-Beispielvorlagen für VMware Cloud Foundation as a Service befinden sich in GitHub.

Klonen Sie das Beispiel-Repository auf Ihren lokalen Rechner, zum Beispiel einen Laptop oder einen virtuellen Server mit Internetzugang.

Zum Beispiel mit GitHub CLI:

gh repo clone IBM/vmwaas-terraform-examples

Oder über HTTPS mit der folgenden URL:

https://github.com/IBM/vmwaas-terraform-examples.git

Beschaffen Sie sich die erforderlichen Informationen über Ihr VDC

Als Voraussetzung verwenden Sie die IBM Cloud Konsole, um Ihre VMware Cloud Foundation as a Service Single-Tenant-Instanz und ein oder mehrere VDCs darauf zu erstellen.

Sobald die Instanz und das VDC bereitgestellt wurden, können Sie die erforderlichen Details und VDC-IDs in der Konsole erfassen.

Melden Sie sich bei der VMware Cloud Foundation as a Service Single-Tenant-Instanz in der VMware Cloud Director-Konsole an:

  1. Klicken Sie in der Tabelle VMware Cloud Foundation as a Service auf einen VMware Cloud Foundation as a Service Instanznamen.
  2. Überprüfen Sie die Informationen auf der Registerkarte Zusammenfassung.
  3. Wenn Sie zum ersten Mal auf die VMware Cloud Director-Konsole für die VDC-Region zugreifen, müssen Sie die Admin-Anmeldeinformationen festlegen, um ein anfängliches, komplexes und zufälliges Passwort zu generieren.
  4. Klicken Sie auf der VDC-Detailseite auf VMware Cloud Director Console, um die Konsole aufzurufen.
  5. Verwenden Sie den Benutzernamen und das Kennwort admin, um sich zum ersten Mal bei der VMware Cloud Director-Konsole anzumelden.
  6. Nachdem sich der Administrator bei der VMware Cloud Director-Konsole angemeldet hat, können Sie weitere Benutzer erstellen, die über Rollen verfügen, die ihnen den Zugriff auf die VMware Cloud Director-Konsole ermöglichen.

Sie können sich bei der VMware Cloud Director-Konsole anmelden, um die erforderlichen Informationen für Ihren Terraform-Einsatz zu sammeln. Alternativ können Sie das mitgelieferte vmwaas.sh Shell-Skript aus dem Beispiel-Repository verwenden. Das Skript sammelt diese Werte mit der VMware Cloud Foundation as a Service API.

Um das Skript zu verwenden, konfigurieren Sie Ihre Region und Ihren API-Schlüssel mit:

export IBMCLOUD_API_KEY=your-api-key-here
export IBMCLOUD_REGION=region-here

Der Standardbereich ist us-south.

Verwendung des Skripts:

% ./vmwaas.sh
USAGE : vmwaas [ ins | in | vdcs | vdc | vdcgw | tf | tfvars ]

Um Ihre Instanzen aufzulisten:

% ./vmwaas.sh ins
Get instances.


Instances:

NAME          DIRECTOR_SITE_ID                      LOCATION    STATUS
demo          b75efs1c-35df-40b3-b569-1124be37687d  us-south-1  ReadyToUse

Um Ihre VDCs aufzulisten:

% ./vmwaas.sh vdcs           
Get virtual datacenters.


VDCs:

NAME             ID                                    DIRECTOR_SITE_ID                      CRN
vdc-demo         5e37ed2d-54cc-4798-96cf-c363de922ab4  b75efs1c-35df-40b3-b569-1124be37687d  crn:v1:bluemix:public:vmware:us-south:...

Um Terraform TF_VARs für die Authentifizierung zu erhalten:

% ./vmwaas.sh tfvars vdc-demo
Get variables for Terraform in export format.


TF_VARs:

export TF_VAR_vmwaas_url="https://<your_url>.us-south.vmware.cloud.ibm.com/api"
export TF_VAR_vmwaas_org="f37f3422-e6c4-427e-b277-9fec334b99fb"
export TF_VAR_vmwaas_vdc_name="vdc-demo"

Sie können diese in Ihre Shell exportieren, oder Sie können die terraform.tfvars Zeilen mit der Option tfvars als Ausgabe des Skripts in terraform.tfvars Dateien einfügen lassen.

Konfigurieren Sie Terraform-Vorlagenvariablen

Diese Beispiel-Infrastruktur-Terraform-Vorlage befindet sich im Ordner vcd-demo-infra.

Diese Demo-Terraform-Vorlage stellt die folgende Beispielinfrastruktur bereit, die aus zwei gerouteten und einem isolierten VDC-Netzwerk, drei VMs sowie Beispiel-SNAT, DNAT und Firewall-Regeln besteht.

caption-side=bottom"
Grundlegende

Terraform verwendet VMware Cloud Director Provider und die wichtigsten Provider-Ressourcen im verwendeten Beispiel sind:

In dieser Beispielvorlage wird die Erstellung vollständig durch Terraform-Variablen gesteuert - Sie müssen die eigentliche Terraform-Vorlage nicht ändern, wenn Sie beispielsweise mehr Netzwerke oder VMs benötigen. Eine terraform.tfvars-example-Beispieldatei wird zur Verfügung gestellt, und es werden Beispielwerte mit Erläuterungen angegeben.

Bevor Sie beginnen, kopieren Sie das Beispiel terraform.tfvars-example z.B. nach terraform.tfvars:

cp terraform.tfvars-example terraform.tfvars

Sie können es als solches verwenden, weitere Netzwerke und VMs hinzufügen und NAT- oder Firewall-Regeln usw. nach Ihren Bedürfnissen anpassen.

  1. Setzen Sie die folgende gemeinsame Variable für den Zugriff auf Ihre Instanz und Ihr VDC.

    # Note. Variable values to access your Director instance. Use the Director portal
    # to figure our your values here.
    
    vmwaas_url = "put-your-director-url-here" # for example "https://abcxyz.us-south.vmware.cloud.ibm.com/api"
    vmwaas_org = "put-your-org-id-here"
    vmwaas_vdc_name = "put-your-vdc-name-here"
    
    vmwaas_api_token = ""                                    # Note. See VMware Docs to create API token.
    #vmwaas_user = "put-your-username-here"                  # Note. When using a username and password, create a new local user in Director for terraform.
    #vmwaas_password = "put-your-password-here"              # Note. When using a username and password, create a new local user in Director for terraform.
    

    Informationen zum Erstellen eines API-Tokens finden Sie unter VMware Cloud Director Docs.

    Für diese Variablen könnten Sie alternativ Umgebungsvariablen mit dem Namen TF_VAR_ für vmwaas_api_token, vmwaas_user und vmwaas_password anlegen, anstatt sie in terraform.tfvars zu definieren, wie im Skript vmwaas.sh gezeigt. In diesem Fall kommentieren Sie diese Zeilen in Ihrem terraform.tfvars aus.

    Wenn Sie die Authentifizierungsmethode ändern, muss der Anbieterblock im Code geändert werden, um eine andere Authentifizierungsmethode zu verwenden.

  2. Legen Sie einen gemeinsamen Namenspräfix fest, um Ihre VDC-Netzwerke, VMs usw. zu identifizieren und zu trennen.

    # Note. Use a common name prefix for each item.
    
    item_name_prefix = "demo"
    
  3. Definieren Sie DNS-Server für die VMs.

    Sie können IBM Cloud Public DNS Server in Ihren VMs verwenden, oder Sie können Ihren eigenen verwenden.

    # Note. IBM Cloud DNS servers listed here.
    # You may also use your own here.
    
    dns_servers = ["161.26.1.10","161.26.1.11"]
    

    Wenn Sie hier Ihre eigenen DNS-Server verwenden, stellen Sie sicher, dass Sie über eine Netzwerkverbindung verfügen, um diese zu erreichen.

  4. Definieren Sie VDC-Netze.

    Beim Erstellen von VDC-Netzwerken verwenden Sie die Map-Variable vdc_networks, um diese und ihre IP-Pools zu definieren.

    # Note. Create VDC networks of type `routed` or
    # `isolated`. You can define one `static_ip_pool`and one
    # `dhcp_ip_pool` for each.
    
    vdc_networks = {
       application-network-1 = {
          description = "Application network 1"
          type = "routed"
          subnet = {
                cidr = "172.26.1.0/24"
                prefix_length = 24
                gateway = "172.26.1.1"
                static_ip_pool = {
                   start_address = "172.26.1.10"
                   end_address   = "172.26.1.100"
                }
                dhcp_ip_pool = {
                   start_address = "172.26.1.101"
                   end_address   = "172.26.1.199"
                }        
          }
       },
       db-network-1 = {
          description = "DB network 1"
          type = "routed"
          subnet = {
                cidr = "172.26.2.0/24"
                prefix_length = 24
                gateway = "172.26.2.1"
                static_ip_pool = {
                   start_address = "172.26.2.10"
                   end_address   = "172.26.2.100"
                }
                dhcp_ip_pool = {
                   start_address = "172.26.2.101"
                   end_address   = "172.26.2.199"
                }        
          }
       },
       isolated-network-1 = {
          description = "Isolated network 1"
          type = "isolated"
          subnet = {
                cidr = "172.26.3.0/24"
                prefix_length = 24
                gateway = "172.26.3.1"
                static_ip_pool = {
                   start_address = "172.26.3.10"
                   end_address   = "172.26.3.100"
                }
                dhcp_ip_pool = {} # leave empty for isolated network   
          }
       },
    }
    
  5. Definieren Sie Konfigurationen für virtuelle Maschinen.

    Bei der Erstellung von VMs verwenden Sie die Map-Variable virtual_machines, um diese zu definieren.

    # Note. Create VMs inside your VDC.
    # You can define each one individually and attach multiple networks
    # and disks. Individual disks are created for each additional disk.
    
    # Note. Check the storage profile names and apply to your VMs / disks.
    # If left empty, default profile is used.
    
    virtual_machines = {
       app-server-1 = {
          image = {
                catalog_name  = "Public Catalog"
                template_name = "RedHat-8-Template-Official"
          }
          memory          = 8192
          cpus            = 2
          cpu_hot_add_enabled = true
          memory_hot_add_enabled = true
          storage_profile = "2 IOPS/GB"
          networks = {
                0 = {
                   name = "application-network-1"
                   ip_allocation_mode = "POOL"
                   is_primary = true
                   ip = ""
                },
          }
          disks = {
                0 = {
                   name = "logDisk"
                   size_in_mb = "100"
                   bus_type = "SCSI"
                   bus_sub_type = "VirtualSCSI"
                   bus_number = 1
                   storage_profile = ""
                },
          }
       },
       db-server-1 = {
          image = {
                catalog_name  = "Public Catalog"
                template_name = "RedHat-8-Template-Official"
          }
          memory        = 8192
          cpus          = 2
          cpu_hot_add_enabled = true
          memory_hot_add_enabled = true
          storage_profile = ""
          networks = {
                0 = {
                   name = "db-network-1"
                   ip_allocation_mode = "POOL"
                   is_primary = true
                   ip = ""
                },
                1 = {
                   name = "isolated-network-1"
                   ip_allocation_mode = "POOL"
                   is_primary = false
                   ip = ""
                },
          }
          disks = {
                0 = {
                   name = "dbDisk"
                   size_in_mb = "100"
                   bus_type = "SCSI"
                   bus_sub_type = "VirtualSCSI"
                   bus_number = 1
                   storage_profile = ""
                },
                1 = {
                   name = "dbLogDisk"
                   size_in_mb = "100"
                   bus_type = "SCSI"
                   bus_sub_type = "VirtualSCSI"
                   bus_number = 1
                   storage_profile = ""
                },
          }    
       },
       jump-server-1 = {
          image = {
                catalog_name  = "Public Catalog"
                template_name = "Windows-2022-Template-Official"
          }
          memory        = 8192
          cpus          = 2
          cpu_hot_add_enabled = true
          memory_hot_add_enabled = true
          storage_profile = ""
          networks = {
                0 = {
                   name = "application-network-1"
                   ip_allocation_mode = "POOL"
                   is_primary = true
                   ip = ""
                },
          },
          disks = {}
       },
    }
    
  6. Definieren Sie die Zuordnung öffentlicher IP-Adressen.

    Jedes VDC erhält 6 öffentliche IP-Adressen für jedes VDC und sein Edge-Gateway. Diese Terraform-Vorlage behandelt die angegebene fortlaufende Liste von IP-Adressen als eine Karte. Die folgende Variable public_ips beschreibt die für Ihr VDC bereitgestellten öffentlichen IP-Adressen. Sie können die Schlüssel (z.B. public-ip-1) verwenden, um eine IP-Adresse in der Vorlage zu definieren und als Referenz zu verwenden, ohne die tatsächliche IP-Adresse (z.B. xx.yy.zz.56) in den anderen Variablen zu spezifizieren.

    # Note. Map of available 6 public IPs. You can use these names
    # in NAT rules. Do not change the map's keys here.
    
    public_ips = {
       public-ip-0 = {
          name = "public-ip-0"
          description = ""
       },
       public-ip-1 = {
          name = "public-ip-1"
          description = ""
       },
       public-ip-2 = {
          name = "public-ip-2"
          description = ""
       },
       public-ip-3 = {
          name = "public-ip-3"
          description = ""
       },
       public-ip-4 = {
          name = "public-ip-4"
          description = ""
       },
       public-ip-5 = {
          name = "public-ip-5"
          description = ""
       },
    }
    
  7. Definieren Sie NAT-Regeln.

    Die Variable nat_rules definiert die zu erstellenden NAT-Regeln. Prüfen Sie die mitgelieferten Beispiele und ändern Sie sie nach Ihren Bedürfnissen.

    # Note. You can use `vdc_networks` or `virtual_machines` keys as
    # address_targets here. Terraform will pick the IP address of
    # the specific resource and use that in the actual NAT rule.
    
    # Note. You can specify the desired actual public IP address
    # (`external_address`) in the rule, or you can use the
    # `external_address_list_index`, which will pick the IP
    # addresses from the allocated IP pool (`edge_gateway_allocated_ips`).
    
    # Note. Use Director UI to get the name for the Application
    # profiles."
    
    nat_rules = {
       dnat-to-app-1 = {
          rule_type   = "DNAT"
          description = "DNAT rule to app-server-1"
          external_address_target = "public-ip-1"
          external_address = ""
          internal_address_target = "app-server-1"
          internal_address = ""
          dnat_external_port = ""
          app_port_profile = ""
          logging = false
          priority = 90
          enabled = true
       },
       dnat-to-jump-1 = {
          rule_type   = "DNAT"
          description = "DNAT rule to jump-server-1"
          external_address_target = "public-ip-2"
          external_address = ""
          internal_address_target = "jump-server-1"
          internal_address = ""
          dnat_external_port = ""
          app_port_profile = ""
          logging = false
          priority = 90
          enabled = true
       },
       snat-to-internet-1 = {
          rule_type = "SNAT"
          description = "SNAT rule to application-network-1"
          external_address_target = "public-ip-0"
          external_address = ""  
          internal_address_target = "application-network-1"
          internal_address = ""
          snat_destination_address = ""
          logging = false
          priority = 100
          enabled = true
       },    
       snat-to-internet-2 = {
          rule_type = "SNAT"
          description = "SNAT rule to db-network-1"
          external_address_target = "public-ip-0"
          external_address = ""  
          internal_address_target = "db-network-1"
          internal_address = ""
          snat_destination_address = ""
          logging = false
          priority = 100
          enabled = true
       },  
    }  
    
  8. Erstellen Sie IP-Sets und statische Gruppen, die für die Definition von Firewall-Regeln benötigt werden.

    Die Terraform-Vorlage erstellt IP-Sets für die in den NAT-Regeln verwendeten öffentlichen IP-Adressen. Sie können auch zusätzliche IP-Sets definieren, z. B. für Ihre firmeninternen Netzwerke oder andere private oder öffentliche IP-Adressen.

    # Note. You need to create IP sets to be used in firewall rules.
    # You can use the `public_ips` keys here as address_targets,
    # but you can define IP sets using real IP addresses using a
    # list `ip_addresses`.
    
    ip_sets = {
       ip-set-on-public-ip-0 = {
          description = "Public IP 0 - used for SNAT"
          ip_addresses = []
          address_target = "public-ip-0"
       },
       ip-set-on-public-ip-1 = {
          description = "Public IP 1 - used for DNAT to app-server-1"
          ip_addresses = []
          address_target = "public-ip-1"
       },
       ip-set-on-public-ip-2 = {
          description = "Public IP 2 - used for DNAT to jump-server-1"
          ip_addresses = []
          address_target = "public-ip-2"
       },
       ip-set-on-public-ip-3 = {
          description = "Public IP 3"
          ip_addresses = []
          address_target = "public-ip-3"
       },
       ip-set-on-public-ip-4 = {
          description = "Public IP 4"
          ip_addresses = []
          address_target = "public-ip-4"
       },
       ip-set-on-public-ip-5 = {
          description = "Public IP 5"
          ip_addresses = []
          address_target = "public-ip-5"
       },
       ip-set-on-premises-networks = {
          description = "On-premises networks"
          ip_addresses = ["172.16.0.0/16",]
          address_target = ""
       },
    }
    

    Sie können auch statische Gruppen in Firewall-Regeln als Quellen und Ziele verwenden. In diesem Beispiel werden drei statische Gruppen erstellt, eine für jedes geroutete VDC-Netzwerk und eine, die alle gerouteten VDC-Netzwerke umfasst.

    # Note. You need to create Static Groups to be used in firewall rules.
    # You can use `vdc_networks` as keys here.
    
    security_groups = {
       sg-application-network-1 = {
          description = "Static Group for application-network-1"
          address_targets = ["application-network-1"]
       },
       sg-db-network-1 = {
          description = "Static Group for db-network-1"
          address_targets = ["db-network-1"]
       },
       sg-all-routed-networks = {
          description = "Static Group for all VDC networks"
          address_targets = ["application-network-1", "db-network-1"]
       },
    }
    
  9. Definieren Sie Firewall-Regeln.

    Die Variable firewall_rules definiert die zu erstellenden Firewall-Regeln. Sehen Sie sich die mitgelieferten Beispiele an und ändern Sie sie nach Ihren Bedürfnissen.

    # Note. Use "ALLOW or "DROP".
    
    # Note. Use Director UI to get the name for the Application
    # profiles."
    
    firewall_rules = {
       app-1-egress = {
          action  = "ALLOW"
          direction = "OUT"
          ip_protocol = "IPV4"
          destinations = []                                          # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          sources = ["sg-application-network-1", "sg-db-network-1"]  # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          system_app_ports = []
          logging = false
          enabled = true
       },
       dnat-to-app-1-ingress = {
          action  = "ALLOW"
          direction = "IN"
          ip_protocol = "IPV4"
          destinations = ["ip-set-on-public-ip-1"]                   # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          sources = []                                               # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          system_app_ports = ["SSH","HTTPS","ICMP ALL"]
          logging = false
          enabled = true
       },
       dnat-to-jump-1-ingress = {
          action  = "ALLOW"
          direction = "IN"
          ip_protocol = "IPV4"
          destinations = ["ip-set-on-public-ip-2"]                   # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          sources = []                                               # These refer to IP sets (ip_sets or nat_rules) or Static Groups (vdc_networks)
          system_app_ports = ["RDP"]
          logging = false
          enabled = true
       },
    }
    

Im Allgemeinen wird davon abgeraten, RDP über das öffentliche Internet zu verwenden. Die oben aufgeführte Regel dient nur zur Veranschaulichung.

Initiieren, planen und anwenden

  1. Um Ihr Terraform-Projekt zu initialisieren, führen Sie den Befehl terraform init im Beispielverzeichnis aus und beobachten Sie die Ausgabe.

    Beispiel:

    % terraform init
    
    Initializing the backend...
    
    Initializing provider plugins...
    - Finding latest version of hashicorp/random...
    - Finding latest version of vmware/vcd...
    - Installing hashicorp/random v3.4.3...
    - Installed hashicorp/random v3.4.3 (signed by HashiCorp)
    - Installing vmware/vcd v3.8.2...
    - Installed vmware/vcd v3.8.2 (signed by a HashiCorp partner, key ID 8BF53DB49CDB70B0)
    
    Partner and community providers are signed by their developers.
    If you'd like to know more about provider signing, you can read about it here:
    https://www.terraform.io/docs/cli/plugins/signing.html
    
    Terraform has created a lock file .terraform.lock.hcl to record the provider
    selections it made above. Include this file in your version control repository
    so that Terraform can guarantee to make the same selections by default when
    you run "terraform init" in the future.
    
    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
    
  2. Als nächstes können Sie terraform plan ausführen, um zu sehen, was bereitgestellt wird.

    % terraform plan
    data.vcd_resource_list.list_of_vdcs: Reading...
    data.vcd_resource_list.list_of_vdc_edges: Reading...
    data.vcd_resource_list.list_of_catalog_items: Reading...
    data.vcd_nsxt_app_port_profile.system["SSH"]: Reading...
    data.vcd_nsxt_app_port_profile.system["HTTPS"]: Reading...
    data.vcd_nsxt_app_port_profile.system["ICMP ALL"]: Reading...
    data.vcd_org_vdc.org_vdc: Reading...
    
    [output omitted]
    
    Plan: 29 to add, 0 to change, 0 to destroy.
    
  3. Überprüfen Sie die Ausgabe Ihres Plans, und wenn alles wie geplant aussieht, können Sie terraform apply ausführen, um die Anlagen tatsächlich zu verteilen.

    Beispiel:

    % terraform apply --auto-approve
    data.vcd_resource_list.list_of_vdcs: Reading...
    data.vcd_resource_list.list_of_vdc_edges: Reading...
    data.vcd_resource_list.list_of_catalog_items: Reading...
    data.vcd_nsxt_app_port_profile.system["SSH"]: Reading...
    data.vcd_nsxt_app_port_profile.system["HTTPS"]: Reading...
    data.vcd_nsxt_app_port_profile.system["ICMP ALL"]: Reading...
    data.vcd_org_vdc.org_vdc: Reading...
    
    [output omitted]
    
    Apply complete! Resources: 29 added, 0 changed, 0 destroyed.
    
  4. Zusätzlich zu den obigen Beispielen bietet terraform einige Variablen als outputs. Überprüfen Sie diese output Werte, um z.B. die IP-Adressierung und andere Zugangsinformationen für den Zugriff auf Ihre VMs zu erhalten.

    Sie können zum Beispiel terraform output created_virtual_machines ausführen, um Zugriffsinformationen zu Ihren VMs zu erhalten:

    % terraform output created_virtual_machines
    {
    "app-server-1" = {
       "admin_password" = "<omitted>"
       "name" = "demo-app-server-1"
       "network" = [
          {
          "ip_address" = "172.26.1.10"
          "is_primary" = true
          "name" = "demo-application-network-1"
          },
       ]
    }
    "db-server-1" = {
       "admin_password" = "<omitted>"
       "name" = "demo-db-server-1"
       "network" = [
          {
          "ip_address" = "172.26.2.10"
          "is_primary" = true
          "name" = "demo-db-network-1"
          },
          {
          "ip_address" = "172.26.3.10"
          "is_primary" = false
          "name" = "demo-isolated-network-1"
          },
       ]
    }
    "jump-server-1" = {
       "admin_password" = "<omitted>"
       "name" = "demo-jump-server-1"
       "network" = [
          {
          "ip_address" = "172.26.1.11"
          "is_primary" = true
          "name" = "demo-application-network-1"
          },
       ]
    }
    }
    

    Um die NAT-Regeln und die verwendeten öffentlichen IP-Adressen zu erhalten, können Sie terraform output created_nat_rules ausführen:

    % terraform output created_nat_rules
    {
    "dnat-to-app-1" = {
       "dnat_external_port" = ""
       "external_address" = "xxx.yyy.zzz.19"
       "internal_address" = "172.26.1.10"
       "name" = "demo-dnat-to-app-1"
       "rule_type" = "DNAT"
       "snat_destination_address" = ""
    }
    "dnat-to-jump-1" = {
       "dnat_external_port" = ""
       "external_address" = "xxx.yyy.zzz.20"
       "internal_address" = "172.26.1.11"
       "name" = "demo-dnat-to-jump-1"
       "rule_type" = "DNAT"
       "snat_destination_address" = ""
    }
    "snat-to-internet-1" = {
       "dnat_external_port" = ""
       "external_address" = "xxx.yyy.zzz.18"
       "internal_address" = "172.26.1.0/24"
       "name" = "demo-snat-to-internet-1"
       "rule_type" = "SNAT"
       "snat_destination_address" = ""
    }
    "snat-to-internet-2" = {
       "dnat_external_port" = ""
       "external_address" = "xxx.yyy.zzz.18"
       "internal_address" = "172.26.2.0/24"
       "name" = "demo-snat-to-internet-2"
       "rule_type" = "SNAT"
       "snat_destination_address" = ""
    }
    }
    

    Sie können die konfigurierten Firewall-Regeln durch eine Ausgabe created_fw_rules, IP-Sets mit created_ip_sets und statische Gruppen mit created_static_groups usw. erhalten. Beispiel:

    terraform output created_fw_rules
    

Stellen Sie nach der Einrichtung sicher, dass Sie die Beispiel-Firewall-Regeln entsprechend Ihren Standards und Bedürfnissen anpassen. Sie ermöglichen den öffentlichen Zugriff auf Ihre VMs, wie ssh und RDP, die hier nur zu Demonstrationszwecken konfiguriert sind.

Verbinden mit der VMware Cloud Director-Konsole

Lesen Sie das alternative Tutorial zur Verwendung und zum Zugriff auf VMware Cloud Director Console. Überprüfen Sie die bereitgestellten Ressourcen und die Konfiguration des Edge Gateway (FW und NAT-Regeln).

Holen Sie sich die Benutzernamen und Passwörter der VMs zum Beispiel aus der Terraform output:

terraform output created_virtual_machines

So verbinden Sie sich mit der virtuellen Maschine mit Konsole in VMware Cloud Director Console:

  1. Klicken Sie auf Launch Web Console, um eine lokale Konsole für die virtuelle Maschine zu öffnen.
  2. Melden Sie sich über die Web-Konsole bei der virtuellen Maschine an, indem Sie root als Benutzer-ID und das im vorherigen Schritt ermittelte Passwort verwenden.
  3. Sie sollten dann in der Lage sein, Internetressourcen wie www.ibm.com anzupingen, was zeigt, dass das Netzwerk vollständig ist und funktioniert.

Verbinden Sie sich mit den VMs über das Internet und überprüfen Sie die Konnektivität

Der letzte Schritt besteht darin, sich über das Internet mit der virtuellen Maschine zu verbinden, um die Bereitstellung und die Netzwerkkonnektivität zu überprüfen.

So stellen Sie eine Verbindung zur virtuellen Maschine über das Internet her:

  1. Sie sollten in der Lage sein, die öffentliche IP-Adresse public-ip-1 anzupingen und von Ihrem Laptop oder Ihrer Workstation aus per ssh auf Ihre app-server-1 zuzugreifen, was zeigt, dass das Netzwerk vollständig ist und funktioniert.
  2. Sie sollten in der Lage sein, mit RDP eine Verbindung zu Ihrem Jump Server jump-server-1 herzustellen, indem Sie die öffentliche IP-Adresse public-ip-2 und den im vorherigen Schritt erfassten Benutzernamen und das Passwort verwenden.
  3. Sie können dann die im vorherigen Schritt erstellte FW-Regel dnat-to-app-1-ingress deaktivieren, indem Sie die Regel und ihren Status bearbeiten, indem Sie den Status über die Konsole auf Disabled (grau) schieben, oder Sie können die Terraform-Variable in der spezifischen Regel auf Drop ändern und terraform apply --auto-approve ausführen.
  4. Sie können dann die im vorherigen Schritt erstellte FW-Regel dnat-to-jump-1-ingress deaktivieren, indem Sie die Regel und ihren Status bearbeiten, indem Sie den Status über die Konsole auf Disabled (grau) schieben, oder Sie können die Terraform-Variable in der spezifischen Regel auf Drop ändern und terraform apply --auto-approve ausführen.

Referenzmaterial

In den folgenden VMware Cloud Director™ Tenant Portal Guides finden Sie detaillierte Informationen zur Verwaltung von VDCs:

In der Terraform-Registry finden Sie weitere Informationen über den Provider, die Ressourcen und die Datenquellen: