Terraform -Module konfigurieren

Die für das Hosting von SaaS-Anwendungen mit einem Mandanten auf Oracle Cloud erforderlichen Netzwerkressourcen sind in Terraform-Modulen definiert. Laden Sie die Module herunter, und legen Sie die erforderlichen Variablen fest.

Terraform -Code herunterladen

Der Terraform-Code für diese Lösung ist in GitHub verfügbar.

  1. Klicken Sie im Navigationsbereich auf der linken Seite auf Code herunterladen.
  2. Klicken Sie auf Git-Repository.
  3. Klonen Sie das Repository, oder laden Sie es auf Ihren lokalen Rechner herunter.

Informationen zum Terraform-Code

Der Terraform-Code für diese Lösung ist in mehrere Module organisiert, die jeweils die Ressourcen für eine bestimmte Komponente der Zieltopologie enthalten.

Der Terraform-Code enthält die folgenden Verzeichnisse und Dateien auf der obersten Ebene:
  • chef: Dieses Verzeichnis enthält die Chef-Rezepte zur Installation und Konfiguration der Routinggateways.
  • examples: Dieses Verzeichnis enthält den Terraform-Code, der für die Implementierung dieser Lösung erforderlich ist. Der Code in diesem Verzeichnis verwendet die Module, die im Verzeichnis modules definiert sind.
  • LICENSE.txt: Diese Datei enthält die Lizenzbedingungen für den Beispielcode.
  • modules: Dieses Verzeichnis enthält die Terraform-Module, die die Bausteine für die Lösung bereitstellen.
  • README.md: Diese Datei enthält eine kurze Beschreibung des Codes und grundlegende Anweisungen zur Verwendung des Codes.
  • test: Dieses Verzeichnis enthält Testskripte, mit denen Sie das Deployment überprüfen können.
Das Verzeichnis examples/full-deployment enthält den Code, der die Terraform-Module aufruft, die für diese Lösung erforderlich sind. Sie enthält die folgenden Unterverzeichnisse und Dateien:
examples/full-deployment
├── common
│   ├── compartments
│   └── configuration
├── Makefile
├── management
│   ├── access
│   ├── network
│   ├── server_attachment
│   └── servers
├── peering
│   ├── network
│   └── routing
├── README.md
├── tenant
│   ├── network
│   └── servers
├── terraform.tfvars.sample
└── terragrunt.hcl
Konfigurationsverzeichnis oder -datei In der Konfiguration definierte Ressourcen
common/configuration Keine.

Der Code in diesem Verzeichnis verwendet das Terraform-Modul in examples/network_calculator, um die Anzahl der erforderlichen Mandanten-LUNs und Peering-VCNs, die CIDR-Größe jeder VCN und die Zuordnung zwischen den Mandanten-VNs und den Peering-VCNs zu berechnen. Die Ergebnisse der Berechnung werden verwendet, wenn die VCNs und andere Netzwerkressourcen erstellt werden.

common/compartments
  • Ein Management-Compartment.
  • Ein oder mehrere Compartments für die Peering-VCNs.
  • Ein Compartment für jeden Mandanten.
management/access Eine Oracle Linux Compute-Instanz, die einem öffentlichen Subnetz im ISV VCN zugeordnet ist. Diese Instanz ist der Basisserver für die Topologie.
management/network
  • ISV VCN, auch als Management VCN bezeichnet.
  • NAT- und Internetgateways für ISV VCN.
  • Die folgenden Subnetze:
    • Ein privates Managementsubnetz für den Managementserver.
    • Ein öffentliches Zugriffssubnetz für den Basisserver.
    • Ein privates Peering-Subnetz für die Routinggateways
  • Die Standardroutentabelle für VCN mit einer Regel zur Weiterleitung des Verkehrs, der über das Internetgateway an das öffentliche Internet gebunden ist.
  • Eine Routentabelle für das Peering-Subnetz mit einer Regel zur Weiterleitung des Verkehrs, der über das NAT-Gateway im öffentlichen Internet gebunden ist.
  • Eine Sicherheitsliste für das Zugriffssubnetz mit den folgenden Regeln:
    • Eingehenden ICMP-Verkehr aus beliebigen Quellen zulassen.
    • Lässt ausgehenden TCP-Traffic zu, der für ein beliebiges Ziel gebunden ist.
  • Eine Sicherheitsliste für das Peering-Subnetz mit den folgenden Regeln:
    • Lässt ausgehenden TCP-Traffic zu, der für ein beliebiges Ziel gebunden ist.
    • Eingehenden ICMP-Verkehr aus beliebigen Quellen zulassen.
    • Eingehenden TCP-Traffic von einer beliebigen Quelle an Port 5666 zulassen.
  • Eine Sicherheitsliste für das Managementsubnetz mit den folgenden Regeln:
    • Lässt eingehenden ICMP-Datenverkehr aus dem Zugriffssubnetz zu.
    • Senden von eingehendem HTTP-Verkehr vom Zugriffssubnetz an Port 80.
    • Lässt ausgehenden TCP-Traffic zu, der für ein beliebiges Ziel gebunden ist.
