Edge-Netzwerkdienste für Bereitstellungen in mehreren Umgebungen

Google bietet eine Vielzahl an Edge-Netzwerkdiensten, mit denen sich die Funktionen und die Sicherheit von Diensten außerhalb von Google Cloud (lokale und Multi-Cloud-Dienste) erweitern lassen, beispielsweise in einem lokalen Rechenzentrum oder in einer anderen öffentlichen Cloud. Mit diesen Edge-Netzwerkdiensten haben Sie folgende Möglichkeiten:

Beispiel für Edge-Netzwerkdienste (zum Vergrößern klicken)
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 HTTP(S)-Load-Balancer, um Traffic aus dem öffentlichen Internet empfangen zu können. Der HTTP(S)-Load-Balancer leitet den Traffic über Cloud VPN oder Cloud Interconnect an einen von Traffic Director konfigurierten mittleren Proxy weiter, der wiederum den Traffic an Ihre lokale Umgebung oder an eine nicht von Google Cloud verwaltete Cloud weiterleitet.

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 bereitstellen. Dieser Envoy-Proxy wird automatisch mit Traffic Director verbunden.
  2. Simulierte private lokale VM erstellen. In einem realen Beispiel ist vermutlich bereits eine lokale VM vorhanden.
  3. Traffic Director so konfigurieren, dass alle Anfragen, die den mittleren Proxy erreichen, an die simulierte lokale VM weitergeleitet werden.
  4. Externen HTTP(S)-Load-Balancer erstellen, um Traffic aus dem öffentlichen Internet zu empfangen und an den mittleren Proxy weiterzuleiten.
  5. Google Cloud Armor-Sicherheitsrichtlinie an den externen HTTP(S)-Load-Balancer anhängen.

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 Traffic Director vorbereiten und führen Sie alle zur Vorbereitung erforderlichen Aufgaben aus.
  • Sorgen Sie dafür, dass Ihre privaten lokalen Endpunkte von Ihrem Google Cloud-VPC-Netzwerk aus über Cloud VPN oder Cloud Interconnect erreichbar sind. Das in diesem Leitfaden verwendete Beispiel leitet den Traffic nur an einen Endpunkt innerhalb Google Cloud weiter. Daher müssen Sie für diesen Schritt keine Hybridkonnektivität konfigurieren. In einem realen Bereitstellungsszenario ist dies aber erforderlich.
  • Achten Sie darauf, dass die CIDR-Bereiche Ihres VPC-Subnetzes nicht mit Ihren Remote-CIDR-Bereichen in Konflikt stehen. Wenn sich IP-Adressen überschneiden, 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 z. B. 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. Die folgende Vorlage kann zum Erstellen von VM-Instanzen verwendet werden, deren Envoy-Proxy mit Traffic Director verbunden ist:

 gcloud compute instance-templates create td-middle-proxy \
    --service-proxy=enabled \
    --tags=allow-hc

Informationen zum Anpassen der Envoy-Bereitstellung, z. B. durch Angabe des Netzwerknamens, Festlegen eines Logpfads und/oder Aktivieren von Tracing, finden Sie im Leitfaden für die automatische Bereitstellungsoption für Envoy.

Verwaltete Instanzgruppe für den mittleren Proxy erstellen

Erstellen Sie anhand der obigen Vorlage die verwaltete Instanzgruppe. 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

In diesem Beispiel erstellen wir die verwaltete Instanzgruppe mit VM-Instanzen, auf denen Envoy ausgeführt wird, in us-central1-a. In einem weiteren Schritt legen Sie dann einen externen Load-Balancer an, der den öffentlichen Internettraffic von Ihren Clients verarbeitet. Da der externe Load-Balancer den Traffic automatisch an die Region, die Ihren Clients am nächsten ist, und zur verwalteten Instanzgruppe innerhalb dieser Region weiterleitet, müssen Sie eventuell mehrere verwaltete Instanzgruppen erstellen. Eine vollständige Liste der verfügbaren Regionen und Zonen von Google Cloud finden Sie in diesem Artikel.

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 nur eine Compute Engine-VM, die über einen IP:port erreichbar ist. Diese VM dient als simulierter lokaler Server.

Simulierte lokale VM erstellen

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'

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"`

Netzwerk-Endpunktgruppe erstellen

Erstellen Sie die Netzwerk-Endpunktgruppe (NEG) für diese Demoeinrichtung durch Festlegung des Netzwerk-Endpunkttyps non-gcp-private-ip-port. 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.

Erstellen Sie zuerst die NEG:

gcloud compute network-endpoint-groups create td-on-prem-neg \
    --network-endpoint-type non-gcp-private-ip-port \
    --zone us-central1-a

