Externe Back-Ends mit Netzwerk-Endpunktgruppen für das Internet einrichten
Dieses Dokument enthält eine Anleitung zum Konfigurieren externer Back-Ends für Cloud Service Mesh mithilfe von Internet-Netzwerk-Endpunktgruppen (NEGs), für die ein voll qualifizierter Domainname erforderlich ist. Dieses Dokument richtet sich an Nutzer, die mit den folgenden Themen vertraut sind:
Dieser Einrichtungsleitfaden enthält grundlegende Anleitungen zu folgenden Themen:
- Cloud Service Mesh für die Verwendung einer Internet-NEG und eines nicht authentifizierten TLS für ausgehenden Traffic konfigurieren
- Traffic von Ihrem Service Mesh an einen Cloud Run-Dienst weiterleiten
Hinweise
Lesen Sie die Übersicht zu Cloud Service Mesh mit Internetnetzwerk-Endpunktgruppen.
Für die Zwecke dieser Anleitung wird bei den Beispielkonfigurationen Folgendes vorausgesetzt:
- Alle relevanten Compute Engine-Ressourcen wie Mittelproxys, Cloud Service Mesh-Ressourcen, Cloud DNS-Zonen und Hybridkonnektivität sind dem standardmäßigen Virtual Private Cloud-Netzwerk (VPC) zugeordnet.
- Der Dienst
example.com:443
wird in Ihrer lokalen Infrastruktur ausgeführt. Die Domainexample.com
wird von drei Endpunkten bereitgestellt:10.0.0.100
,10.0.0.101
und10.0.0.102
. Es gibt Routen, die die Konnektivität von den Envoy-Proxys zu diesen Remote-Endpunkten gewährleisten.
Die resultierende Bereitstellung sieht in etwa so aus:
Traffic-Routing mit einer Internet-NEG und einem TLS mit SNI
Nachdem Sie Cloud Service Mesh mit einer Internet-NEG unter Verwendung des FQDN und der TLS für ausgehenden Traffic konfiguriert haben, verhält sich die Beispielbereitstellung wie im folgenden Diagramm und der Beschreibung des Traffics dargestellt.
Die Schritte in der folgenden Legende entsprechen der Nummerierung im vorherigen Diagramm.
Schritt | Beschreibung |
---|---|
0 | Envoy empfängt die FQDN-Back-End-Konfiguration von Cloud Service Mesh über xDS. |
0 | In der VM ausgeführter Envoy fragt das DNS kontinuierlich nach dem konfigurierten FQDN ab. |
1 | Die Nutzeranwendung initiiert eine Anfrage. |
2 | Parameter der Anfrage. |
3 | Der Envoy-Proxy fängt die Anfrage ab. In diesem Beispiel wird davon ausgegangen, dass Sie 0.0.0.0 als virtuelle IP-Adresse (VIP) für die Weiterleitungsregel verwenden. Wenn 0.0.0.0 die VIP ist, fängt Envoy alle Anfragen ab. Das Anfragenrouting basiert nur auf Parametern der Ebene 7, unabhängig von der Ziel-IP-Adresse in der ursprünglichen Anfrage, die von der Anwendung generiert wird. |
4 | Envoy wählt einen fehlerfreien Remote-Endpunkt aus und führt einen TLS-Handshake mit der SNI aus der Client-TLS-Richtlinie durch. |
5 | Envoy leitet die Anfrage an den Remote-Endpunkt weiter. |
Wenn Systemdiagnosen konfiguriert sind, prüft Envoy kontinuierlich die Remote-Endpunkte und leitet Anfragen nur an fehlerfreie Endpunkte weiter. Im Diagramm ist dies allerdings nicht dargestellt.
Hybridkonnektivität einrichten
In diesem Dokument wird auch davon ausgegangen, dass Hybridkonnektivität bereits hergestellt wurde.
- Über Cloud VPN oder Cloud Interconnect wird Hybridkonnektivität zwischen dem VPC-Netzwerk und lokalen Diensten oder einer öffentlichen Cloud eines Drittanbieters hergestellt.
- VPC-Firewallregeln und -Routen sind richtig konfiguriert, um die bidirektionale Erreichbarkeit von Envoy für private Dienstendpunkte und optional für einen lokalen DNS-Server einzurichten.
- Für ein erfolgreiches regionales HA-Failover-Szenario ist das globale dynamische Routing aktiviert. Weitere Informationen finden Sie unter Modus für dynamisches Routing.
Cloud DNS-Konfiguration einrichten
Verwenden Sie die folgenden Befehle, um eine private Cloud DNS-Zone für die Domain (FQDN) example.com
einzurichten, die A
-Einträge mit Verweis auf 10.0.0.100
, 10.0.0.101
, 10.0.0.102
und 10.0.0.103
hat.
gcloud
- Erstellen Sie eine von DNS verwaltete private Zone und hängen Sie sie an das Standardnetzwerk an.
gcloud dns managed-zones create example-zone \ --description=test \ --dns-name=example.com \ --networks=default \ --visibility=private
- Fügen Sie der privaten Zone DNS-Einträge hinzu.
gcloud dns record-sets transaction start \ --zone=example-zone gcloud dns record-sets transaction add 10.0.0.100 10.0.0.101 10.0.0.102 10.0.0.103 \ --name=example.com \ --ttl=300 \ --type=A \ --zone=example-zone gcloud dns record-sets transaction execute \ --zone=example-zone
Cloud Service Mesh mit einer Internet-FQDN-NEG konfigurieren
In diesem Abschnitt konfigurieren Sie Cloud Service Mesh mit einer Internet-FQDN-NEG.
NEG, Systemdiagnose und Back-End-Dienst erstellen
gcloud
- Erstellen Sie die Internet-NEG:
gcloud compute network-endpoint-groups create on-prem-service-a-neg \ --global \ --network-endpoint-type INTERNET_FQDN_PORT
- Fügen Sie der Internet-NEG den Endpunkt
FQDN:Port
hinzu:
gcloud compute network-endpoint-groups update on-prem-service-a-neg \ --global \ --add-endpoint=fqdn=example.com,port=443
- Erstellen Sie eine globale Systemdiagnose:
gcloud compute health-checks create http service-a-http-health-check \ --global
- Erstellen Sie einen globalen Back-End-Dienst mit dem Namen
on-prem-service-a
und verknüpfen Sie die Systemdiagnose damit:
gcloud compute backend-services create on-prem-service-a \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --health-checks service-a-http-health-check
- Fügen Sie die NEG
on-prem-service-a-neg
als Back-End des Back-End-Dienstes hinzu:
gcloud compute backend-services add-backend on-prem-service-a \ --global \ --global-network-endpoint-group \ --network-endpoint-group on-prem-service-a-neg
Zuordnung einer Routingregel erstellen
Die URL-Zuordnung, der Ziel-HTTP-Proxy und die Weiterleitungsregel stellen eine Routingregelzuordnung dar, die Routinginformationen zu Traffic in Ihrem Mesh-Netzwerk bereitstellt.
Diese URL-Zuordnung enthält eine Regel, die den gesamten HTTP-Traffic an on-prem-service-a
weiterleitet.
gcloud
- Erstellen Sie die URL-Zuordnung:
gcloud compute url-maps create td-url-map \ --default-service on-prem-service-a
- Erstellen Sie den Ziel-HTTP-Proxy und verknüpfen Sie die URL-Zuordnung mit dem Zielproxy:
gcloud compute target-http-proxies create td-proxy \ --url-map td-url-map
- Erstellen Sie die globale Weiterleitungsregel mithilfe der IP-Adresse
0.0.0.0
. Dies ist eine spezielle IP-Adresse, die dazu führt, dass die Datenebene die Ziel-IP-Adresse ignoriert und Anfragen nur auf Grundlage der HTTP-Parameter der Anfrage weiterleitet.
gcloud compute forwarding-rules create td-forwarding-rule \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --address=0.0.0.0 \ --target-http-proxy=td-proxy \ --ports=443 \ --network=default
Nicht authentifiziertes TLS und HTTPS konfigurieren
Wenn Sie nicht authentifiziertes HTTPS zwischen Ihren Envoy-Proxys und Ihren lokalen Diensten konfigurieren möchten, folgen Sie optional dieser Anleitung. Diese Anleitung zeigt auch, wie SNI im TLS-Handshake konfiguriert wird.
Eine Client-TLS-Richtlinie gibt die Clientidentität und den Authentifizierungsmechanismus an, wenn ein Client ausgehende Anfragen an einen bestimmten Dienst sendet. Eine Client-TLS-Richtlinie wird mithilfe des Felds securitySettings
an eine Back-End-Dienstressource angehängt.
gcloud
- Erstellen und importieren Sie die Client-TLS-Richtlinie. Legen Sie die SNI auf den FQDN fest, den Sie in der NEG konfiguriert haben:
cat << EOF > client_unauthenticated_tls_policy.yaml name: "client_unauthenticated_tls_policy" sni: "example.com" EOF gcloud beta network-security client-tls-policies import client_unauthenticated_tls_policy \ --source=client_unauthenticated_tls_policy.yaml \ --location=global
- Wenn Sie im vorherigen Abschnitt eine
HTTP
-Systemdiagnose mit dem Back-End-Dienst konfiguriert haben, trennen Sie die Systemdiagnose vom Back-End-Dienst:
gcloud compute backend-services update on-prem-service-a \ --global \ --no-health-checks
- Erstellen Sie eine
HTTPS
-Systemdiagnose:
gcloud compute health-checks create https service-a-https-health-check \ --global
- Hängen Sie die Client-TLS-Richtlinie an den zuvor erstellten Back-End-Dienst an. Dadurch wird nicht authentifiziertes HTTPS für alle ausgehenden Anfragen vom Client an diesen Back-End-Dienst erzwungen:
gcloud compute backend-services export on-prem-service-a \ --global \ --destination=on-prem-service-a.yaml cat << EOF >> on-prem-service-a.yaml securitySettings: clientTlsPolicy: projects/${PROJECT_ID}/locations/global/clientTlsPolicies/client_unauthenticated_tls_policy healthChecks: - projects/${PROJECT_ID}/global/healthChecks/service-a-https-health-check EOF gcloud compute backend-services import on-prem-service-a \ --global \ --source=on-prem-service-a.yaml
Sie können Internet-FQDN-NEGs verwenden, um Traffic an jeden Dienst weiterzuleiten, der über FQDN erreichbar ist, z. B. externe DNS-auflösbare externe und interne Dienste oder Cloud Run-Dienste.
Von einer IP:Port
-NEG zu einer FQDN:Port
-NEG migrieren
Bei einer NON_GCP_PRIVATE_IP_PORT
-NEG müssen Dienstendpunkte als statische IP:PORT
-Paare in die NEG programmiert werden, während INTERNET_FQDN_NEG
die Endpunkte mithilfe von DNS dynamisch auflösen kann. Sie können zur Internet-NEG migrieren, indem Sie DNS-Einträge für Ihre lokalen Dienstendpunkte einrichten und Cloud Service Mesh wie in den folgenden Schritten beschrieben konfigurieren:
- Richten Sie DNS-Einträge für Ihren FQDN ein.
- Erstellen Sie eine neue Internet-NEG mit dem FQDN.
- Erstellen Sie einen neuen Back-End-Dienst mit der Internet-NEG, die Sie in Schritt 2 erstellt haben. Verknüpfen Sie dieselbe Systemdiagnose, die Sie mit dem NEG-Back-End-Dienst für Hybridkonnektivität verwendet haben, mit dem neuen Back-End-Dienst. Prüfen Sie, ob die neuen Remote-Endpunkte fehlerfrei sind.
- Aktualisieren Sie Ihre Routingregelzuordnung, um auf den neuen Back-End-Dienst zu verweisen. Ersetzen Sie dazu das alte Back-End, das die Hybrid-Konnektivitäts-NEG enthält.
- Wenn Sie während der Live-Migration in einer Produktionsbereitstellung keine Ausfallzeiten haben möchten, können Sie gewichteten Traffic verwenden. Konfigurieren Sie Ihren neuen Back-End-Dienst zu Beginn so, dass nur ein kleiner Prozentsatz des Traffics empfangen wird, z. B. 5 %. Folgen Sie der Anleitung zum Einrichten der Trafficaufteilung.
- Prüfen Sie, ob die neuen Remote-Endpunkte den Diensttraffic korrekt verarbeiten.
- Wenn Sie die gewichtete Traffic-Aufteilung verwenden, konfigurieren Sie den neuen Back-End-Dienst so, dass er 100 % des Traffics empfängt. Mit diesem Schritt wird der alte Back-End-Dienst per Drain beendet.
- Nachdem Sie geprüft haben, ob die neuen Back-Ends problemlos Traffic bereitstellen, löschen Sie den alten Back-End-Dienst.
Fehlerbehebung
Folgen Sie der Anleitung in diesem Abschnitt, um Probleme bei der Bereitstellung zu beheben. Wenn Ihre Probleme mit diesen Informationen nicht behoben werden, lesen Sie Fehlerbehebung bei Bereitstellungen, die Envoy verwenden.
Ein lokaler Endpunkt empfängt keinen Traffic
Wenn ein Endpunkt keinen Traffic empfängt, prüfen Sie, ob Systemdiagnosen und DNS-Abfragen des Envoy-Clients konsistent die IP-Adresse zurückgeben.
Envoy verwendet den strict_dns
-Modus zum Verwalten von Verbindungen. Dabei wird der Traffic auf alle aufgelösten Endpunkte verteilt, die fehlerfrei sind. Die Reihenfolge, in der Endpunkte aufgelöst werden, spielt im strict_dns
-Modus keine Rolle. Envoy beendet den Traffic jedoch per Drain an jedem Endpunkt, der nicht mehr in der Liste der zurückgegebenen IP-Adressen vorhanden ist.
HTTP-Host-Header stimmt nicht mit FQDN überein, wenn die Anfrage meinen lokalen Server erreicht
Stellen Sie sich ein Beispiel vor, in dem die Domain example.com
in 10.0.0.1
aufgelöst wird. Die IP-Adresse der Weiterleitungsregel und die Domain altostrat.com
werden in 10.0.0.100
aufgelöst. Dies ist Ihr lokaler Dienstendpunkt. Sie möchten Traffic an die Domain altostrat.com
senden, die in Ihrer NEG konfiguriert ist.
Es ist möglich, dass die Anwendung in Compute Engine oder GKE den HTTP-Header Host
auf example.com
(Host:
example.com
) setzt, der an den lokalen Endpunkt übertragen wird. Wenn Sie HTTPS verwenden, setzt Envoy die SNI während des TLS-Handshakes auf altostrat.com
.
Envoy erhält die SNI von der TLS-Richtlinienressource des Clients.
Wenn dieser Konflikt Probleme bei der Verarbeitung oder Weiterleitung der Anfrage verursacht, wenn sie den lokalen Endpunkt erreicht, können Sie als Behelfslösung den Header Host
in altostrat.com
(Host: altostrat.com
) umschreiben. Dies kann entweder in Cloud Service Mesh mit URL-Umschreibung oder auf dem Remote-Endpunkt erfolgen, wenn dieser eine Funktion zur Header-Umschreibung hat.
Eine weitere, weniger komplexe Problemumgehung besteht darin, den Header Host
auf altostrat.com
(Host: altostrat.com
) zu setzen und die spezielle Adresse 0.0.0.0
als IP-Adresse der Weiterleitungsregel zu verwenden.
Envoy gibt viele 5xx-Fehler zurück
Wenn Envy zu viele 5xx-Fehler zurückgibt, gehen Sie so vor:
- Prüfen Sie die Envoy-Logs, um zu unterscheiden, ob die Antwort vom Back-End kommt (lokales Back-End), und worin der Grund für den 5xx-Fehler liegt.
- Achten Sie darauf, dass DNS-Abfragen erfolgreich sind und keine
SERVFAIL
- oderNXDOMAIN
-Fehler vorliegen. - Achten Sie darauf, dass alle Remote-Endpunkte die Systemdiagnosen bestehen.
- Wenn keine Systemdiagnosen konfiguriert sind, prüfen Sie, ob alle Endpunkte über Envoy erreichbar sind. Prüfen Sie die Firewallregeln und -routen sowohl auf der Google Cloud-Seite als auch auf der lokalen Seite.
Mit dem Service Mesh können Sie keine externen Dienste über das öffentliche Internet erreichen.
Sie können Traffic mithilfe von FQDN-Back-Ends in Cloud Service Mesh an Dienste im öffentlichen Internet senden. Sie müssen zuerst eine Internetverbindung zwischen Envoy-Clients und dem externen Dienst herstellen. Wenn während Verbindungen zum externen Dienst der Fehler 502
auftritt, gehen Sie so vor:
- Achten Sie darauf, dass Sie die richtigen Routen haben, insbesondere die Standardroute
0.0.0.0/0
und die in den Firewallregeln konfigurierten. - Achten Sie darauf, dass DNS-Abfragen erfolgreich sind und keine
SERVFAIL
- oderNXDOMAIN
-Fehler vorliegen. - Wenn der Envoy-Proxy in einer Compute Engine-VM ohne externe IP-Adresse oder in einem privaten GKE-Cluster ausgeführt wird, müssen Sie Cloud NAT konfigurieren oder eine andere Methode verwenden, um eine ausgehende Internetverbindung herzustellen.
Wenn die Fehler bestehen bleiben oder andere 5xx-Fehler auftreten, prüfen Sie die Envoy-Logs, um die Fehlerquelle einzugrenzen.
Serverlose Dienste können nicht über das Service Mesh erreicht werden.
Sie können Traffic an serverlose Dienste (Cloud Run, Cloud Run-Funktionen und App Engine) senden, indem Sie FQDN-Back-Ends in Cloud Service Mesh verwenden. Wenn der Envoy-Proxy in einer Compute Engine-VM ohne externe IP-Adresse oder in einem privaten GKE-Cluster ausgeführt wird, müssen Sie den privater Google-Zugriff in dem Subnetz so konfigurieren, dass er auf Google APIs und Google-Dienste zugreifen kann.
Nächste Schritte
- Weitere Informationen zu Client-TLS-Richtlinien finden Sie unter Cloud Service Mesh-Dienstsicherheit und in der Network Security API.