Edge-Netzwerkdienste mit Netzwerk-Endpunktgruppen mit Hybridkonnektivität einrichten

Google bietet verschiedene Edge-Netzwerkdienste an, mit denen die Funktionen und Sicherheit von Diensten außerhalb von Google Cloud (lokale und Multi-Cloud-Dienste) erweitert werden können, z. B. in einem lokalen Rechenzentrum oder in einer anderen öffentlichen Cloud.

Mit diesen Edge-Netzwerkdiensten können Sie:

Beispiel für Edge-Netzwerkdienste.
Beispiel für Edge-Netzwerkdienste (zum Vergrößern klicken)

Damit die entsprechenden Möglichkeiten für Ihre privaten, lokalen oder Multi-Cloud-Diensten verfügbar sind, erstellen Sie einen externen Application Load Balancer, um Traffic aus dem öffentlichen Internet empfangen zu können. Der externe Application Load Balancer leitet den Traffic an einen mittleren Proxy weiter, der von Cloud Service Mesh konfiguriert wird. Dieser mittlere Proxy leitet den Traffic über Cloud VPN oder Cloud Interconnect an Ihre lokale Umgebung oder Nicht-Google Cloud-Umgebung weiter.

In dieser Anleitung führen Sie ein End-to-End-Beispiel aus, in dem Google Cloud Armor am Rand von Google verwendet wird, um Clients selektiv den privaten Zugriff auf einen lokalen Dienst zu ermöglichen. Die Clients erhalten Zugriff über ihre IP-Adresse.

Sie führen dabei die folgenden Aufgaben aus:

  1. Envoy als mittleren Proxy in einer verwalteten Instanzgruppe (Managed Instance Group, MIG) bereitstellen. Dieser Envoy-Proxy wird automatisch mit Cloud Service Mesh verbunden.
  2. Simulierte private, lokale VM-Instanz erstellen. In einem praktischen Beispiel ist vermutlich bereits eine lokale VM vorhanden.
  3. Cloud Service Mesh so konfigurieren, dass alle Anfragen, die den mittleren Proxy erreichen, an die simulierte lokale VM weitergeleitet werden.
  4. Erstellen Sie einen externen Application Load Balancer, um Traffic aus dem öffentlichen Internet zu empfangen und an den mittleren Proxy weiterzuleiten.
  5. Hängen Sie eine Google Cloud Armor-Sicherheitsrichtlinie an den externen Application Load Balancer an.

Wenn Sie diese Aufgaben ausgeführt haben, können Sie optional zusätzliche Edge-Dienste und erweiterte Features zur Trafficverwaltung prüfen.

Vorbereitung

Führen Sie, bevor Sie den mittleren Proxy einrichten, die folgenden Aufgaben aus:

  • Lesen Sie den Abschnitt Einrichtung von Cloud Service Mesh mit Envoy vorbereiten und führen Sie alle erforderlichen Aufgaben aus. Dazu gehören das Gewähren der erforderlichen Berechtigungen und Rollen sowie das Aktivieren der Cloud Service Mesh API.

  • Sorgen Sie dafür, dass Ihre privaten lokalen Endpunkte über Ihr Google Cloud-Virtual Private Cloud-Netzwerk (VPC) über Cloud VPN oder Cloud Interconnect erreichbar sind. Das in dieser Anleitung verwendete Beispiel leitet den Traffic nur an einen Endpunkt innerhalb von Google Cloud weiter. Daher müssen Sie keine Hybridkonnektivität konfigurieren, um fortzufahren. In einer realen Bereitstellungsszenario wäre die Konfiguration von Hybridkonnektivität erforderlich.

  • Achten Sie darauf, dass die CIDR-Bereiche Ihres VPC-Subnetzes nicht mit Ihren Remote-CIDR-Bereichen in Konflikt stehen. Bei Überschneidung von IP-Adressen haben Subnetzrouten Vorrang vor Remote-Verbindungen.

  • Erteilen Sie für diese Demo die erforderlichen Berechtigungen zum Erstellen und Aktualisieren von Google Cloud Armor-Sicherheitsrichtlinien. Die Berechtigungen können variieren, wenn Sie einen anderen Dienst wie Cloud CDN verwenden.

