Acceso a una base de datos de Amazon Neptune desde un contenedor de Amazon EKS - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Acceso a una base de datos de Amazon Neptune desde un contenedor de Amazon EKS

Ramakrishnan Palaninathan, Amazon Web Services

Resumen

Este patrón establece una conexión entre Amazon Neptune, que es una base de datos de gráficos totalmente gestionada, y Amazon Elastic Kubernetes Service (Amazon EKS), un servicio de orquestación de contenedores, para acceder a una base de datos de Neptune. Los clústeres de la base de datos de Neptune están confinados dentro de una nube privada virtual (VPC) en AWS. Por este motivo, el acceso a Neptune requiere una configuración cuidadosa de la VPC para permitir la conectividad.

A diferencia de Amazon Relational Database Service (Amazon RDS) para PostgreSQL, Neptune no depende de las credenciales de acceso a bases de datos típicas. En su lugar, utiliza funciones AWS Identity and Access Management (IAM) para la autenticación. Por lo tanto, conectarse a Neptune desde Amazon EKS implica configurar un rol de IAM con los permisos necesarios para acceder a Neptune.

Además, solo se puede acceder a los puntos de conexión de Neptune dentro de la VPC en la que se encuentra el clúster. Esto significa que debe configurar los ajustes de red para facilitar la comunicación entre Amazon EKS y Neptune. Según sus requisitos específicos y sus preferencias de red, existen varios enfoques para configurar la VPC a fin de permitir una conectividad fluida entre Neptune y Amazon EKS. Cada método ofrece ventajas y opciones distintas, que proporcionan flexibilidad a la hora de diseñar la arquitectura de la base de datos para adaptarla a las necesidades de la aplicación.

Requisitos previos y limitaciones

Requisitos previos

  • Instale la última versión de kubectl (consulte las instrucciones). Para comprobar la versión, ejecute:

    kubectl version --short
  • Instale la última versión de eksctl (consulte las instrucciones). Para comprobar la versión, ejecute:

    eksctl info
  • Instale la última versión de la AWS Command Line Interface (AWS CLI) versión 2 (consulte las instrucciones). Para comprobar la versión, ejecute:

    aws --version
  • Cree un clúster de base de datos de Neptune (consulte las instrucciones). Asegúrese de establecer las comunicaciones entre la VPC del clúster y Amazon EKS mediante el emparejamiento de VPC, AWS Transit Gateway, u otro método. Asegúrese también de que el estado del clúster esté como Disponible y de que tenga una regla de entrada en el puerto 8182 para el grupo de seguridad.

  • Configure un proveedor de IAM OpenID Connect (OIDC) en un clúster de Amazon EKS existente (consulte las instrucciones).

Versiones de producto

Arquitectura

En el siguiente diagrama se muestra la conexión entre los pods de Kubernetes de un clúster de Amazon EKS y Neptuno para proporcionar acceso a una base de datos de Neptune.

Conexión de pods en un nodo de Kubernetes con Amazon Neptune.

Automatización y escala

Puede usar el escalador automático de pods horizontales para escalar esta solución.

Tools (Herramientas)

Servicios

  • Amazon Elastic Kubernetes Service (Amazon EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.

  • AWS Identity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.

  • Amazon Neptune es un servicio de base de datos de gráficos que le permite crear y ejecutar aplicaciones que funcionen con conjuntos de datos altamente conectados.

Prácticas recomendadas

Para obtener información sobre las prácticas recomendadas, consulte Identity and Access Management en las guías de prácticas recomendadas de Amazon EKS.

Epics

TareaDescripciónHabilidades requeridas

Verifique el contexto del clúster.

Antes de interactuar con su clúster de Amazon EKS mediante Helm u otras herramientas de línea de comandos, debe definir las variables de entorno que encapsulen los detalles del clúster. Estas variables se utilizan en los comandos posteriores para garantizar que se dirijan al clúster y los recursos correctos.

En primer lugar, confirme que está trabajando en el contexto de clúster correcto. Esto garantiza que cualquier comando posterior se envíe al clúster de Kubernetes deseado. Para comprobar el contexto actual, ejecute el siguiente comando.

kubectl config current-context
Administrador de la nube, administrador de AWS

Defina la variable CLUSTER_NAME.

Establezca la variable de entorno CLUSTER_NAME para el clúster de Amazon EKS. En el siguiente comando, sustituya el valor us-west-2 de muestra por el correcto Región de AWS para su clúster. Reemplace el valor de muestra eks-workshop por el nombre de su clúster existente.

export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)
Administrador de la nube, administrador de AWS

Valide la salida.

Para comprobar que las variables se hayan configurado correctamente, ejecute el siguiente comando.

echo $CLUSTER_NAME

Compruebe que el resultado de este comando coincida con la entrada que especificó en el paso anterior.

Administrador de la nube, administrador de AWS
TareaDescripciónHabilidades requeridas

Cree una cuenta de servicio de .

Utilice roles de IAM para cuentas de servicio y así poder asignar sus cuentas de servicio de Kubernetes a roles de IAM para habilitar una administración de permisos detallada en las aplicaciones que se ejecutan en Amazon EKS. Puede usar eksctl para crear y asociar un rol de IAM a una cuenta de servicio de Kubernetes específica dentro de su clúster de Amazon EKS. La política AWS administrada NeptuneFullAccess permite el acceso de escritura y lectura al clúster de Neptune especificado.

importante

Debe tener un punto de conexión OIDC asociado a su clúster antes de ejecutar estos comandos.

Cree una cuenta de servicio que desee asociar a una política AWS administrada denominadaNeptuneFullAccess.

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

eks-neptune-sa será el nombre de la cuenta de servicio que quiera crear.

Al finalizar, el comando muestra la siguiente respuesta:

2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"
Administrador de la nube, administrador de AWS

Compruebe que la cuenta esté configurada correctamente.

Asegúrese de que la cuenta de servicio de eks-neptune-sa esté configurada correctamente en el espacio de nombres predeterminado del clúster.

kubectl get sa eks-neptune-sa -o yaml

La salida debe tener el siguiente aspecto:

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
Administrador de la nube, administrador de AWS

Compruebe la conectividad.

Implemente un pod de muestra llamado pod-util y compruebe la conectividad con 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
Administrador de la nube, administrador de AWS
TareaDescripciónHabilidades requeridas

Habilite la autenticación de bases de datos de IAM

De forma predeterminada, la autenticación de bases de datos de IAM está deshabilitada al crear un clúster de Neptune DB. Puede habilitar o deshabilitar la autenticación de la base de datos IAM mediante AWS Management Console.

Siga los pasos de la AWS documentación para habilitar la autenticación de bases de datos de IAM en Neptune.

Administrador de la nube, administrador de AWS

Compruebe las conexiones.

En este paso, interactuará con el contenedor de pod-util, que ya está en ejecución, para instalar awscurl y comprobar la conexión.

  1. Ejecute el comando siguiente para buscar el pod.

    kubectl get pods

    La salida debe tener el siguiente aspecto:

    NAME READY STATUS RESTARTS AGE pod-util 1/1 Running 0 50m
  2. Ejecute el siguiente comando para instalar awscurl.

    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"}}
Administrador de la nube, administrador de AWS

Resolución de problemas

ProblemaSolución

No se puede acceder a la base de datos de Neptune.

Revise la política de IAM adjunta a la cuenta de servicio. Asegúrese de que permite realizar las acciones necesarias (por ejemplo, neptune:Connec,neptune:DescribeDBInstances) para las operaciones que desee ejecutar.

Recursos relacionados