Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Setelah menyebarkan kluster MongoDB di AKS, Anda dapat menyebarkan aplikasi klien sampel untuk berinteraksi dengan MongoDB. Tutorial ini dibangun berdasarkan penyebaran kluster MongoDB yang tercakup dalam panduan sebelumnya.
Menghubungkan ke shell MongoDB
Di bagian ini, Anda tersambung ke shell MongoDB. Setelah tersambung, Anda membuat database dan pengumpulan, menyisipkan data, dan menjalankan kueri.
Buat pod bernama
percona-clientdi${AKS_MONGODB_NAMESPACE}namespace di kluster Anda menggunakankubectl runperintah . Pastikan Anda menggunakan variabel lingkungan yang benar$connectionStringyang diekspor dari langkah 3 tutorial sebelumnya.kubectl -n "${AKS_MONGODB_NAMESPACE}" run -i --rm --tty percona-client --image=${MY_ACR_REGISTRY}.azurecr.io/percona-server-mongodb:7.0.8-5 --restart=Never -- env CONN_STR=$connectionStringSambungkan ke shell MongoDB menggunakan perintah berikut.
mongosh $CONN_STRDi shell MongoDB, buat database dan koleksi menggunakan skrip berikut:
// Connect to MongoDB use employeeDB; // Create the employees collection and insert 200 records for (let i = 1; i <= 200; i++) { db.employees.insertOne({ Id: i, EmployeeId: `E${1000 + i}`, FirstName: `FirstName${i}`, LastName: `LastName${i}`, Department: `Department${(i % 10) + 1}` }); }Di shell MongoDB, Anda dapat melakukan berbagai kueri pada
employeeskoleksi. Perintah berikut ini memperlihatkan beberapa contoh kueri yang bisa Anda jalankan:# Find all employees db.employees.find().pretty(); # Find an employee by EmployeeId db.employees.find({ EmployeeId: "E1001" }).pretty(); # Find employees in a specific department db.employees.find({ Department: "Department1" }).pretty(); # Count the number of employees in a specific department db.employees.countDocuments({ Department: "Department1" }); # Count the total number of records in the employee collection db.employees.countDocuments();
Membuat dan memperbarui rahasia
Untuk menyebarkan mongo-express aplikasi klien, Anda harus terlebih dahulu membuat rahasia khusus di mongo-express Azure Key Vault dan memperbarui penyimpanan rahasia yang Anda buat di tutorial sebelumnya.
Buat kata sandi acak menggunakan fungsi :
#This function generates secrets of 32 characters using only alphanumeric characters generateRandomPasswordString() { cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 }
Buat
mongo-expressnama pengguna dasar-autentikasi dan rahasia kata sandi untuk digunakan untuk masuk ke aplikasi klien menggunakanaz keyvault secret setperintah:az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGOEXPRESS-CONFIG-BASICAUTH-USERNAME --value MONGOEXPRESSADMINUSER --output none az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGOEXPRESS-CONFIG-BASICAUTH-PASSWORD --value $(generateRandomPasswordString) --output noneBuat rahasia untuk detail server konfigurasi
mongo-expressmenggunakan perintahaz keyvault secret set.az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGODB-CONFIG-SERVER --value ${MY_CLUSTER_NAME}-${AKS_MONGODB_NAMESPACE}-mongos.mongodb.svc.cluster.local --output none
Jalankan perintah berikut untuk memperbarui file yang
mongodb.tfvarsdibuat sebelumnya dengan konfigurasi berikut:sed -i '/mongodb_kv_secrets = {/,/^ *}/s/^ *}/ MONGOEXPRESS-CONFIG-BASICAUTH-USERNAME = "'"$(generateRandomPasswordString)"'"\ MONGOEXPRESS-CONFIG-BASICAUTH-PASSWORD = "'"$(generateRandomPasswordString)"'"\ MONGODB-CONFIG-SERVER = "'"$MY_CLUSTER_NAME-$AKS_MONGODB_NAMESPACE-mongos.mongodb.svc.cluster.local"'"\ }/' mongodb.tfvarsTerapkan konfigurasi terraform ke sumber daya target.
terraform fmt terraform apply -var-file="mongodb.tfvars" -target module.mongodb[0].azurerm_key_vault_secret.this
Perbarui rahasia di penyimpanan rahasia yang Anda buat di tutorial sebelumnya menggunakan
kubectl applyperintah .kubectl apply -f - <<EOF apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: ${AKS_MONGODB_SECRETS_NAME} namespace: ${AKS_MONGODB_NAMESPACE} spec: refreshInterval: 1h secretStoreRef: kind: SecretStore name: azure-store target: name: "${AKS_MONGODB_SECRETS_NAME}" creationPolicy: Owner data: # name of the SECRET in the Azure KV (no prefix is by default a SECRET) - secretKey: MONGODB_BACKUP_USER remoteRef: key: MONGODB-BACKUP-USER - secretKey: MONGODB_BACKUP_PASSWORD remoteRef: key: MONGODB-BACKUP-PASSWORD - secretKey: MONGODB_DATABASE_ADMIN_USER remoteRef: key: MONGODB-DATABASE-ADMIN-USER - secretKey: MONGODB_DATABASE_ADMIN_PASSWORD remoteRef: key: MONGODB-DATABASE-ADMIN-PASSWORD - secretKey: MONGODB_CLUSTER_ADMIN_USER remoteRef: key: MONGODB-CLUSTER-ADMIN-USER - secretKey: MONGODB_CLUSTER_ADMIN_PASSWORD remoteRef: key: MONGODB-CLUSTER-ADMIN-PASSWORD - secretKey: MONGODB_CLUSTER_MONITOR_USER remoteRef: key: MONGODB-CLUSTER-MONITOR-USER - secretKey: MONGODB_CLUSTER_MONITOR_PASSWORD remoteRef: key: MONGODB-CLUSTER-MONITOR-PASSWORD - secretKey: MONGODB_USER_ADMIN_USER remoteRef: key: MONGODB-USER-ADMIN-USER - secretKey: MONGODB_USER_ADMIN_PASSWORD remoteRef: key: MONGODB-USER-ADMIN-PASSWORD - secretKey: PMM_SERVER_API_KEY remoteRef: key: PMM-SERVER-API-KEY - secretKey: MONGOEXPRESS_CONFIG_BASICAUTH_USERNAME remoteRef: key: MONGOEXPRESS-CONFIG-BASICAUTH-USERNAME - secretKey: MONGOEXPRESS_CONFIG_BASICAUTH_PASSWORD remoteRef: key: MONGOEXPRESS-CONFIG-BASICAUTH-PASSWORD - secretKey: MONGODB_CONFIG_SERVER remoteRef: key: MONGODB-CONFIG-SERVER EOFContoh output:
externalsecret.external-secrets.io/cluster-aks-mongodb-secrets configured
Mengimplementasikan Mongo Express
Aplikasi klien sampel menggunakan mongo-express, antarmuka admin MongoDB berbasis web yang dibangun dengan Node.js, Express, dan Bootstrap 5 untuk melakukan operasi CRUD.
Terapkan manifes YAML berikut menggunakan
kubectl applyperintah :kubectl apply -f -<<EOF apiVersion: v1 kind: Service metadata: name: mongo-express namespace: ${AKS_MONGODB_NAMESPACE} spec: type: LoadBalancer ports: - port: 8081 # Service port for HTTP access targetPort: 8081 # Container port for Mongo Express selector: app: mongo-express --- apiVersion: apps/v1 kind: Deployment metadata: name: mongo-express namespace: ${AKS_MONGODB_NAMESPACE} spec: replicas: 1 selector: matchLabels: app: mongo-express template: metadata: labels: app: mongo-express spec: containers: - name: mongo-express image: mongo-express ports: - containerPort: 8081 env: - name: ME_CONFIG_MONGODB_SERVER valueFrom: secretKeyRef: name: ${AKS_MONGODB_SECRETS_NAME} key: MONGODB_CONFIG_SERVER - name: ME_CONFIG_BASICAUTH_USERNAME valueFrom: secretKeyRef: name: ${AKS_MONGODB_SECRETS_NAME} key: MONGOEXPRESS_CONFIG_BASICAUTH_USERNAME - name: ME_CONFIG_BASICAUTH_PASSWORD valueFrom: secretKeyRef: name: ${AKS_MONGODB_SECRETS_NAME} key: MONGOEXPRESS_CONFIG_BASICAUTH_PASSWORD - name: ME_CONFIG_MONGODB_PORT value: "27017" - name: ME_CONFIG_MONGODB_ADMINUSERNAME valueFrom: secretKeyRef: name: ${AKS_MONGODB_SECRETS_NAME} key: MONGODB_DATABASE_ADMIN_USER - name: ME_CONFIG_MONGODB_ADMINPASSWORD valueFrom: secretKeyRef: name: ${AKS_MONGODB_SECRETS_NAME} key: MONGODB_DATABASE_ADMIN_PASSWORD EOFContoh output:
service/mongo-express created deployment.apps/mongo-express created
Uji aplikasi
Ketika aplikasi berjalan, layanan Kubernetes mengekspos aplikasi ke internet. Proses ini mungkin perlu waktu untuk diselesaikan.
Tunggu hingga layanan
mongo-expressselesai diterapkan, lalu ambilEXTERNAL-IPmenggunakan skrip berikut ini.while true; do IP=$(kubectl get service mongo-express -n ${AKS_MONGODB_NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') if [[ -n $IP ]]; then kubectl get service mongo-express -n ${AKS_MONGODB_NAMESPACE} break else echo "Waiting for LoadBalancer IP..." sleep 5 fi doneKetika
EXTERNAL-IPditetapkan, Anda akan melihat alamat IP publik yang valid untuk layanan, seperti yang ditunjukkan dalam output contoh berikut:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mongo-express LoadBalancer 10.0.150.235 x.xxx.xx.xxx 8081:30908/TCP 86sBuka browser web Anda dan navigasi ke
http://<EXTERNAL-IP>:8081.Saat diminta, masukkan
usernamedanpasswordyang ditetapkan dalam konfigurasi penyebaran. Jika Anda perlu mengambil nama pengguna dan kata sandi, Anda dapat melakukannya menggunakan perintah berikut:export Username=$(kubectl get secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE} -o jsonpath="{.data.MONGOEXPRESS_CONFIG_BASICAUTH_USERNAME}" | base64 --decode) export Password=$(kubectl get secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE} -o jsonpath="{.data.MONGOEXPRESS_CONFIG_BASICAUTH_PASSWORD}" | base64 --decode)