Een clienttoepassing implementeren om verbinding te maken met een MongoDB-cluster in Azure Kubernetes Service (AKS)
Nadat u het MongoDB-cluster op AKS hebt geïmplementeerd, kunt u een voorbeeldclienttoepassing implementeren om te communiceren met MongoDB. Deze zelfstudie bouwt voort op de MongoDB-clusterimplementatie die in de vorige handleidingen wordt behandeld.
Verbinding maken met de MongoDB-shell
In deze sectie maakt u verbinding met de MongoDB-shell. Zodra u verbinding hebt, maakt u een database en verzameling, voegt u gegevens in en voert u query's uit.
Maak een pod met de naam
percona-client
in de${AKS_MONGODB_NAMESPACE}
naamruimte in uw cluster met behulp van dekubectl run
opdracht.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 -- bash -il
Maak verbinding met de MongoDB-shell met behulp van de volgende opdracht. Zorg ervoor dat u de werkelijke waarden vervangt
databaseAdmin
dieAKS_MONGODB_CLUSTER_NAME
databaseAdminPassword
u hebt verkregen uit de vorige zelfstudie.mongosh "mongodb://${databaseAdmin}:${databaseAdminPassword}@${AKS_MONGODB_CLUSTER_NAME}-mongos.mongodb.svc.cluster.local/admin?replicaSet=rs0&ssl=false&directConnection=true"
Maak in de MongoDB-shell de database en verzameling met behulp van het volgende script:
// 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}` }); }
In de MongoDB-shell kunt u verschillende query's uitvoeren op de
employees
verzameling. In de volgende opdrachten ziet u enkele voorbeeldquery's die u kunt uitvoeren:# 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();
Geheimen maken en bijwerken
Als u de mongo-express
client-app wilt implementeren, moet u eerst geheimen maken die specifiek zijn voor mongo-express
azure Key Vault en uw geheime archief bijwerken dat u in de vorige zelfstudie hebt gemaakt.
Maak een
mongo-express
basisverificatie-gebruikersnaam en wachtwoordgeheim dat u wilt gebruiken om u aan te melden bij de client-app met behulp van het volgende script enaz keyvault secret set
de volgende opdrachten:#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 } az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGOEXPRESS-CONFIG-BASICAUTH-USERNAME --value MONGOEXPRESSADMINUSER --output table az keyvault secret set --vault-name $MY_KEYVAULT_NAME --name MONGOEXPRESS-CONFIG-BASICAUTH-PASSWORD --value $(generateRandomPasswordString) --output table
Maak een geheim voor de details van de
mongo-express
configuratieserver met behulp van deaz keyvault secret set
opdracht.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 table
Werk de geheimen in het geheime archief bij dat u in de vorige zelfstudie hebt gemaakt met behulp van de
kubectl apply
opdracht.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 EOF
Voorbeelduitvoer:
externalsecret.external-secrets.io/cluster-aks-mongodb-secrets configured
Mongo Express implementeren
De voorbeeldclienttoepassing maakt gebruik van mongo-express
een webgebaseerde MongoDB-beheerinterface die is gebouwd met Node.js, Express en Bootstrap 5 om CRUD-bewerkingen uit te voeren.
Pas het volgende YAML-manifest toe met behulp van de
kubectl apply
opdracht: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 EOF
Voorbeelduitvoer:
service/mongo-express created deployment.apps/mongo-express created
De toepassing testen
Wanneer de toepassing wordt uitgevoerd, maakt een Kubernetes-service de toepassing beschikbaar op internet. Dit proces kan enige tijd in beslag nemen.
Wacht tot de
mongo-express
service is geïmplementeerd en opgehaaldEXTERNAL-IP
met behulp van het volgende script.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 done
Wanneer de
EXTERNAL-IP
service is toegewezen, ziet u een geldig openbaar IP-adres voor de service, zoals wordt weergegeven in de volgende voorbeelduitvoer:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mongo-express LoadBalancer 10.0.150.235 x.xxx.xx.xxx 8081:30908/TCP 86s
Open uw webbrowser en navigeer naar
http://<EXTERNAL-IP>:8081
.Wanneer u hierom wordt gevraagd, voert u de
username
implementatieconfiguratie in enpassword
stelt u deze in. Als u de gebruikersnaam en het wachtwoord wilt ophalen, kunt u dit doen met behulp van de volgende opdrachten:#username export Username=$(kubectl get secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE} -o jsonpath="{.data.MONGOEXPRESS_CONFIG_BASICAUTH_USERNAME}" | base64 --decode) #echo $Username #password export Password=$(kubectl get secret ${AKS_MONGODB_SECRETS_NAME} -n ${AKS_MONGODB_NAMESPACE} -o jsonpath="{.data.MONGOEXPRESS_CONFIG_BASICAUTH_PASSWORD}" | base64 --decode) #echo $Password
Volgende stap
Azure Kubernetes Service