VMs mit manueller Envoy-Bereitstellung einrichten

Dieses Dokument richtet sich an Netzwerkadministratoren, die Cloud Service Mesh manuell einrichten möchten. Der manuelle Prozess ist ein Legacy-Mechanismus, der nur für fortgeschrittene Nutzer gedacht ist, die Cloud Service Mesh mit den Load Balancing APIs einrichten.

Es wird dringend empfohlen, Cloud Service Mesh mit den Service Routing APIs und nicht mit den älteren Load Balancing APIs einzurichten. Wenn Sie die Load Balancing-APIs verwenden müssen, empfehlen wir die automatisierte Envoy-Bereitstellung anstelle des auf dieser Seite beschriebenen manuellen Prozesses.

Bevor Sie der Anleitung in diesem Leitfaden folgen, lesen Sie Einrichtung von Cloud Service Mesh mit Envoy vorbereiten und prüfen Sie, ob die in diesem Dokument beschriebenen erforderlichen Aufgaben ausgeführt wurden.

In dieser Anleitung erfahren Sie, wie Sie eine Datenebene, die aus Envoy-Sidecar-Proxys mit virtuellen Compute Engine-Maschinen (VMs) besteht, manuell bereitstellen, mit Cloud Service Mesh konfigurieren und Ihre Einrichtung überprüfen, um sicherzustellen, dass sie korrekt funktioniert. Dazu sind folgende Schritte erforderlich:

  1. Testdienst erstellen
  2. Einfache Datenebene in Compute Engine mit Envoy-Proxys bereitstellen
  3. Cloud Service Mesh mit Compute Engine APIs einrichten, mit denen Cloud Service Mesh Ihre Envoy-Sidecar-Proxys konfigurieren kann
  4. Bei einer VM anmelden, auf der ein Envoy-Proxy ausgeführt wird, und durch einen Envoy-Proxy eine Anfrage an ein Back-End mit Load-Balancing senden

Die Konfigurationsbeispiele in diesem Dokument dienen Demonstrationszwecken. In einer Produktionsumgebung müssen Sie möglicherweise je nach Umgebung und Anforderungen zusätzliche Komponenten bereitstellen.

Übersicht über den Konfigurationsprozess

In diesem Abschnitt wird die manuelle Konfiguration für Dienste beschrieben, die auf Compute Engine-VMs ausgeführt werden. Der Konfigurationsprozess für die Client-VMs besteht aus dem Einrichten eines Sidecar-Proxys und dem Abfangen von Traffic auf einem Compute Engine-VM-Host. Anschließend konfigurieren Sie das Load-Balancing mit Google Cloud Load Balancing APIs.

Dieser Abschnitt enthält Informationen zum Abrufen und Einfügen von Envoy-Proxys von Drittanbieterquellen, die nicht von Google verwaltet werden.

Wenn eine Anwendung Traffic an den in Cloud Service Mesh konfigurierten Dienst sendet, wird der Traffic abgefangen und an den mit der xDS API kompatiblen Sidecar-Proxy weitergeleitet. Anschließend wird das Load-Balancing auf die Back-Ends gemäß der Konfiguration in den Load-Balancing-Komponenten von Google Cloud verteilt. Weitere Informationen zum Abfangen von Hostnetzwerken und Traffic finden Sie unter Sidecar-Proxy-Traffic zum Abfangen in Cloud Service Mesh.

Führen Sie für jeden VM-Host, der Zugriff auf Cloud Service Mesh-Dienste benötigt, die folgenden Schritte aus:

  1. Weisen Sie der VM ein Dienstkonto zu.

  2. Legen Sie den API-Zugriffsbereich der VM fest, um vollständigen Zugriff auf die Google Cloud APIs zu ermöglichen.

    • Klicken Sie beim Erstellen der VMs unter Identität und API-Zugriff auf Uneingeschränkten Zugriff auf alle Cloud APIs zulassen.

      Zur Seite "VM-Instanzen".

    • Geben Sie mit der gcloud CLI Folgendes an:

      --scopes=https://www.googleapis.com/auth/cloud-platform.

  3. Lassen Sie ausgehende Verbindungen zu trafficdirector.googleapis.com (TCP, Port 443) von der VM zu, damit der Sidecar-Proxy über gRPC eine Verbindung zur Cloud Service Mesh-Steuerungsebene herstellen kann. Ausgehende Verbindungen zu Port 443 sind standardmäßig aktiviert.

  4. Stellen Sie einen mit xDS APIs kompatiblen Sidecar-Proxy (z. B. Envoy) mit einer Bootstrap-Konfiguration bereit, die auf trafficdirector.googleapis.com:443 als xDS-Server verweist. Um ein Beispiel für eine Bootstrap-Konfigurationsdatei zu erhalten, öffnen Sie die komprimierte Datei „traffic-director-xdsv3.tar.gz“ und passen Sie die Datei bootstrap_template.yaml an Ihre Anforderungen an.

  5. Leiten Sie den IP-Traffic, der für die Dienste bestimmt ist, an den Interception-Listener-Port des Sidecar-Proxys weiter.

