Akses database Amazon Neptunus dari wadah Amazon EKS - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Akses database Amazon Neptunus dari wadah Amazon EKS

Ramakrishnan Palaninathan, Amazon Web Services

Ringkasan

Pola ini membuat koneksi antara Amazon Neptunus, yang merupakan database grafik yang dikelola sepenuhnya, dan Amazon Elastic Kubernetes Service (Amazon EKS), layanan orkestrasi kontainer, untuk mengakses database Neptunus. Cluster DB Neptunus terbatas dalam virtual private cloud (VPC) aktif. AWS Untuk alasan ini, mengakses Neptunus memerlukan konfigurasi VPC yang cermat untuk mengaktifkan konektivitas.

Tidak seperti Amazon Relational Database Service (Amazon RDS) untuk PostgreSQL, Neptune tidak bergantung pada kredensyal akses database yang khas. Sebaliknya, ia menggunakan peran AWS Identity and Access Management (IAM) untuk otentikasi. Oleh karena itu, menghubungkan ke Neptunus dari Amazon EKS melibatkan pengaturan peran IAM dengan izin yang diperlukan untuk mengakses Neptunus.

Selain itu, titik akhir Neptunus hanya dapat diakses dalam VPC tempat cluster berada. Ini berarti Anda harus mengonfigurasi pengaturan jaringan untuk memfasilitasi komunikasi antara Amazon EKS dan Neptunus. Bergantung pada kebutuhan spesifik dan preferensi jaringan Anda, ada berbagai pendekatan untuk mengonfigurasi VPC untuk memungkinkan konektivitas tanpa batas antara Neptunus dan Amazon EKS. Setiap metode menawarkan keuntungan dan pertimbangan yang berbeda, yang memberikan fleksibilitas dalam merancang arsitektur database Anda agar sesuai dengan kebutuhan aplikasi Anda.

Prasyarat dan batasan

Prasyarat

Versi produk

Arsitektur

Diagram berikut menunjukkan hubungan antara pod Kubernetes di cluster Amazon EKS dan Neptunus untuk menyediakan akses ke database Neptunus.

Menghubungkan pod di node Kubernetes dengan Amazon Neptunus.

Otomatisasi dan skala

Anda dapat menggunakan Amazon EKS Horizontal Pod Autoscaler untuk menskalakan solusi ini.

Alat

Layanan

  • Amazon Elastic Kubernetes Service (Amazon EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

  • Amazon Neptunus adalah layanan database grafik yang membantu Anda membangun dan menjalankan aplikasi yang bekerja dengan kumpulan data yang sangat terhubung.

Praktik terbaik

Untuk praktik terbaik, lihat Identity and Access Management di Panduan Praktik Terbaik Amazon EKS.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Verifikasi konteks cluster.

Sebelum berinteraksi dengan klaster Amazon EKS menggunakan Helm atau alat baris perintah lainnya, Anda harus menentukan variabel lingkungan yang merangkum detail klaster Anda. Variabel-variabel ini digunakan dalam perintah berikutnya untuk memastikan bahwa mereka menargetkan cluster dan sumber daya yang benar.

Pertama, konfirmasikan bahwa Anda beroperasi dalam konteks cluster yang benar. Ini memastikan bahwa setiap perintah berikutnya dikirim ke cluster Kubernetes yang dimaksud. Untuk memverifikasi konteks saat ini, jalankan perintah berikut.

kubectl config current-context
Administrator AWS, Administrator cloud

Tentukan CLUSTER_NAME variabelnya.

Tentukan variabel CLUSTER_NAME lingkungan untuk klaster Amazon EKS Anda. Dalam perintah berikut, ganti nilai sampel us-west-2 dengan yang benar Wilayah AWS untuk cluster Anda. Ganti nilai sampel eks-workshop dengan nama cluster yang ada.

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

Validasi keluaran.

Untuk memvalidasi bahwa variabel telah diatur dengan benar, jalankan perintah berikut.

echo $CLUSTER_NAME

Verifikasi bahwa output dari perintah ini cocok dengan input yang Anda tentukan pada langkah sebelumnya.

Administrator AWS, Administrator cloud
TugasDeskripsiKeterampilan yang dibutuhkan

Buat akun layanan.

Anda menggunakan peran IAM untuk akun layanan untuk memetakan akun layanan Kubernetes Anda ke peran IAM, untuk mengaktifkan manajemen izin berbutir halus untuk aplikasi Anda yang berjalan di Amazon EKS. Anda dapat menggunakan eksctl untuk membuat dan mengaitkan peran IAM dengan akun layanan Kubernetes tertentu dalam klaster Amazon EKS Anda. Kebijakan AWS terkelola NeptuneFullAccess memungkinkan akses tulis dan baca ke klaster Neptunus yang Anda tentukan.

penting

Anda harus memiliki endpoint OIDC yang terkait dengan cluster Anda sebelum menjalankan perintah ini.

Buat akun layanan yang ingin Anda kaitkan dengan kebijakan AWS terkelola bernamaNeptuneFullAccess.

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

di eks-neptune-sa mana nama akun layanan yang ingin Anda buat.

Setelah selesai, perintah ini menampilkan respons berikut:

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

Verifikasi bahwa akun sudah diatur dengan benar.

Pastikan akun eks-neptune-sa layanan diatur dengan benar di namespace default di cluster Anda.

kubectl get sa eks-neptune-sa -o yaml

Outputnya akan terlihat seperti ini:

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
Administrator AWS, Administrator cloud

Periksa konektivitas.

Terapkan pod sampel yang disebut pod-util dan periksa konektivitas dengan Neptunus.

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
Administrator AWS, Administrator cloud
TugasDeskripsiKeterampilan yang dibutuhkan

Aktifkan otentikasi database IAM.

Secara default, otentikasi database IAM dinonaktifkan saat Anda membuat cluster DB Neptunus. Anda dapat mengaktifkan atau menonaktifkan otentikasi database IAM dengan menggunakan file. AWS Management Console

Ikuti langkah-langkah dalam AWS dokumentasi untuk mengaktifkan otentikasi database IAM di Neptunus.

Administrator AWS, Administrator cloud

Verifikasi koneksi.

Pada langkah ini, Anda berinteraksi dengan pod-util wadah, yang sudah dalam status berjalan, untuk menginstal awscurl dan memverifikasi koneksi.

  1. Jalankan perintah berikut untuk menemukan pod.

    kubectl get pods

    Outputnya akan terlihat seperti ini:

    NAME READY STATUS RESTARTS AGE pod-util 1/1 Running 0 50m
  2. Jalankan perintah berikut untuk menginstal 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"}}
Administrator AWS, Administrator cloud

Pemecahan Masalah

IsuSolusi

Tidak dapat mengakses database Neptunus.

Tinjau kebijakan IAM yang dilampirkan ke akun layanan. Pastikan bahwa itu memungkinkan tindakan yang diperlukan (misalnya,neptune:Connec,neptune:DescribeDBInstances) untuk operasi yang ingin Anda jalankan.

Sumber daya terkait