management/server_attachment
  • Eine Routentabelle, die dem Managementsubnetz mit den folgenden Regeln zugeordnet ist:
    • Routenverkehr, der für das öffentliche Internet über das NAT-Gateway gebunden ist.
    • Leiten Sie den Datenverkehr, der für jeden der Mandanten-VCNs an die entsprechende Routinggateway-Instanz gebunden ist.
  • Eine Routentabelle, die dem Zugriffssubnetz zugeordnet ist, mit den folgenden Regeln:
    • Leiten Sie den Datenverkehr für das öffentliche Internet über das Internetgateway weiter.
    • Leiten Sie den Datenverkehr, der für jeden der Mandanten-VCNs an die entsprechende Routinggateway-Instanz gebunden ist.
management/servers Eine Oracle Linux-Berechnungsinstanz, die dem Managementsubnetz im ISV VCN zugeordnet ist.

Mit dem Management Server können Sie eine Infrastructure-Überwachungsanwendung, wie Nagios Core, installieren und ausführen.

peering/network
  • Eine dynamische Gruppe, die aus den Compute-Instanzen besteht, die die Routinggateways hosten.
  • Eine Policy, mit der die in dieser Konfiguration definierte dynamische Gruppe die VNICs und privaten Adressen im Compartment verwenden kann.
  • Zwei VCNs mit einem Subnet in jedem VCN.
  • Ein lokales Peering-Gateway (LPG) für jede VCN.
  • Eine Sicherheitsliste für jedes Subnetz mit Regeln, mit der der gesamte eingehende ICMP-Datenverkehr und der gesamte ausgehende TCP-Verkehr zugelassen werden kann.
  • Eine Routentabelle für jedes Subnetz mit Regeln zur Weiterleitung des Verkehrs für jede Mandanten-VCN über die LPG des entsprechenden Peering-VCN.
peering/routing
  • Zwei Routinggateways:
    • Ein Gateway ist ein Paar mit Compute-Instanzen, die in einer anderen Faultdomain gespeichert sind, wobei Pacemaker bei ihnen installiert ist, um High Availability zu aktivieren. Jede Compute-Instanz hat zwei sekundäre VNICs, wobei eine unverankerte IP-Adresse an die erste sekundäre VNIC angehängt ist. Dieses Gateway dient zur Demonstration des HA-Failovers für das Routinggateway.
    • Das andere Gateway ist eine einzelne Compute-Instanz.
  • Eine Netzwerksicherheitsgruppe mit den folgenden Regeln:
    • Lässt den gesamten TCP-Traffic in der Gruppe den Ports 3121, 2224 und 21064 zu.
    • Lässt den gesamten UDP-Verkehr innerhalb der Gruppe an Port 4505 zu.
tenant/network Die folgenden Ressourcen für jeden Mandanten:
  • Mandanten-VCN.
  • NAT- und Internetgateways für die Mandanten-VCN.
  • Zwei Subnetze, ein öffentliches und das andere private.
  • LPG für VCN.
  • Eine Routentabelle für das öffentliche Subnetz mit den folgenden Regeln:
    • Leiten Sie den Datenverkehr für das öffentliche Internet über das Internetgateway weiter.
    • Routenverkehr, der über den LPG an das Peering-Subnetz gebunden ist.
    • Routenverkehr, der über den LPG an das Managementsubnetz gebunden ist.
  • Eine Routentabelle für das private Subnetz mit den folgenden Regeln:
    • Routenverkehr, der für das öffentliche Internet über das NAT-Gateway gebunden ist.
    • Routenverkehr, der über den LPG an das Peering-Subnetz gebunden ist.
    • Routenverkehr, der über den LPG an das Managementsubnetz gebunden ist.
  • Eine Sicherheitsliste für das öffentliche Subnetz mit den folgenden Regeln:
    • Eingehenden ICMP-Datenverkehr von einem beliebigen Ziel zulassen.
    • Lässt ausgehenden TCP-Traffic an ein beliebiges Ziel zu.
  • Eine Sicherheitsliste für das private Subnetz mit folgenden Regeln:
    • Eingehenden ICMP-Datenverkehr von einem beliebigen Ziel zulassen.
    • Lässt ausgehenden TCP-Traffic an ein beliebiges Ziel zu.
    • Eingehenden TCP-Traffic an Port 5666 zulassen.