Hello World-Testdienst erstellen

In diesem Abschnitt erfahren Sie, wie Sie einen einfachen Testdienst erstellen, der den Hostnamen der VM zurückgibt, die die Anfrage vom Client bereitgestellt hat. Der Testdienst ist unkompliziert. Es ist ein Webserver, der über eine von Compute Engine verwaltete Instanzgruppe bereitgestellt wird.

Instanzvorlage erstellen

In der von Ihnen erstellten Instanzvorlage wird ein Beispiel für den apache2-Webserver mit dem Parameter startup-script konfiguriert.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanzvorlagen auf.

    Zu Instanzvorlagen

  2. Klicken Sie auf Instanzvorlage erstellen.
  3. Geben Sie in die Felder folgende Informationen ein:
    • Name: td-demo-hello-world-template
    • Bootlaufwerk: Debian GNU/Linux 10 (Buster)
    • Dienstkonto: Standarddienstkonto für Compute Engine
    • Zugriffsbereiche: Erlauben Sie vollen Zugriff auf alle Cloud APIs
  4. Klicken Sie auf Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten.
  5. Fügen Sie auf dem Tab Netzwerk im Feld Netzwerk-Tags das Tag td-http-server hinzu.
  6. Kopieren Sie auf dem Tab Verwaltung das folgende Skript in das Feld Startskript.

    #! /bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>'`/bin/hostname`'</h1></body></html>' | sudo tee /var/www/html/index.html
    
  7. Klicken Sie auf Erstellen.

gcloud

Erstellen Sie die Instanzvorlage:

gcloud compute instance-templates create td-demo-hello-world-template \
  --machine-type=n1-standard-1 \
  --boot-disk-size=20GB \
  --image-family=debian-10 \
  --image-project=debian-cloud \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --tags=td-http-server \
  --metadata=startup-script="#! /bin/bash
sudo apt-get update -y
sudo apt-get install apache2 -y
sudo service apache2 restart
sudo mkdir -p /var/www/html/
echo '<!doctype html><html><body><h1>'`/bin/hostname`'</h1></body></html>' | sudo tee /var/www/html/index.html"

Verwaltete Instanzgruppe erstellen

In diesem Abschnitt geben Sie an, dass die verwaltete Instanzgruppe immer zwei Instanzen des Testdienstes enthält. Dies ist zu Demonstrationszwecken. Cloud Service Mesh unterstützt automatisch skalierte verwaltete Instanzgruppen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zu den Instanzgruppen

  2. Klicken Sie auf Instanzgruppe erstellen.
  3. Wählen Sie Neue verwaltete Instanzgruppe (zustandslos) aus. Weitere Informationen finden Sie unter Zustandslose oder zustandsorientierte MIGs.
  4. Geben Sie td-demo-hello-world-mig als Name für die verwaltete Instanzgruppe ein und wählen Sie die Zone us-central1-a aus.
  5. Wählen Sie unter Instanzvorlage die Option td-demo-hello-world-template aus. Dies ist die von Ihnen erstellte Instanzvorlage.
  6. Wählen Sie unter Autoscaling-Modus die Option Kein Autoscaling aus.
  7. Geben Sie unter Anzahl der Instanzen mindestens 2 als Anzahl der Instanzen an, die Sie in der Gruppe erstellen möchten.
  8. Klicken Sie auf Erstellen.

gcloud

Verwenden Sie die gcloud CLI, um eine verwaltete Instanzgruppe mit der zuvor erstellten Instanzvorlage zu erstellen.