Als Nächstes fügen Sie Ihrer neu erstellten NEG den IP:port hinzu:

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

Traffic Director mit Google Cloud Load Balancing-Komponenten konfigurieren

In diesem Abschnitt wird gezeigt, wie Sie Traffic Director 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 geringfügig von den Systemdiagnosen, die für andere NEG-Typen konfiguriert werden müssen, wie unten beschrieben.
  • Back-End-Dienst. Weitere Informationen zu Back-End-Diensten finden Sie unter Übersicht über Back-End-Dienste.
  • Eine Routingregelzuordnung. Dazu gehört das Erstellen einer Weiterleitungsregel, eines Zielproxys und einer URL-Zuordnung. Weitere Informationen erhalten Sie unter Weiterleitungsregeln verwenden und URL-Zuordnungen verwenden.

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 Verfahren der verteilten Systemdiagnose von Envoy, während andere NEG-Typen die zentrale Systemdiagnose von Google Cloud verwenden.

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

Back-End-Dienst erstellen

Erstellen Sie einen Back-End-Dienst mit dem Load-Balancing-Schema INTERNAL_SELF_MANAGED zur Verwendung mit Traffic Director. Geben Sie beim Erstellen dieses Back-End-Dienstes die gerade 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

Fügen Sie als Nächstes 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 Traffic Director den Traffic an Ihren Back-End-Dienst weiterleitet.

  1. Erstellen Sie eine URL-Zuordnung, die den oben 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 Traffic Director.

    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. Durch das Festlegen der Regeladresse auf 0.0.0.0 wird der Traffic anhand des Eingangsports, des HTTP-Hostnamens und der 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

Traffic Director 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. Löschen Sie nach der Prüfung die Testclient-VM.

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

gcloud compute instances list

Notieren Sie sich die IP-Adresse der Instanz in der verwalteten Instanzgruppe td-middle-proxy-us-central1-a.

Erstellen Sie als Nächstes eine Testclientinstanz:

gcloud compute instances create test-client --zone us-central1-a

Melden Sie sich mit SSH beim Testclient an:

gcloud compute ssh test-client --zone us-central1-a

Senden Sie abschließend eine Anfrage an die VM des mittleren Proxys. Geben Sie dabei für MIDDLE_PROXY_IP die oben notierte IP-Adresse an:

curl $MIDDLE_PROXY_IP:8080

Es sollte folgende Ausgabe angezeigt werden:

Hello world from on-premises!

Beenden Sie die Testclient-VM. Danach können Sie die VM löschen:

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

Externen HTTP-Load-Balancer bereitstellen

In diesem Abschnitt stellen Sie einen externen HTTP(S)-Load-Balancer bereit, der eingehenden Traffic an den mittleren Proxy sendet. Dies ist die Standardeinrichtung des externen HTTP(S)-Load-Balancers.

Externe IP-Adresse reservieren

Erstellen Sie eine globale statische externe IP-Adresse (external-lb-vip), an die externe Clients Traffic senden sollen. Sie rufen diese externe IP-Adresse im Rahmen des Bestätigungsschritts weiter unten in diesem Leitfaden ab.

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 festgestellt werden soll, ob die verwaltete Instanzgruppe, 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. Beachten Sie, dass hier das Tag allow-hc wiederverwendet wird, 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 Back-End-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 verwaltete Instanzgruppe 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 des externen Load-Balancers gemäß 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 verwalteten Instanzgruppe 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 HTTP-Load-Balancers prüfen

In diesem Schritt prüfen Sie, ob der externe Load-Balancer korrekt eingerichtet ist. 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`

Senden Sie eine curl-Anfrage an die öffentliche IP-Adresse 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, um Zugriff auf Ihren Dienst ausschließlich aus CLIENT_IP_RANGE zuzulassen. Dieser Bereich sollte die öffentliche IP-Adresse des Clientgeräts enthalten, mit dem Sie testen möchten, z. B. "192.0.2.0/24". Die 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

Senden Sie eine curl-Anfrage an die öffentliche virtuelle IP-Adresse des externen HTTP-Load-Balancers. Sie sollten wieder die erwartete Antwort erhalten, wenn die IP-Adresse Ihres Clientgeräts im oben festgelegten zulässigen Bereich von <var>CLIENT_IP_RANGE</var> liegt.

curl $PUBLIC_VIP

Die folgende Ausgabe wird angezeigt:

Hello world from on-premises!

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

Fehlerbehebung

Mein lokaler Dienst ist nicht über die globale IP-Adresse des externen HTTP(S)-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.

Prüfen Sie, ob die GCP 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.

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