Mittleren Proxy auf Compute Engine-VMs bereitstellen

In diesem Abschnitt wird gezeigt, wie Sie Envoy als mittleren Proxy in Compute Engine bereitstellen, um Traffic vom externen Load-Balancer empfangen und an Ihr Remote-Ziel weiterleiten zu können.

Instanzvorlage für den mittleren Proxy erstellen

Eine Instanzvorlage legt die Konfiguration für VMs in einer verwalteten Instanzgruppe fest.

  1. Verwenden Sie die folgende Vorlage, um VM-Instanzen mit einem Envoy-Proxy zu erstellen, der mit Cloud Service Mesh verbunden ist:

    gcloud compute instance-templates create td-middle-proxy \
        --service-proxy=enabled \
        --tags=allow-hc
    
  2. Informationen zum Anpassen der Envoy-Bereitstellung, z. B. durch Angabe des Netzwerknamens, Festlegen eines Logpfads oder Aktivieren von Tracing, finden Sie im Leitfaden für die automatische Bereitstellungsoption für Envoy.

MIG für den mittleren Proxy erstellen

  1. Erstellen Sie eine MIG anhand der Vorlage. In diesem Beispiel können Sie die Instanzgruppengröße von 1 übernehmen, um eine einzelne Instanz bereitzustellen. Für eine Produktionsbereitstellung aktivieren Sie Autoscaling, etwa anhand der CPU-Auslastung. So vermeiden Sie einen Engpass, wenn Ihr mittlerer Proxy sehr viel Traffic bewältigen muss.

    gcloud compute instance-groups managed create td-middle-proxy-us-central1-a \
        --zone=us-central1-a \
        --template=td-middle-proxy \
        --size=1
    
  2. Identifizieren und speichern Sie für zukünftige Konfigurationen und Überprüfungen die interne IP-Adresse der Instanz in MIDDLE_PROXY_IP:

    MIDDLE_PROXY_IP=$(gcloud compute instances list \
        --filter="name~'td-middle-proxy-us-central1-a-.*'" \
        --zones=us-central1-a \
        --format="value(networkInterfaces.networkIP)")
    

In diesem Beispiel erstellen wir die MIG, die VM-Instanzen enthält, auf denen Envoy in us-central1-a ausgeführt wird. Später in dieser Anleitung erstellen Sie einen externen Load-Balancer, um den öffentlichen Internettraffic von Ihren Clients zu verarbeiten.

Da der externe Load-Balancer den Traffic automatisch an die Region weiterleiten kann, die Ihren Clients und der MIG in dieser Region am nächsten ist, sollten Sie gegebenenfalls mehrere MIGs erstellen. Eine vollständige Liste der verfügbaren Regionen und Zonen von Google Cloud finden Sie unter Regionen und Zonen.

Simulierten lokalen Dienst bereitstellen

In diesem Abschnitt wird gezeigt, wie Sie eine Netzwerk-Endpunktgruppe (NEG) mit Hybridkonnektivität bereitstellen. In einer Produktionsbereitstellung enthält diese NEG einen Endpunkt (IP:port), der auf Ihren lokalen Server aufgelöst wird. In diesem Beispiel erstellen Sie eine Compute Engine-VM, die auf einem IP:port erreichbar ist. Diese VM dient als simulierter lokaler Server.