gcloud compute instance-groups managed create td-demo-hello-world-mig \
  --zone us-central1-a \
  --size=2 \
  --template=td-demo-hello-world-template

Instanzvorlage und verwaltete Instanzgruppe erstellen, in der Envoy bereitgestellt wird

Folgen Sie der Anleitung in diesem Abschnitt, um manuell eine Instanzvorlage und eine verwaltete Instanzgruppe für Cloud Service Mesh zu erstellen. Verwaltete Instanzgruppen erstellen neue Back-End-VMs mithilfe von Autoscaling.

In diesem Beispiel wird Folgendes gezeigt:

  • Erstellen Sie eine VM-Vorlage mit einer vollständigen Envoy-Konfiguration und einem Beispieldienst, der seinen Hostnamen mithilfe des HTTP-Protokolls bereitstellt.
  • Verwaltete Instanzgruppe mithilfe dieser Vorlage konfigurieren.

Instanzvorlage erstellen

Erstellen Sie zuerst die Compute Engine-VM-Instanzvorlage. Diese Vorlage konfiguriert den Envoy-Sidecar-Proxy und den Beispiel-Apache2-Webdienst automatisch über den Parameter startup-script.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanzvorlagen auf.

    Zu Instanzvorlagen

  2. Klicken Sie auf Instanzvorlage erstellen.
  3. Füllen Sie die Felder so aus:

    • Name: td-vm-template
    • Bootlaufwerk: Debian GNU/Linux 10 (Buster)
    • Standarddienstkonto: Standarddienstkonto für Compute Engine
    • Zugriffsbereiche: Erlauben Sie vollen Zugriff auf alle Cloud APIs
  4. Aktivieren Sie unter Firewall die Kästchen neben HTTP-Traffic zulassen und HTTPS-Traffic zulassen.

  5. Klicken Sie auf Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten.

  6. Kopieren Sie auf dem Tab Verwaltung das folgende Skript in das Feld Startskript.

    #! /usr/bin/env bash
    
    # Set variables
    export ENVOY_USER="envoy"
    export ENVOY_USER_UID="1337"
    export ENVOY_USER_GID="1337"
    export ENVOY_USER_HOME="/opt/envoy"
    export ENVOY_CONFIG="${ENVOY_USER_HOME}/config.yaml"
    export ENVOY_PORT="15001"
    export ENVOY_ADMIN_PORT="15000"
    export ENVOY_TRACING_ENABLED="false"
    export ENVOY_XDS_SERVER_CERT="/etc/ssl/certs/ca-certificates.crt"
    export ENVOY_ACCESS_LOG="/dev/stdout"
    export ENVOY_NODE_ID="$(cat /proc/sys/kernel/random/uuid)~$(hostname -i)"
    export BOOTSTRAP_TEMPLATE="${ENVOY_USER_HOME}/bootstrap_template.yaml"
    export GCE_METADATA_SERVER="169.254.169.254/32"
    export INTERCEPTED_CIDRS="*"
    export GCP_PROJECT_NUMBER=PROJECT_NUMBER
    export VPC_NETWORK_NAME=NETWORK_NAME
    export GCE_ZONE=$(curl -sS -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/zone | cut -d"/" -f4)
    
    # Create system user account for Envoy binary
    sudo groupadd ${ENVOY_USER} \
     --gid=${ENVOY_USER_GID} \
     --system
    sudo adduser ${ENVOY_USER} \
     --uid=${ENVOY_USER_UID} \
     --gid=${ENVOY_USER_GID} \
     --home=${ENVOY_USER_HOME} \
     --disabled-login \
     --system
    
    # Download and extract the Cloud Service Mesh tar.gz file
    cd ${ENVOY_USER_HOME}
    sudo curl -sL https://storage.googleapis.com/traffic-director/traffic-director-xdsv3.tar.gz -o traffic-director-xdsv3.tar.gz
    sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/bootstrap_template.yaml \
     -C bootstrap_template.yaml \
     --strip-components 1
    sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/iptables.sh \
     -C iptables.sh \
     --strip-components 1
    sudo rm traffic-director-xdsv3.tar.gz
    
    # Generate Envoy bootstrap configuration
    cat "${BOOTSTRAP_TEMPLATE}" \
     | sed -e "s|ENVOY_NODE_ID|${ENVOY_NODE_ID}|g" \
     | sed -e "s|ENVOY_ZONE|${GCE_ZONE}|g" \
     | sed -e "s|VPC_NETWORK_NAME|${VPC_NETWORK_NAME}|g" \
     | sed -e "s|CONFIG_PROJECT_NUMBER|${GCP_PROJECT_NUMBER}|g" \
     | sed -e "s|ENVOY_PORT|${ENVOY_PORT}|g" \
     | sed -e "s|ENVOY_ADMIN_PORT|${ENVOY_ADMIN_PORT}|g" \
     | sed -e "s|XDS_SERVER_CERT|${ENVOY_XDS_SERVER_CERT}|g" \
     | sed -e "s|TRACING_ENABLED|${ENVOY_TRACING_ENABLED}|g" \
     | sed -e "s|ACCESSLOG_PATH|${ENVOY_ACCESS_LOG}|g" \
     | sed -e "s|BACKEND_INBOUND_PORTS|${BACKEND_INBOUND_PORTS}|g" \
     | sudo tee "${ENVOY_CONFIG}"
    
    # Install Envoy binary
    curl -sL "https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key" | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg
    echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list
    sudo apt update
    sudo apt -y install getenvoy-envoy
    
    # Run Envoy as systemd service
    sudo systemd-run --uid=${ENVOY_USER_UID} --gid=${ENVOY_USER_GID} \
     --working-directory=${ENVOY_USER_HOME} --unit=envoy.service \
     bash -c "/usr/bin/envoy --config-path ${ENVOY_CONFIG} | tee"
    
    # Configure iptables for traffic interception and redirection
    sudo ${ENVOY_USER_HOME}/iptables.sh \
     -p "${ENVOY_PORT}" \
     -u "${ENVOY_USER_UID}" \
     -g "${ENVOY_USER_GID}" \
     -m "REDIRECT" \
     -i "${INTERCEPTED_CIDRS}" \
     -x "${GCE_METADATA_SERVER}"
    
  7. Klicken Sie auf Erstellen, um die Vorlage anzulegen.

