Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Acceda a una base de datos de Amazon Neptune desde un contenedor 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.

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.

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

Creado por Ramakrishnan Palaninathan (AWS)

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 organización de contenedores, para acceder a una base de datos de Neptune. Los clústeres de base de datos de Neptune están confinados dentro de una nube privada virtual (VPC) activada. 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 habituales. 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 finales de Neptune dentro de la VPC en la que reside 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 perfecta entre Neptune y Amazon EKS. Cada método ofrece ventajas y consideraciones 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

Versiones de producto

Arquitectura

El siguiente diagrama 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.

Automatizar y escalar

Puede usar el escalador automático Amazon EKS Horizontal Pod para escalar esta solución.

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 ayuda a crear y ejecutar aplicaciones que funcionan 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á operando en el contexto de clúster correcto. Esto garantiza que cualquier comando posterior se envíe al clúster de Kubernetes deseado. Para verificar el contexto actual, ejecuta el siguiente comando.

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

Defina la CLUSTER_NAME variable.

Defina la variable de CLUSTER_NAME entorno para su 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. Sustituya el valor eks-workshop de muestra por el nombre de su clúster actual.

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 validar que las variables se han establecido correctamente, ejecute el siguiente comando.

echo $CLUSTER_NAME

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

Administrador de la nube, administrador de AWS

Configuración de las variables de entorno

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á operando en el contexto de clúster correcto. Esto garantiza que cualquier comando posterior se envíe al clúster de Kubernetes deseado. Para verificar el contexto actual, ejecuta el siguiente comando.

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

Defina la CLUSTER_NAME variable.

Defina la variable de CLUSTER_NAME entorno para su 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. Sustituya el valor eks-workshop de muestra por el nombre de su clúster actual.

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 validar que las variables se han establecido correctamente, ejecute el siguiente comando.

echo $CLUSTER_NAME

Compruebe que el resultado de este comando coincide 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 .

Utiliza las funciones de IAM para las cuentas de servicio para asignar sus cuentas de servicio de Kubernetes a las funciones de IAM, a fin de permitir una administración de permisos detallada para 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 final 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 denominada. NeptuneFullAccess

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

donde eks-neptune-sa está el nombre de la cuenta de servicio que desea crear.

Al finalizar, este 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 eks-neptune-sa servicio 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

Comprueba la conectividad.

Implemente un módulo 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

Cree un rol de IAM y asócielo a Kubernetes

TareaDescripciónHabilidades requeridas

Cree una cuenta de servicio de .

Utiliza las funciones de IAM para las cuentas de servicio para asignar sus cuentas de servicio de Kubernetes a las funciones de IAM, a fin de permitir una administración de permisos detallada para 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 final 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 denominada. NeptuneFullAccess

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

donde eks-neptune-sa está el nombre de la cuenta de servicio que desea crear.

Al finalizar, este 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 eks-neptune-sa servicio 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

Comprueba la conectividad.

Implemente un módulo 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 la base 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 activar o desactivar la autenticación de bases de datos de 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, interactúa con el pod-util contenedor, que ya está en ejecución, para instalar awscurl y comprobar la conexión.

  1. Ejecute el siguiente comando 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

Valide la actividad de conexión

TareaDescripciónHabilidades requeridas

Habilite la autenticación de la base 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 activar o desactivar la autenticación de bases de datos de 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, interactúa con el pod-util contenedor, que ya está en ejecución, para instalar awscurl y comprobar la conexión.

  1. Ejecute el siguiente comando 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

Solució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 ejemploneptune:Connec,neptune:DescribeDBInstances) para las operaciones que desee ejecutar.

Recursos relacionados

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.