Greifen Sie von einem Amazon-Container aus auf eine Amazon Neptune-Datenbank zu EKS - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Greifen Sie von einem Amazon-Container aus auf eine Amazon Neptune-Datenbank zu EKS

Erstellt von Ramakrishnan Palaninathan () AWS

Umwelt: Produktion

Technologien: Container und Mikroservices; Datenbanken

Arbeitslast: Alle anderen Workloads

AWSDienstleistungen: AmazonEKS; Amazon Neptune

Übersicht

Dieses Muster stellt eine Verbindung zwischen Amazon Neptune, einer vollständig verwalteten Graphdatenbank, und Amazon Elastic Kubernetes Service (AmazonEKS), einem Container-Orchestrierungsservice, her, um auf eine Neptune-Datenbank zuzugreifen. Neptune-DB-Cluster sind auf eine virtuelle private Cloud (VPC) beschränkt. AWS Aus diesem Grund erfordert der Zugriff auf Neptune eine sorgfältige Konfiguration von, VPC um die Konnektivität zu aktivieren.

Im Gegensatz zu Amazon Relational Database Service (AmazonRDS) for Postgre SQL ist Neptune nicht auf typische Datenbankzugriffsanmeldeinformationen angewiesen. Stattdessen verwendet es AWS Identity and Access Management (IAM) -Rollen für die Authentifizierung. Um von Amazon aus eine Verbindung zu Neptune herzustellen, EKS müssen Sie daher eine IAM Rolle mit den erforderlichen Berechtigungen für den Zugriff auf Neptune einrichten.

Darüber hinaus sind Neptun-Endpunkte nur innerhalb des Bereichs zugänglich, in VPC dem sich der Cluster befindet. Das bedeutet, dass Sie Netzwerkeinstellungen konfigurieren müssen, um die Kommunikation zwischen Amazon EKS und Neptune zu erleichtern. Abhängig von Ihren spezifischen Anforderungen und Netzwerkpräferenzen gibt es verschiedene Ansätze zur Konfiguration von, um eine nahtlose Konnektivität zwischen Neptune und Amazon VPC zu ermöglichen. EKS Jede Methode bietet unterschiedliche Vorteile und Überlegungen, sodass Sie Ihre Datenbankarchitektur flexibel an die Anforderungen Ihrer Anwendung anpassen können.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Installieren Sie die neueste Version von kubectl (siehe Anweisungen). Um deine Version zu überprüfen, führe folgenden Befehl aus:

    kubectl version --short
  • Installieren Sie die neueste Version von eksctl (siehe Anweisungen). Um deine Version zu überprüfen, führe folgenden Befehl aus:

    eksctl info
  • Installieren Sie die neueste Version von AWS Command Line Interface (AWS CLI) Version 2 (siehe Anweisungen). Um Ihre Version zu überprüfen, führen Sie folgenden Befehl aus:

    aws --version
  • Erstellen Sie einen Neptune-DB-Cluster (siehe Anweisungen). Stellen Sie sicher, dass die Kommunikation zwischen dem Cluster VPC und Amazon EKS über VPCPeering oder eine andere Methode hergestellt wird. AWS Transit Gateway Stellen Sie außerdem sicher, dass der Status des Clusters „verfügbar“ lautet und dass für die Sicherheitsgruppe eine Regel für eingehende Zugriffe auf Port 8182 gilt.

  • Konfigurieren Sie einen IAM OpenID Connect (OIDC) -Anbieter auf einem vorhandenen EKS Amazon-Cluster (siehe Anweisungen).

Produktversionen

Architektur

Das folgende Diagramm zeigt die Verbindung zwischen Kubernetes-Pods in einem EKS Amazon-Cluster und Neptune, um Zugriff auf eine Neptune-Datenbank zu ermöglichen.

Pods in einem Kubernetes-Knoten mit Amazon Neptune verbinden.

Automatisierung und Skalierung

Sie können den Amazon EKS Horizontal Pod Autoscaler verwenden, um diese Lösung zu skalieren.

Tools