gcloud

Erstellen Sie die Instanzvorlage.

gcloud compute instance-templates create td-vm-template \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --tags=http-td-tag,http-server,https-server \
  --image-family=debian-10 \
  --image-project=debian-cloud \
  --metadata=startup-script='#! /usr/bin/env bash

# Set variables
export ENVOY_USER="envoy"
export ENVOY_USER_UID="1337"
export ENVOY_USER_GID="1337"
export ENVOY_USER_HOME="/opt/envoy"
export ENVOY_CONFIG="${ENVOY_USER_HOME}/config.yaml"
export ENVOY_PORT="15001"
export ENVOY_ADMIN_PORT="15000"
export ENVOY_TRACING_ENABLED="false"
export ENVOY_XDS_SERVER_CERT="/etc/ssl/certs/ca-certificates.crt"
export ENVOY_ACCESS_LOG="/dev/stdout"
export ENVOY_NODE_ID="$(cat /proc/sys/kernel/random/uuid)~$(hostname -i)"
export BOOTSTRAP_TEMPLATE="${ENVOY_USER_HOME}/bootstrap_template.yaml"
export GCE_METADATA_SERVER="169.254.169.254/32"
export INTERCEPTED_CIDRS="*"
export GCP_PROJECT_NUMBER=PROJECT_NUMBER
export VPC_NETWORK_NAME=NETWORK_NAME
export GCE_ZONE=$(curl -sS -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/zone | cut -d"/" -f4)

# Create system user account for Envoy binary
sudo groupadd ${ENVOY_USER} \
  --gid=${ENVOY_USER_GID} \
  --system
sudo adduser ${ENVOY_USER} \
  --uid=${ENVOY_USER_UID} \
  --gid=${ENVOY_USER_GID} \
  --home=${ENVOY_USER_HOME} \
  --disabled-login \
  --system
# Download and extract the Cloud Service Mesh tar.gz file
cd ${ENVOY_USER_HOME}
sudo curl -sL https://storage.googleapis.com/traffic-director/traffic-director-xdsv3.tar.gz -o traffic-director-xdsv3.tar.gz
sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/bootstrap_template.yaml \
  -C bootstrap_template.yaml \
  --strip-components 1
sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/iptables.sh \
  -C iptables.sh \
  --strip-components 1
sudo rm traffic-director-xdsv3.tar.gz