Simulierte lokale VM erstellen

  1. Stellen Sie eine einzelne VM-Instanz zum Simulieren eines privaten lokalen Servers bereit:

    gcloud compute instances create on-prem-vm \
        --zone=us-central1-a \
        --metadata startup-script='#! /bin/bash
    ## Installs apache and a custom homepage
    sudo su -
    apt-get update
    apt-get install -y apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><h1>Hello world from on-premises!</h1></body></html>
    EOF'
    
  2. Ermitteln und speichern Sie die interne IP-Adresse für zukünftige Konfigurationen und Prüfungen. Der Server auf dieser VM überwacht eingehende Anfragen auf Port 80.

    ON_PREM_IP=$(gcloud compute instances describe on-prem-vm \
        --zone=us-central1-a \
        --format="value(networkInterfaces.networkIP)" | sed "s/['\[\]]*//g")
    

NEG erstellen

Erstellen Sie die NEG für diese Demoeinrichtung, indem Sie den Netzwerk-Endpunkttyp non-gcp-private-ip-port angeben. Fügen Sie dieser NEG die IP-Adresse und den Port für Ihre simulierte lokale VM als Endpunkt hinzu. Gemäß dem vorherigen Schritt wird die IP-Adresse in der Umgebungsvariable ON_PREM_IP gespeichert.

  1. Erstellen Sie die NEG:

    gcloud compute network-endpoint-groups create td-on-prem-neg \
        --network-endpoint-type=non-gcp-private-ip-port \
        --zone=us-central1-a
    
  2. Fügen Sie den IP:port Ihrer neuen NEG hinzu:

    gcloud compute network-endpoint-groups update td-on-prem-neg \
        --zone=us-central1-a \
        --add-endpoint="ip=$ON_PREM_IP,port=80"
    

Cloud Service Mesh mit Cloud Load Balancing-Komponenten konfigurieren

In diesem Abschnitt wird gezeigt, wie Sie Cloud Service Mesh konfigurieren und den mittleren Proxy aktivieren, um Traffic an Ihren privaten lokalen Dienst weiterzuleiten. Sie konfigurieren dabei die folgenden Komponenten:

  • Systemdiagnose Diese Systemdiagnose unterscheidet sich leicht von den Systemdiagnosen, die für andere NEG-Typen konfiguriert sind.

  • Back-End-Dienst Weitere Informationen finden Sie in der Übersicht zu Back-End-Diensten.

  • Eine Routingregelzuordnung: Zu diesem Schritt gehört das Erstellen einer Weiterleitungsregel, eines Zielproxys und einer URL-Zuordnung. Weitere Informationen finden Sie unter Routingregelzuordnungen.

Systemdiagnose erstellen

Mit Systemdiagnosen wird geprüft, ob Ihre Endpunkte fehlerfrei sind und Anfragen empfangen können. Die Systemdiagnose für diesen NEG-Typ basiert auf dem Mechanismus für verteilte Systemdiagnosen von Envoy.

Andere NEG-Typen verwenden das zentralisierte Systemdiagnosesystem von Google Cloud:

gcloud compute health-checks create http td-on-prem-health-check

Back-End-Dienst erstellen

  1. Erstellen Sie einen Back-End-Dienst mit dem Load Balancing-Schema INTERNAL_SELF_MANAGED zur Verwendung mit Cloud Service Mesh. Geben Sie beim Erstellen dieses Back-End-Dienstes die zuvor angelegte Systemdiagnose an:

    gcloud compute backend-services create td-on-prem-backend-service \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --health-checks=td-on-prem-health-check
    
  2. Fügen Sie die zuvor erstellte NEG als Back-End dieses Back-End-Dienstes hinzu:

    gcloud compute backend-services add-backend td-on-prem-backend-service \
        --global \
        --network-endpoint-group=td-on-prem-neg \
        --network-endpoint-group-zone=us-central1-a \
        --balancing-mode=RATE \
        --max-rate-per-endpoint=5
    

Routingregelzuordnung erstellen