Services

  • Mit Amazon Elastic Kubernetes Service (AmazonEKS) können Sie Kubernetes ausführen, AWS ohne dass Sie Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten müssen.

  • AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.

  • Amazon Neptune ist ein Graphdatenbank-Service, mit dem Sie Anwendungen erstellen und ausführen können, die mit stark verbundenen Datensätzen arbeiten.

Bewährte Methoden

Bewährte Methoden finden Sie unter Identity and Access Management in den Amazon EKS Best Practices Guides.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Überprüfen Sie den Clusterkontext.

Bevor Sie mit Ihrem EKS Amazon-Cluster mithilfe von Helm oder anderen Befehlszeilentools interagieren, müssen Sie Umgebungsvariablen definieren, die die Details Ihres Clusters kapseln. Diese Variablen werden in nachfolgenden Befehlen verwendet, um sicherzustellen, dass sie auf den richtigen Cluster und die richtigen Ressourcen abzielen.

Stellen Sie zunächst sicher, dass Sie im richtigen Clusterkontext arbeiten. Dadurch wird sichergestellt, dass alle nachfolgenden Befehle an den vorgesehenen Kubernetes-Cluster gesendet werden. Führen Sie den folgenden Befehl aus, um den aktuellen Kontext zu überprüfen.

kubectl config current-context
AWSAdministrator, Cloud-Administrator

Definieren Sie die CLUSTER_NAME Variable.

Definieren Sie die CLUSTER_NAME Umgebungsvariable für Ihren EKS Amazon-Cluster. Ersetzen Sie im folgenden Befehl den Beispielwert us-west-2 durch den richtigen Wert AWS-Region für Ihren Cluster. Ersetzen Sie den Beispielwert eks-workshop durch Ihren vorhandenen Clusternamen.

export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)
AWSAdministrator, Cloud-Administrator

Ausgabe validieren.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Variablen richtig gesetzt wurden.

echo $CLUSTER_NAME

Stellen Sie sicher, dass die Ausgabe dieses Befehls mit der Eingabe übereinstimmt, die Sie im vorherigen Schritt angegeben haben.

AWSAdministrator, Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Ein -Service-Konto aktualisieren

Sie verwenden IAMRollen für Dienstkonten, um Ihre Kubernetes-Dienstkonten IAM Rollen zuzuordnen und so ein detailliertes Berechtigungsmanagement für Ihre Anwendungen zu ermöglichen, die auf Amazon ausgeführt werden. EKS Sie können eksctl verwenden, um eine IAM Rolle zu erstellen und einem bestimmten Kubernetes-Servicekonto in Ihrem Amazon-Cluster zuzuordnen. EKS Die AWS verwaltete Richtlinie NeptuneFullAccess ermöglicht Schreib- und Lesezugriff auf Ihren angegebenen Neptune-Cluster.

Wichtig: Bevor Sie diese Befehle ausführen können, muss Ihrem Cluster ein OIDCEndpunkt zugeordnet sein.

Erstellen Sie ein Dienstkonto, das Sie einer AWS verwalteten Richtlinie mit dem Namen zuordnen möchtenNeptuneFullAccess.

eksctl create iamserviceaccount --name eks-neptune-sa --namespace default --cluster $CLUSTER_NAME --attach-policy-arn arn:aws:iam::aws:policy/NeptuneFullAccess --approve --override-existing-serviceaccounts

wo eks-neptune-sa ist der Name des Dienstkontos, das Sie erstellen möchten.

Nach Abschluss zeigt dieser Befehl die folgende Antwort an:

2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"
AWSAdministrator, Cloud-Administrator

Stellen Sie sicher, dass das Konto ordnungsgemäß eingerichtet ist.

Stellen Sie sicher, dass das eks-neptune-sa Dienstkonto im Standard-Namespace in Ihrem Cluster korrekt eingerichtet ist.

kubectl get sa eks-neptune-sa -o yaml

Die Ausgabe sollte in etwa wie folgt aussehen:

apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/eksctl-eks-workshop-addon-iamserviceaccount-d-Role1-Q35yKgdQOlmM creationTimestamp: "2024-02-07T01:12:39Z" labels: app.kubernetes.io/managed-by: eksctl name: eks-neptune-sa namespace: default resourceVersion: "5174750" uid: cd6ba2f7-a0f5-40e1-a6f4-4081e0042316
AWSAdministrator, Cloud-Administrator

Überprüfen Sie die Konnektivität.

Stellen Sie einen Beispiel-Pod bereit, der aufgerufen wurde, pod-util und überprüfen Sie die Konnektivität mit Neptune.

apiVersion: v1 kind: Pod metadata: name: pod-util namespace: default spec: serviceAccountName: eks-neptune-sa containers: - name: pod-util image: public.ecr.aws/patrickc/troubleshoot-util command: - sleep - "3600" imagePullPolicy: IfNotPresent
kubectl apply -f pod-util.yaml
kubectl exec --stdin --tty pod-util -- /bin/bash bash-5.1# curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/gremlin {"requestId":"a4964f2d-12b1-4ed3-8a14-eff511431a0e","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[]},"meta":{"@type":"g:Map","@value":[]}}} bash-5.1# exit exit
AWSAdministrator, Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Aktivieren Sie die IAM Datenbankauthentifizierung.

Standardmäßig ist die IAM Datenbankauthentifizierung deaktiviert, wenn Sie einen Neptune-DB-Cluster erstellen. Sie können die IAM Datenbankauthentifizierung aktivieren oder deaktivieren, indem Sie den verwenden. AWS Management Console

Folgen Sie den Schritten in der AWS Dokumentation, um die IAMDatenbankauthentifizierung in Neptune zu aktivieren.

AWSAdministrator, Cloud-Administrator

Überprüfen Sie die Verbindungen.

In diesem Schritt interagieren Sie mit dem pod-util Container, der sich bereits im Ausführungsstatus befindet, um awscurl zu installieren und die Verbindung zu überprüfen.

  1. Führen Sie den folgenden Befehl aus, um den Pod zu finden.

    kubectl get pods

    Die Ausgabe sollte in etwa wie folgt aussehen:

    NAME READY STATUS RESTARTS AGE pod-util 1/1 Running 0 50m
  2. Führen Sie den folgenden Befehl aus, um awscurl zu installieren.

    kubectl exec --stdin --tty pod-util -- /bin/bash bash-5.1#pip3 install awscurl Installing collected packages: idna, configparser, configargparse, charset-normalizer, certifi, requests, awscurl Successfully installed awscurl-0.32 certifi-2024.2.2 charset-normalizer-3.3.2 configargparse-1.7 configparser-6.0.0 idna-3.6 requests-2.31.0 bash-5.1# awscurl https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/status --region us-west-2 --service neptune-db {"status":"healthy","startTime":"Thu Feb 08 01:22:14 UTC 2024","dbEngineVersion":"1.3.0.0.R1","role":"writer","dfeQueryEngine":"viaQueryHint","gremlin":{"version":"tinkerpop-3.6.4"},"sparql":{"version":"sparql-1.1"},"opencypher":{"version":"Neptune-9.0.20190305-1.0"},"labMode":{"ObjectIndex":"disabled","ReadWriteConflictDetection":"enabled"},"features":{"SlowQueryLogs":"disabled","ResultCache":{"status":"disabled"},"IAMAuthentication":"enabled","Streams":"disabled","AuditLog":"disabled"},"settings":{"clusterQueryTimeoutInMs":"120000","SlowQueryLogsThreshold":"5000"}}
AWSAdministrator, Cloud-Administrator

Fehlerbehebung

ProblemLösung

Ich kann nicht auf die Neptun-Datenbank zugreifen.

Überprüfen Sie die IAM Richtlinie, die mit dem Dienstkonto verknüpft ist. Stellen Sie sicher, dass es die erforderlichen Aktionen (z. B.neptune:Connec,neptune:DescribeDBInstances) für die Operationen, die Sie ausführen möchten, zulässt.

Zugehörige Ressourcen