# Generate Envoy bootstrap configuration
cat "${BOOTSTRAP_TEMPLATE}" \
  | sed -e "s|ENVOY_NODE_ID|${ENVOY_NODE_ID}|g" \
  | sed -e "s|ENVOY_ZONE|${GCE_ZONE}|g" \
  | sed -e "s|VPC_NETWORK_NAME|${VPC_NETWORK_NAME}|g" \
  | sed -e "s|CONFIG_PROJECT_NUMBER|${GCP_PROJECT_NUMBER}|g" \
  | sed -e "s|ENVOY_PORT|${ENVOY_PORT}|g" \
  | sed -e "s|ENVOY_ADMIN_PORT|${ENVOY_ADMIN_PORT}|g" \
  | sed -e "s|XDS_SERVER_CERT|${ENVOY_XDS_SERVER_CERT}|g" \
  | sed -e "s|TRACING_ENABLED|${ENVOY_TRACING_ENABLED}|g" \
  | sed -e "s|ACCESSLOG_PATH|${ENVOY_ACCESS_LOG}|g" \
  | sed -e "s|BACKEND_INBOUND_PORTS|${BACKEND_INBOUND_PORTS}|g" \
  | sudo tee "${ENVOY_CONFIG}"

# Install Envoy binary
curl -sL "https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key" | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg
echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list
sudo apt update
sudo apt -y install getenvoy-envoy

# Run Envoy as systemd service
sudo systemd-run --uid=${ENVOY_USER_UID} --gid=${ENVOY_USER_GID} \
  --working-directory=${ENVOY_USER_HOME} --unit=envoy.service \
  bash -c "/usr/bin/envoy --config-path ${ENVOY_CONFIG} | tee"

# Configure iptables for traffic interception and redirection
sudo ${ENVOY_USER_HOME}/iptables.sh \
  -p "${ENVOY_PORT}" \
  -u "${ENVOY_USER_UID}" \
  -g "${ENVOY_USER_GID}" \
  -m "REDIRECT" \
  -i "${INTERCEPTED_CIDRS}" \
  -x "${GCE_METADATA_SERVER}"
'

Verwaltete Instanzgruppe erstellen

Wenn Sie keine verwaltete Instanzgruppe mit aktiven Diensten haben, erstellen Sie eine verwaltete Instanzgruppe mithilfe einer VM-Vorlage wie der im vorherigen Abschnitt gezeigten. In diesem Beispiel wird die im vorherigen Abschnitt erstellte Instanzvorlage zur Demonstration der Funktionalität verwendet. Sie müssen die Instanzvorlage nicht verwenden.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zu den Instanzgruppen

  2. Klicken Sie auf Instanzgruppe erstellen. Standardmäßig wird die Seite zum Erstellen einer verwalteten Instanzgruppe angezeigt.
  3. Wählen Sie Neue verwaltete Instanzgruppe (zustandslos) aus. Weitere Informationen finden Sie unter Zustandslose oder zustandsorientierte MIGs.
  4. Geben Sie td-vm-mig-us-central1 als Name für die verwaltete Instanzgruppe ein und wählen Sie die Zone us-central1-a aus.
  5. Wählen Sie unter Instanzvorlage die erstellte Vorlage aus.
  6. Geben Sie 2 als Anzahl der Instanzen an, die Sie in der Gruppe erstellen möchten.
  7. Klicken Sie auf Erstellen.

gcloud

Verwenden Sie die gcloud CLI, um eine verwaltete Instanzgruppe mit der zuvor erstellten Instanzvorlage zu erstellen.

gcloud compute instance-groups managed create td-vm-mig-us-central1 \
    --zone us-central1-a --size=2 --template=td-vm-template

Cloud Service Mesh mit Google Cloud-Load-Balancing-Komponenten konfigurieren

Die Anleitungen in diesem Abschnitt zeigen Ihnen, wie Sie Cloud Service Mesh so konfigurieren, dass Ihre Envoy-Proxys das Load-Balancing für ausgehenden Traffic zwischen zwei Back-End-Instanzen ausführen. Sie konfigurieren die folgenden Komponenten:

Systemdiagnose erstellen