Die Zuordnung von Routingregeln definiert, wie Cloud Service Mesh den Traffic an Ihren Back-End-Dienst weiterleitet.

  1. Erstellen Sie eine URL-Zuordnung, die den zuvor definierten Back-End-Dienst verwendet:

    gcloud compute url-maps create td-hybrid-url-map \
        --default-service=td-on-prem-backend-service
    
  2. Erstellen Sie eine Datei mit dem Namen target_proxy.yaml und mit folgendem Inhalt:

    name: td-hybrid-proxy
    proxyBind: true
    urlMap: global/urlMaps/td-hybrid-url-map
    
  3. Verwenden Sie den Befehl import, um den Ziel-HTTP-Proxy zu erstellen. Weitere Informationen finden Sie unter Zielproxys für Cloud Service Mesh:

    gcloud compute target-http-proxies import td-hybrid-proxy \
        --source=target_proxy.yaml
    
  4. Erstellen Sie eine Weiterleitungsregel, die auf diesen Ziel-HTTP-Proxy verweist. Legen Sie für die IP-Adresse der Weiterleitungsregel den Wert 0.0.0.0 fest. Wenn die IP-Adresse der Regel auf 0.0.0.0 eingestellt ist, wird der Traffic basierend auf dem eingehenden Port, dem HTTP-Hostnamen und den Pfadinformationen weitergeleitet, die in der URL-Zuordnung konfiguriert sind. Die in der HTTP-Anfrage angegebene IP-Adresse wird ignoriert.

    gcloud compute forwarding-rules create td-hybrid-forwarding-rule \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --address=0.0.0.0 \
        --target-http-proxy=td-hybrid-proxy \
        --ports=8080 \
        --network=default
    

Weiterleitung von Anfragen an den simulierten lokalen Dienst durch den mittleren Proxy prüfen

Cloud Service Mesh ist jetzt so konfiguriert, dass der Traffic über den mittleren Proxy zu Ihrem simulierten privaten lokalen Dienst weitergeleitet wird. Sie können diese Konfiguration prüfen. Dazu erstellen Sie eine Testclient-VM, melden sich bei dieser VM an und senden eine Anfrage an den mittleren Proxy, der Envoy ausführt. Nachdem Sie die Konfiguration überprüft haben, löschen Sie die Testclient-VM.

  1. Rufen Sie die IP-Adresse des mittleren Proxys ab. Sie benötigen diese Information nur für den Schritt zur Bestätigung:

    gcloud compute instances list
    
  2. Notieren Sie sich die IP-Adresse der Instanz in der MIG td-middle-proxy-us-central1-a.

  3. Erstellen Sie eine Testclientinstanz:

    gcloud compute instances create test-client \
        --zone=us-central1-a
    
  4. Melden Sie sich mit ssh beim Testclient an:

    gcloud compute ssh test-client
        --zone=us-central1-a
    
  5. Senden Sie eine Anfrage an die VM des mittleren Proxys. Ersetzen Sie dabei die IP-Adresse, die Sie zuvor für MIDDLE_PROXY_IP abgerufen haben:

    curl $MIDDLE_PROXY_IP:8080
    

    Es sollte folgende Ausgabe angezeigt werden:

    Hello world from on-premises!
    
  6. Beenden Sie die Testclient-VM. Nach dem Beenden können Sie die VM löschen:

    gcloud compute instances delete test-client \
        --zone=us-central1-a
    

Externen Application Load Balancer bereitstellen

In diesem Abschnitt stellen Sie einen externen Application Load Balancer bereit, der eingehenden Traffic an den mittleren Proxy sendet. Diese Bereitstellung ist die Standardeinrichtung des externen Application Load Balancers.

Externe IP-Adresse reservieren

Erstellen Sie eine globale statische externe IP-Adresse (external-lb-vip), an die externe Clients Traffic senden. Sie erhalten diese externe IP-Adresse während des Bestätigungsschritts weiter unten in dieser Anleitung.

gcloud compute addresses create external-lb-vip \
    --ip-version=IPV4 \
    --global

Externen HTTP-Load-Balancer einrichten