tenant/servers Eine Oracle Linux Compute-Instanz in jedem der Mandanten-Compartments.

Mit dieser Instanz können Sie einen Infrastructure-Überwachungs-Agent installieren und ausführen. Beispiel: Wenn Sie Nagios Core auf dem Management Server in ISV VCN installieren, können Sie den Nagios Agent in der Compute-Instanz in jedem Mandanten-Compartment installieren. Der Agent kann die Server im Compartment überwachen und Metriken an den Nagios-Überwachungsserver senden.

terraform.tfvars.sample Eine Vorlage für die Terraform-Variablendatei.
terragrunt.hcl Die Terragrunt-Konfiguration.

Terraform -Variablen festlegen

Geben Sie die Parameter an, die Terraform für die Verbindung mit dem Oracle Cloud Infrastructure-Mandanten, SSH-Schlüssel für die Compute-Instanzen und das Kennwort für das Routing-Cluster benötigt.

  1. Kopieren Sie examples/full-deployment/terraform.tfvars.sample nach examples/full-deployment/terraform.tfvars.
  2. Öffnen Sie examples/full-deployment/terraform.tfvars in einem Texteditor, und legen Sie Werte für die Variablen in der Datei wie folgt fest:
    Variable Beschreibung
    tenancy_ocid Die OCID Ihres Mandanten.

    Sie finden die OCID Ihres Mandanten in der Oracle Cloud Infrastructure-Webkonsole. Wählen Sie im Menü "Services" die Option Administration, und klicken Sie dann auf Mandantendetails.

    user_ocid Die OCID des Benutzers, den Terraform zur Authentifizierung mit Oracle Cloud Infrastructure verwenden soll.

    Um die OCID des Benutzers zu suchen, wählen Sie im Menü Services die Option Identität und dann Benutzer. Suchen Sie Ihren Benutzernamen in der Liste, und kopieren Sie seine OCID.

    fingerprint Der Fingerprint des von Ihnen hochgeladenen API-Signaturschlüssels.
    private_key_path Der vollständige Pfad und Name der Datei, die Ihren Private API-Signaturschlüssel enthält.
    Bereich Die ID des Bereichs, in dem Sie die Ressourcen erstellen möchten.

    Die ID der Region "US East (Ashburn)" ist z. B. us-ashburn-1.

    Siehe Regionen und Availability-Domains.

    compartment_ocid Die OCID des Compartments, in dem Sie die Ressourcen erstellen möchten.

    Das angegebene Compartment wird das übergeordnete Compartment für die Topologie sein.

    Um die OCID eines Compartments zu suchen, wählen Sie im Menü "Services" die Option Identity, und wählen Sie dann Compartments. Suchen Sie das gewünschte Compartment in der Liste, und kopieren Sie dessen OCID.

    bastion_ssh_public_key_file Der vollständige Pfad und Name der Datei, die den SSH-Public Key für den Base-Server enthält.
    bastion_ssh_private_key_file Der vollständige Pfad und Name der Datei, die den SSH-Private Key für den Basisserver enthält.
    remote_ssh_public_key_file Der vollständige Pfad und Name der Datei, die den SSH-Public Key für die privaten Compute-Instanzen in der Topologie enthält.
    remote_ssh_private_key_file Der vollständige Pfad und Name der Datei, die den SSH-Private Key für die privaten Compute-Instanzen in der Topologie enthält.

    Speichern und schließen Sie terraform.tfvars.

    Als Nächstes sehen Sie ein Beispiel für eine abgeschlossene terraform.tfvars-Datei:

    tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaa2 (truncated)"
    user_ocid = "ocid1.user.oc1..aaaaaaaag (truncated)"
    fingerprint = "56:f6:8e:bf: (truncated)"
    private_key_path = "/home/joe/.oci/oci_api_key.pem"
    region = "us-ashburn-1"
    
    compartment_ocid = "ocid1.compartment.oc1..aaaaaaaam (truncated)"
    
    bastion_ssh_public_key_file = "/home/joe/.ssh/ida_rsa_bastion.pub"
    bastion_ssh_private_key_file = "/home/joe/.ssh/ida_rsa_bastion"
    remote_ssh_public_key_file = "/home/joe/.ssh/ida_rsa_remote.pub"
    remote_ssh_private_key_file = "/home/joe/.ssh/ida_rsa_remote"
  3. Legen Sie ein Shared Secret für das Routing-Cluster in einer Umgebungsvariable fest.
    export TF_VAR_hacluster_password="somePassword"

    Das Kennwort muss mindestens acht Zeichen enthalten. Er muss mindestens einen Großbuchstaben, einen Kleinbuchstaben, eine Zahl und ein Sonderzeichen (nicht-alphanumerisches Zeichen) enthalten.