Führen Sie zum Erstellen einer Systemdiagnose die folgenden Schritte aus. Weitere Informationen finden Sie unter Systemdiagnosen erstellen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Systemdiagnosen auf.

    Zur Seite „Systemdiagnosen“

  2. Klicken Sie auf Systemdiagnose erstellen.
  3. Geben Sie als Name td-vm-health-check ein.
  4. Wählen Sie als Protokoll HTTP aus.
  5. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie die Systemdiagnose:

    gcloud compute health-checks create http td-vm-health-check
    
  2. Erstellen Sie eine Firewallregel:

    gcloud compute firewall-rules create fw-allow-health-checks \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --target-tags http-td-tag,http-server,https-server \
      --rules tcp
    

Backend-Dienst erstellen

Wenn Sie Google Cloud CLI verwenden, müssen Sie den Backend-Dienst als globalen Backend-Dienst mit einem Load-Balancing-Schema des Typs INTERNAL_SELF_MANAGED festlegen. Fügen Sie dem Backend-Dienst die Systemdiagnose und eine verwaltete oder nicht verwaltete Instanzgruppe hinzu. In diesem Beispiel wird die verwaltete Instanzgruppe mit Compute Engine-VM-Vorlage verwendet, die den Beispiel-HTTP-Dienst ausführt, der unter Verwaltete Instanzgruppe erstellen erstellt wurde.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Service Mesh auf.

    Zu Cloud Service Mesh

  2. Klicken Sie auf dem Tab Dienste auf Dienst erstellen.
  3. Klicken Sie auf Weiter.
  4. Geben Sie als Dienstname td-vm-service ein.
  5. Wählen Sie das richtige VPC-Netzwerk aus.
  6. Achten Sie darauf, dass der Back-End-Typ Instanzgruppen ist.
  7. Wählen Sie die von Ihnen erstellte verwaltete Instanzgruppe aus.
  8. Geben Sie die richtigen Portnummern ein.
  9. Wählen Sie Auslastung oder Rate als Balancing-Modus aus. Der Standardwert ist Rate.
  10. Klicken Sie auf Fertig.
  11. Wählen Sie die erstellte Systemdiagnose aus.
  12. Klicken Sie auf Speichern und fortfahren.
  13. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie den Backend-Dienst:

    gcloud compute backend-services create td-vm-service \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --health-checks td-vm-health-check
    
  2. Fügen Sie dem Backend-Dienst die Backends hinzu:

    gcloud compute backend-services add-backend td-vm-service \
       --instance-group td-demo-hello-world-mig \
       --instance-group-zone us-central1-a \
       --global
    

Routingregelzuordnung erstellen

Die Routingregelzuordnung definiert, wie Cloud Service Mesh Traffic in Ihrem Mesh-Netzwerk weiterleitet.

Folgen Sie dieser Anleitung, um die Routingregel, die Weiterleitungsregel, den Zielproxy und die interne IP-Adresse für Ihre Cloud Service Mesh-Konfiguration zu erstellen.

Der an die interne IP-Adresse gesendete Traffic wird vom Envoy-Proxy abgefangen und gemäß den Host- und Pfadregeln an den entsprechenden Dienst gesendet.

Die Weiterleitungsregel wird als globale Weiterleitungsregel erstellt, wobei load-balancing-scheme auf INTERNAL_SELF_MANAGED gesetzt ist.

Sie können die Adresse Ihrer Weiterleitungsregel auf 0.0.0.0 festlegen. Andernfalls wird der Traffic unabhängig von der tatsächlichen Ziel-IP-Adresse der Anfrage basierend auf dem HTTP-Hostnamen und den Pfadinformationen weitergeleitet, die in der URL-Zuordnung konfiguriert sind. In diesem Fall dürfen die Hostnamen Ihrer Dienste gemäß den Hostregeln in der Service Mesh-Konfiguration nur einmal vorkommen. Das heißt, Sie können nicht zwei verschiedene Dienste mit unterschiedlichen Back-End-Gruppen nutzen, die denselben Hostnamen verwenden.

Alternativ können Sie das Routing basierend auf der tatsächlichen Ziel-VIP des Dienstes aktivieren. Wenn Sie die VIP Ihres Dienstes als address-Parameter der Weiterleitungsregel konfigurieren, werden nur Anfragen an diese IP-Adresse weitergeleitet, die auf den in der URL-Zuordnung angegebenen HTTP-Parametern basieren.