Konfigurieren Sie den externen Load-Balancer, um Traffic von Internetkunden an Ihren bereits konfigurierten mittleren Proxy weiterzuleiten.

  1. Erstellen Sie eine Systemdiagnose, mit der ermittelt wird, ob die MIG, die den mittleren Proxy ausführt, fehlerfrei ist und Traffic empfangen kann:

    gcloud compute health-checks create tcp tcp-basic-check \
        --port=8080
    
  2. Erstellen Sie eine Firewallregel, um Systemdiagnosen zuzulassen. Hier können Sie das Tag allow-hc wiederverwenden, um die Firewallregel auf die VMs des mittleren Proxys anzuwenden:

    gcloud compute firewall-rules create fw-allow-health-checks \
        --network=default \
        --action=ALLOW \
        --direction=INGRESS \
        --source-ranges=35.191.0.0/16,130.211.0.0/22 \
        --target-tags=allow-hc \
        --rules=tcp
    
  3. Erstellen Sie einen Backend-Dienst.

    gcloud compute backend-services create td-middle-proxy-backend-service \
        --protocol=HTTP \
        --health-checks=tcp-basic-check \
        --global
    
  4. Fügen Sie diesem Back-End-Dienst die MIG des mittleren Proxys als Back-End hinzu:

    gcloud compute backend-services add-backend td-middle-proxy-backend-service \
        --instance-group=td-middle-proxy-us-central1-a \
        --instance-group-zone=us-central1-a \
        --global
    
  5. Erstellen Sie eine URL-Zuordnung, die alle eingehenden Anfragen an den mittleren Proxy als Standard-Back-End-Dienst weiterleitet:

    gcloud compute url-maps create lb-map-http \
        --default-service=td-middle-proxy-backend-service
    
  6. Erstellen Sie einen Ziel-HTTP-Proxy, damit Anfragen an die Weiterleitungsregel-VIP (virtuelle IP-Adresse) des externen Load-Balancers entsprechend der URL-Zuordnung verarbeitet werden:

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map=lb-map-http
    
  7. Erstellen Sie eine globale Weiterleitungsregel, um eingehende Anfragen an den Ziel-HTTP-Proxy weiterzuleiten:

    gcloud compute forwarding-rules create http-forwarding-rule \
        --address=external-lb-vip\
        --global \
        --load-balancing-scheme=EXTERNAL \
        --target-http-proxy=http-lb-proxy \
        --ports=80
    

Benannten Port der MIG festlegen

Legen Sie einen benannten Port für die Instanzgruppe fest, damit der mittlere Proxy HTTP-Traffic vom externen Load-Balancer empfangen kann:

gcloud compute instance-groups managed set-named-ports td-middle-proxy-us-central1-a \
    --named-ports=http:8080 \
    --zone=us-central1-a

Konfiguration des externen Application Load Balancers überprüfen

In diesem Schritt prüfen Sie, ob der externe Load-Balancer korrekt eingerichtet ist.

  1. Sie müssen dazu eine Anfrage an die VIP des Load-Balancers senden können und daraufhin eine Antwort von der simulierten lokalen VM erhalten:

    PUBLIC_VIP=gcloud compute addresses describe external-lb-vip \
        --format="get(address)" \
        --global
    
  2. Senden Sie eine curl-Anfrage an die externe IP-Adresse (PUBLIC_VIP) und prüfen Sie, ob die Nachricht Hello world bei Ihnen eingeht:

    curl $PUBLIC_VIP
    

    Die folgende Ausgabe wird angezeigt:

    Hello world from on-premises!
    

Google Cloud Armor aktivieren

Konfigurieren Sie Google Cloud Armor-Sicherheitsrichtlinien so, dass nur der Zugriff auf Ihren Dienst von CLIENT_IP_RANGE zugelassen wird. Das sollte die externe IP-Adresse des Clientgeräts einschließen, mit dem Sie testen möchten. Beispiel: "192.0.2.0/24".

