Fehlerbehebung

Warum erhalte ich beim Hinzufügen eines Endpunkts die Fehlermeldung not found?

Wenn beim Hinzufügen von Diensten oder Endpunkten 404-Fehler auftreten, prüfen Sie, ob Sie sowohl den Namespace als auch den Dienst (in dieser Reihenfolge) erstellt haben, bevor Sie einen Endpunkt hinzufügen. Der Dienst muss vorhanden sein, bevor Sie zusätzliche Endpunkte hinzufügen können.

Warum werden beim Suchen nach einem Dienst keine meiner Endpunkte angezeigt?

Achten Sie darauf, dass das Projekt, die Region, der Namespacename und der Dienstname in Ihrer Anfrage korrekt sind und mit den Angaben übereinstimmen, unter denen Sie die Endpunkte registriert haben. Alle Service Directory-Dienste befinden sich in einem regionalen Namespace. Daher stimmen Dienste, die in einer Region registriert sind, nicht mit Daten in einer anderen Region überein.

Ich habe einem Nutzer Zugriff auf einen Dienst gewährt, aber er erhält weiterhin permission denied.

Das kann mehrere Gründe haben. Prüfen Sie zuerst, ob die Region korrekt ist. Wenn Sie eine Richtlinie für einen Namespace oder Dienst festlegen, gilt sie nur für diese Region. Wenn der Nutzer versucht, denselben Dienst in einer anderen Region zu registrieren oder abzurufen, hat er keinen Zugriff, es sei denn, Sie gewähren ihm auch IAM-Zugriff auf diesen regionalen Dienst. Wenn Sie Zugriffsprobleme beheben möchten, verwenden Sie die Methode TestIamPermissions für Dienste und Namespaces.

Ich habe einige Endpunkte hinzugefügt und dann das Dienst-Backend entfernt. Warum sind die Endpunkte noch da?

Service Directory führt keine automatische Systemdiagnose oder Heartbeats durch und entfernt Endpunkte nur, wenn Sie sie ausdrücklich entfernen. Fügen Sie Ihren Dienst-Back-Ends/-Orchestratoren Code hinzu, der den Endpunkt aus Service Directory entfernt, sobald er nicht mehr vorhanden ist. Wir empfehlen die Verwendung von Annotation-Feldern für die Gültigkeitsdauer bei Endpunkten, um aufzuzeichnen, wann ein Endpunkt zuletzt registriert oder aktualisiert wurde.

Ich kann Endpunkte zwar aufrufen, aber jedes Mal, wenn ich versuche, eine Verbindung zu ihnen herzustellen, schlägt der Versuch fehl.

Service Directory stellt keine Erreichbarkeit vom Client aus sicher. Dienste registrieren ihre Endpunkte direkt bei Service Directory. Die beim Service Directory registrierte Adresse kann jedoch möglicherweise nicht weitergeleitet werden, insbesondere wenn sich sowohl der Client als auch der Server in separaten privaten Netzwerken befinden. Wenn der Endpunkt vom Client aus routbar ist, kann das an einem nicht betriebsbereiten Endpunkt liegen. Siehe folgende Frage.

Wie kann ich den Endpunkten Statusdaten hinzufügen, damit meine Kunden wissen, mit welchem Endpunkt eine Verbindung hergestellt werden soll?

Bei der Verwendung von clientseitigem Load Balancing empfehlen wir, dass Dienst-Back-Ends gelegentlich ein Anmerkungsfeld am Endpunkt aktualisieren, anhand dessen Clients entscheiden können, mit welchem Back-End eine Verbindung hergestellt werden soll. Diese Daten werden vom Serviceverzeichnis nicht geprüft oder ausgewertet.

Ich habe einen Namespace erstellt. Warum kann ich ihm keine private Cloud DNS-Zone zuweisen?

Sie benötigen die IAM-Berechtigung servicedirectory.namespaces.associatePrivateZone für den Namespace, da Sie damit die zugehörige private Zone erstellen können. Standardmäßig haben die Rollen „Projektbearbeiter“, „Projektinhaber“, „Service Directory-Administrator“ und „Service Directory-Bearbeiter“ diese Berechtigung.

Warum erhalte ich bei einer DNS-Suche nach einem Dienst keine meiner Endpunkte?

Dafür kann es verschiedene Gründe geben, z. B.:

  1. Der verknüpfte Namespace wurde gelöscht. Führen Sie dazu den Befehl get in der privaten Zone aus. Wenn die serviceDirectoryConfig.deletionTime festgelegt ist, wurden der zugehörige Namespace und alle zugehörigen Endpunkte gelöscht.
  2. Prüfen Sie, ob Sie die Anfrage von einem Netzwerk aus senden, das die private Zone abfragen darf. Sie können die Netzwerkliste aufrufen, indem Sie den Befehl get in der privaten Zone ausführen.
  3. Es gibt keine (gültigen) Endpunkte für den Dienst. Führen Sie den Befehl resolve über die Service Directory API auf dem Dienst aus, um sicherzustellen, dass der Dienst nicht leer ist und mindestens eine gültige Endpunkt-IP hat. Die DNS-Unterstützung ist nur für Endpunkte mit gültigen IPv4- oder IPv6-IP-Adressen verfügbar.
  4. Achten Sie darauf, dass Sie die richtige Zone abfragen. Angenommen, Sie erstellen eine Service Directory-Zone mit dem Namen beispiel.de und haben eine weitere (Standard-)private Zone mit dem Namen abrechnung.beispiel.de. Dann werden bei jeder DNS-Abfrage an abrechnung.beispiel.de Ressourceneinträge zurückgegeben, die zur Zone abrechnung.beispiel.de gehören, und nicht zum Dienst abrechnung im Service Directory-Namespace, der mit beispiel.de verknüpft ist.Weitere Informationen finden Sie unter Reihenfolge der Namensauflösung.

Warum werden meine GKE-Dienste nicht mit dem Service Directory synchronisiert?

Dafür kann es verschiedene Gründe geben, z. B.:

  1. Prüfen Sie, ob in Ihrem GKE-Cluster ein ServiceDirectoryRegistrationPolicy für den Namespace bereitgestellt ist, den Sie synchronisieren möchten. Prüfen Sie außerdem, ob die Dienste, die Sie synchronisieren möchten, mit der Labelauswahl in Ihrer Richtlinie übereinstimmen.
  2. Es gibt bereits einen Service Directory-Namespace, der manuell oder mit einer anderen Integration mit demselben Namen wie der GKE-Namespace erstellt wurde, den Sie synchronisieren möchten. Sie müssen den vorhandenen Service Directory-Namespace umbenennen oder löschen, damit keine Konflikte auftreten.
  3. Berechtigungen für Ihr Service Directory-Dienstkonto wurden entfernt. Prüfen Sie, ob service-{PROJECT_NUMBER}@gcp-sa-servicedirectory.iam.gserviceaccount.com die IAM-Berechtigung Service Directory Service Agent hat. Weitere Informationen zu IAM finden Sie in der IAM-Dokumentation.

Nächste Schritte