In diesem Beispiel wird 10.0.0.1 als Adressparameter verwendet. Dies bedeutet, dass das Routing für Ihren Dienst auf Grundlage der tatsächlichen Ziel-VIP des Dienstes durchgeführt wird.

Console

In der Google Cloud Console wird der Zielproxy mit der Weiterleitungsregel kombiniert. Wenn Sie die Weiterleitungsregel erstellen, erstellt Google Cloud automatisch einen Ziel-HTTP-Proxy und verknüpft ihn mit der URL-Zuordnung.

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Service Mesh auf.

    Zu Cloud Service Mesh

  2. Klicken Sie auf dem Tab Routingregelzuordnungen auf Routingregelzuordnung erstellen.
  3. Geben Sie einen Namen ein.
  4. Klicken Sie auf Weiterleitungsregel hinzufügen.
  5. Geben Sie als Name für die Weiterleitungsregel td-vm-forwarding-rule ein.
  6. Wählen Sie das Netzwerk aus.
  7. Wählen Sie Ihre Interne IP-Adresse aus. Der an diese IP-Adresse gesendete Traffic wird vom Envoy-Proxy abgefangen und gemäß den Host- und Pfadregeln an den entsprechenden Dienst gesendet.

    Die Weiterleitungsregel wird als globale Weiterleitungsregel erstellt, wobei load-balancing-scheme auf INTERNAL_SELF_MANAGED gesetzt ist.

  8. Geben Sie im Feld Benutzerdefinierte IP den Wert 10.0.0.1 ein. Wenn Ihre VM Traffic an diese IP-Adresse sendet, wird er vom Envoy-Proxy abgefangen und an den Endpunkt des entsprechenden Back-End-Dienstes gesendet, der in den Trafficverwaltungsregeln der URL-Zuordnung definiert ist.

    Jede Weiterleitungsregel in einem VPC-Netzwerk muss eine eindeutige IP-Adresse und einen eindeutigen Port pro VPC-Netzwerk haben. Wenn Sie mehrere Weiterleitungsregeln mit derselben IP-Adresse und demselben Port in einem bestimmten VPC-Netzwerk erstellen, ist nur die erste Weiterleitungsregel gültig. Andere werden ignoriert. Wenn 10.0.0.1 in Ihrem Netzwerk nicht verfügbar ist, wählen Sie eine andere IP-Adresse aus.

  9. Achten Sie darauf, dass der Port auf 80 festgelegt ist.

  10. Klicken Sie auf Speichern.

  11. Wählen Sie im Abschnitt Routingregeln die Option Einfache Host- und Pfadregel aus.

  12. Wählen Sie im Abschnitt Host- und Pfadregeln td-vm-service als Dienst aus.

  13. Klicken Sie auf Host- und Pfadregel hinzufügen.

  14. Geben Sie im Feld Hosts den Wert hello-world ein.

  15. Wählen Sie unter Dienst die Option td-vm-service aus.

  16. Klicken Sie auf Speichern.