Diese Richtlinien werden auf den Back-End-Dienst des externen Load Balancers angewendet. In diesem Beispiel verweist td-hybrid-backend-service auf den mittleren Proxy. Weitere Informationen zu den Berechtigungen, die zum Festlegen dieser Regeln erforderlich sind, finden Sie unter Google Cloud Armor-Sicherheitsrichtlinien konfigurieren.

  1. Erstellen Sie die Google Cloud Armor-Sicherheitsrichtlinie:

    gcloud compute security-policies create external-clients-policy \
        --description="policy for external clients"
    
  2. Ändern Sie die Standardregel der Sicherheitsrichtlinie, um den gesamten Traffic abzulehnen:

    gcloud compute security-policies rules update 2147483647 \
        --security-policy=external-clients-policy \
        --action="deny-404"
    
  3. Fügen Sie eine Regel mit höherer Priorität hinzu, um Traffic von einem bestimmten IP-Bereich zuzulassen:

    gcloud compute security-policies rules create 1000 \
        --security-policy=external-clients-policy \
        --description="allow traffic from CLIENT_IP_RANGE" \
        --src-ip-ranges="CLIENT_IP_RANGE" \
        --action="allow"
    
  4. Hängen Sie die Google Cloud Armor-Sicherheitsrichtlinien an Ihren Back-End-Dienst an:

    gcloud compute backend-services update td-middle-proxy-backend-service \
        --security-policy=external-clients-policy
    

Endgültige Bestätigung

  1. Senden Sie eine curl-Anfrage an die öffentliche virtuelle IP-Adresse des externen Application Load Balancers. Wenn die IP-Adresse Ihres Clientgeräts im zulässigen CLIENT_IP_RANGE liegt, den Sie zuvor angegeben haben, sollten Sie die erwartete Antwort erhalten.

    curl $PUBLIC_VIP
    

    Die folgende Ausgabe wird angezeigt:

    Hello world from on-premises!
    
  2. Senden Sie die gleiche curl-Anfrage von einem anderen Clientgerät, dessen IP-Adresse außerhalb von CLIENT_IP_RANGE liegt, oder aktualisieren Sie Ihre Sicherheitsrichtlinienregel und entfernen Sie daraus die Client-IP-Adresse. Es sollte nun der Fehler 404 Not Found angezeigt werden.

Fehlerbehebung

In der folgenden Anleitung wird beschrieben, wie Sie Probleme mit Ihrer Konfiguration beheben.

Mein lokaler Dienst ist nicht über die globale IP-Adresse des externen Application Load Balancers erreichbar

Wenn der lokale Dienst auf den Google Cloud-VMs, auf denen Envoy ausgeführt wird, erreichbar ist, führen Sie die unten aufgeführten Schritte zur Fehlerbehebung aus:

  1. Achten Sie darauf, dass die Google Cloud-Envoy-MIG als fehlerfrei gemeldet wird. Klicken Sie in der Google Cloud Console auf Netzwerkdienste > Load-Balancing und dann auf url-map lb-map-http, um Details dazu aufzurufen. 1/1 der Instanz in td-middle-proxy-us-central1-a sollte als fehlerfrei angezeigt werden.

  2. Falls ein Fehler vorliegt, prüfen Sie, ob eine Firewallregel konfiguriert wurde, die eingehenden Traffic der Systemdiagnose zu den Google Cloud-VMs zulässt, auf denen Envoy ausgeführt wird:

    gcloud compute firewall-rules describe fw-allow-health-check
    

    Es sollte folgende Ausgabe angezeigt werden:

    allowed:
    ‑ IPProtocol: tcp
    ...
    direction: INGRESS
    disabled: false
    ...
    ...
    sourceRanges:
    ‑ 130.211.0.0/22
    ‑ 35.191.0.0/16
    targetTags:
    ‑ allow-hc
    

Nächste Schritte