Acesse um banco de dados do Amazon Neptune a partir de um contêiner da Amazon EKS - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Acesse um banco de dados do Amazon Neptune a partir de um contêiner da Amazon EKS

Criado por Ramakrishnan Palaninathan () AWS

Ambiente: produção

Tecnologias: contêineres e microsserviços; bancos de dados

Workload: todas as outras workloads

AWSserviços: AmazonEKS; Amazon Neptune

Resumo

Esse padrão estabelece uma conexão entre o Amazon Neptune, que é um banco de dados gráfico totalmente gerenciado, e o Amazon Elastic Kubernetes Service EKS (Amazon), um serviço de orquestração de contêineres, para acessar um banco de dados Neptune. Os clusters de banco de dados Neptune estão confinados em uma nuvem privada virtual () ativada. VPC AWS Por esse motivo, acessar o Neptune requer uma configuração cuidadosa do para permitir VPC a conectividade.

Ao contrário do Amazon Relational Database Service (RDSAmazon) para SQL Postgre, o Neptune não depende de credenciais típicas de acesso ao banco de dados. Em vez disso, ele usa funções AWS Identity and Access Management (IAM) para autenticação. Portanto, conectar-se ao Neptune pela EKS Amazon envolve a IAM configuração de uma função com as permissões necessárias para acessar o Neptune.

Além disso, os endpoints do Neptune são acessíveis somente dentro do local em que VPC o cluster reside. Isso significa que você precisa definir as configurações de rede para facilitar a comunicação entre a Amazon EKS e o Neptune. Dependendo de seus requisitos específicos e preferências de rede, existem várias abordagens para configurar o VPC para permitir uma conectividade perfeita entre o Neptune e a Amazon. EKS Cada método oferece vantagens e considerações distintas, que fornecem flexibilidade na criação da arquitetura do banco de dados para atender às necessidades do seu aplicativo.

Pré-requisitos e limitações

Pré-requisitos

  • Instale a versão mais recente do kubectl (veja as instruções). Para verificar sua versão, execute:

    kubectl version --short
  • Instale a versão mais recente do eksctl (veja as instruções). Para verificar sua versão, execute:

    eksctl info
  • Instale a versão mais recente da AWS Command Line Interface (AWS CLI) versão 2 (consulte as instruções). Para verificar sua versão, execute:

    aws --version
  • Crie um cluster de banco de dados Neptune (consulte as instruções). Certifique-se de estabelecer comunicações entre o cluster VPC e a Amazon EKS por meio de VPCpeering ou outro método. AWS Transit Gateway Verifique também se o status do cluster está “disponível” e se ele tem uma regra de entrada na porta 8182 para o grupo de segurança.

  • Configure um provedor IAM OpenID Connect (OIDC) em um EKS cluster Amazon existente (veja as instruções).

Versões do produto

Arquitetura

O diagrama a seguir mostra a conexão entre os pods do Kubernetes em um cluster da Amazon EKS e o Neptune para fornecer acesso a um banco de dados do Neptune.

Conectando pods em um nó do Kubernetes com o Amazon Neptune.

Automação e escala

Você pode usar o Amazon EKS Horizontal Pod Autoscaler para escalar essa solução.

Ferramentas

Serviços

Práticas recomendadas

Para obter as melhores práticas, consulte Identity and Access Management nos guias de EKS melhores práticas da Amazon.

Épicos

TarefaDescriçãoHabilidades necessárias

Verifique o contexto do cluster.

Antes de interagir com seu EKS cluster da Amazon usando o Helm ou outras ferramentas de linha de comando, você deve definir variáveis de ambiente que encapsulem os detalhes do seu cluster. Essas variáveis são usadas em comandos subsequentes para garantir que elas tenham como alvo o cluster e os recursos corretos.

Primeiro, confirme se você está operando no contexto correto do cluster. Isso garante que todos os comandos subsequentes sejam enviados para o cluster Kubernetes pretendido. Para verificar o contexto atual, execute o comando a seguir.

kubectl config current-context
AWSadministrador, administrador de nuvem

Defina a CLUSTER_NAME variável.

Defina a variável de CLUSTER_NAME ambiente para seu EKS cluster da Amazon. No comando a seguir, substitua o valor us-west-2 da amostra pelo correto Região da AWS para seu cluster. Substitua o valor eks-workshop da amostra pelo nome do cluster existente.

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

Valide a saída.

Para validar se as variáveis foram definidas corretamente, execute o comando a seguir.

echo $CLUSTER_NAME

Verifique se a saída desse comando corresponde à entrada especificada na etapa anterior.

AWSadministrador, administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Criar uma conta de serviço do .

Você usa IAMfunções para contas de serviço para mapear suas contas de serviço do Kubernetes para IAM funções, a fim de permitir um gerenciamento refinado de permissões para seus aplicativos que são executados na Amazon. EKS Você pode usar eksctl para criar e associar uma IAM função a uma conta de serviço específica do Kubernetes em seu cluster da Amazon. EKS A política AWS gerenciada NeptuneFullAccess permite acesso de gravação e leitura ao cluster Neptune especificado.

Importante: você deve ter um OIDCendpoint associado ao seu cluster antes de executar esses comandos.

Crie uma conta de serviço que você deseja associar a uma política AWS gerenciada chamadaNeptuneFullAccess.

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

onde eks-neptune-sa está o nome da conta de serviço que você deseja criar.

Após a conclusão, esse comando exibe a seguinte resposta:

2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"
AWSadministrador, administrador de nuvem

Verifique se a conta está configurada corretamente.

Certifique-se de que a conta eks-neptune-sa de serviço esteja configurada corretamente no namespace padrão do seu cluster.

kubectl get sa eks-neptune-sa -o yaml

O resultado deve ser semelhante ao seguinte:

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
AWSadministrador, administrador de nuvem

Verifique a conectividade.

Implante um pod de amostra chamado pod-util e verifique a conectividade com o 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
AWSadministrador, administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Ative a autenticação IAM do banco de dados.

Por padrão, a autenticação do IAM banco de dados é desativada quando você cria um cluster de banco de dados Neptune. Você pode ativar ou desativar a autenticação do IAM banco de dados usando AWS Management Console o.

Siga as etapas na AWS documentação para habilitar a autenticação do IAM banco de dados no Neptune.

AWSadministrador, administrador de nuvem

Verifique as conexões.

Nesta etapa, você interage com o pod-util contêiner, que já está em execução, para instalar o awscurl e verificar a conexão.

  1. Execute o comando a seguir para encontrar o pod.

    kubectl get pods

    O resultado deve ser semelhante ao seguinte:

    NAME READY STATUS RESTARTS AGE pod-util 1/1 Running 0 50m
  2. Execute o comando a seguir para instalar o 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"}}
AWSadministrador, administrador de nuvem

Solução de problemas

ProblemaSolução

Não consigo acessar o banco de dados Neptune.

Revise a IAM política anexada à conta de serviço. Certifique-se de que ele permita as ações necessárias (por exemplo,neptune:Connec,neptune:DescribeDBInstances) para as operações que você deseja executar.

Recursos relacionados