gcloud

  1. Erstellen Sie eine URL-Zuordnung, die den Backend-Dienst verwendet:

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Erstellen Sie ein Tool zum Abgleich von Pfaden für URL-Zuordnungen und eine Hostregel, um den Traffic für Ihren Dienst auf Grundlage des Hostnamens und Pfads weiterzuleiten. In diesem Beispiel werden service-test als Dienstname und ein Standardtool zum Abgleich von Pfaden verwendet, das mit allen Pfadanfragen für diesen Host (/*) übereinstimmt.

    gcloud compute url-maps add-path-matcher td-vm-url-map \
       --default-service td-vm-service --path-matcher-name td-vm-path-matcher
    
    gcloud compute url-maps add-host-rule td-vm-url-map --hosts service-test \
       --path-matcher-name td-vm-path-matcher \
       --hosts hello-world
    
  3. Erstellen Sie den Ziel-HTTP-Proxy.

    gcloud compute target-http-proxies create td-vm-proxy \
       --url-map td-vm-url-map
    
  4. Erstellen Sie die Weiterleitungsregel. Die Weiterleitungsregel muss global sein und mit dem Wert load-balancing-scheme auf INTERNAL_SELF_MANAGED erstellt werden.

    gcloud compute forwarding-rules create td-vm-forwarding-rule \
       --global \
       --load-balancing-scheme=INTERNAL_SELF_MANAGED \
       --address=10.0.0.1 \
       --target-http-proxy=td-vm-proxy \
       --ports 80 \
       --network default
    

An dieser Stelle ist Cloud Service Mesh so konfiguriert, dass das Load-Balancing des Traffics für die in der URL-Zuordnung angegebenen Dienste auf Back-Ends in der verwalteten Instanzgruppe erfolgt.

Konfiguration prüfen

In diesem letzten Teil des Cloud Service Mesh-Einrichtungsleitfadens für Compute Engine-VMs testen Sie, ob der von der Client-VM an die Weiterleitungsregel-VIP gesendete Traffic abgefangen und an den Envoy-Proxy weitergeleitet wird, der Ihre Anfrage dann an die VMs weiterleitet, die den Dienst Hello World hosten.

Prüfen Sie zuerst anhand der folgenden Schritte, ob die Back-Ends fehlerfrei sind:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Service Mesh auf.

    Zu Cloud Service Mesh

    In der Zusammenfassung wird angezeigt, ob die Dienste fehlerfrei sind.

  2. Klicken Sie auf den Namen eines Dienstes. Auf der Seite Dienstdetails finden Sie Informationen zum Zustand der Back-Ends.
  3. Wenn die Back-Ends fehlerhaft sind, können Sie sie zurücksetzen. Dazu klicken Sie auf den Namen der Back-Ends und dann auf der Seite VM-Instanzdetails auf Zurücksetzen.

gcloud

Prüfen Sie mit dem Befehl compute backend-services get-health, ob die Back-Ends fehlerfrei sind:

gcloud compute backend-services get-health td-vm-service \
    --global \
    --format=get(name, healthStatus)

Melden Sie sich nach der Prüfung des Systemstatus der Back-Ends bei der Client-VM an, die so konfiguriert ist, dass sie den Traffic abfängt und an Envoy weiterleitet. Sie senden eine curl-Anfrage an die VIP, die mit Ihrer Routingregelzuordnung verknüpft ist. Envoy prüft die curl-Anfrage, bestimmt, zu welchem Dienst sie aufgelöst werden soll, und sendet die Anfrage an ein Backend, das mit diesem Dienst verknüpft ist.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zu den Instanzgruppen

  2. Wählen Sie die Instanzgruppe td-vm-mig-us-central1 aus.
  3. Klicken Sie unter Verbinden auf SSH.
  4. Nachdem Sie sich bei der Client-VM angemeldet haben, senden Sie mit dem curl-Tool eine Anfrage an den Dienst Hello World über Envoy:

    curl -H "Host: hello-world" http://10.0.0.1/
    

Wenn Sie diesen Befehl wiederholt ausführen, werden in der verwalteten Instanzgruppe Hello World unterschiedliche HTML-Antworten mit den Hostnamen der Back-Ends angezeigt. Dies liegt daran, dass Envoy beim Senden von Traffic an die Back-Ends des Dienstes Hello World den Standard-Load-Balancing-Algorithmus "Round Robin" verwendet.

Wenn die Konfiguration abgeschlossen ist, kann jede Compute Engine-VM mit einem Sidecar-Proxy auf Dienste zugreifen, die in Cloud Service Mesh über das HTTP-Protokoll konfiguriert sind.

Wenn Sie die spezifischen Beispiele in dieser Anleitung befolgt und die Compute Engine-VM-Vorlage mit dem HTTP-Server- und Diensthostnamen service-test verwendet haben, prüfen Sie die Konfiguration anhand dieser Schritte:

  1. Melden Sie sich bei einem der VM-Hosts an, auf dem ein Sidecar-Proxy installiert ist.
  2. Führen Sie den Befehl curl -H 'Host: service-test' 10.0.0.1 aus. Diese Anfrage gibt den Hostnamen des Back-Ends der verwalteten Instanzgruppe zurück, das die Anfrage verarbeitet hat.

In Schritt 2 können Sie eine beliebige IP-Adresse verwenden. Der Befehl curl -I -H 'Host: service-test' 1.2.3.4 funktioniert beispielsweise in Schritt 2.

Das liegt daran, dass der Adressparameter der Weiterleitungsregel auf 0.0.0.0 gesetzt ist. Dadurch wird Cloud Service Mesh angewiesen, den Abgleich anhand des in der URL-Zuordnung definierten Hosts durchzuführen. In der Beispielkonfiguration lautet der Hostname service-test.

Nächste Schritte