AKS에 MongoDB 클러스터를 배포한 후 MongoDB와 상호 작용하는 샘플 클라이언트 애플리케이션을 배포할 수 있습니다. 이 자습서는 이전 가이드에서 다루는 MongoDB 클러스터 배포를 기반으로 합니다.
MongoDB 셸에 연결
이 섹션에서는 MongoDB 셸에 연결합니다. 연결되면 데이터베이스 및 컬렉션을 만들고, 데이터를 삽입하고, 쿼리를 실행합니다.
클러스터의
${AKS_MONGODB_NAMESPACE}
네임스페이스에percona-client
이라는 이름의 Pod를kubectl run
명령을 사용하여 만듭니다. 이전 자습서의 3단계에서 내보낸 올바른$connectionString
환경 변수를 전달하고 있는지 확인합니다.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=$connectionString
다음 명령을 사용하여 MongoDB 셸에 연결합니다.
mongosh $CONN_STR
MongoDB 셸에서 다음 스크립트를 사용하여 데이터베이스 및 컬렉션을 만듭니다.
// 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}` }); }
MongoDB 셸에서 컬렉션에 대해 다양한 쿼리를
employees
수행할 수 있습니다. 다음 명령은 실행할 수 있는 몇 가지 예제 쿼리를 보여 줍니다.# 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();
비밀 만들기 및 업데이트
클라이언트 앱을 배포 mongo-express
하려면 먼저 Azure Key Vault에 특정한 mongo-express
비밀을 만들고 이전 자습서에서 만든 비밀 저장소를 업데이트해야 합니다.
아래 함수를 사용하여 임의 암호를 생성합니다.
#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 }
mongo-express
명령을 사용하여az keyvault secret set
클라이언트 앱에 로그인하는 데 사용할 기본 인증 사용자 이름 및 암호 비밀을 만듭니다.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 none
명령
az keyvault secret set
을(를) 사용하여mongo-express
구성 서버 세부 정보에 대한 시크릿을 생성합니다.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
다음 명령을 실행하여 이전에 만든 파일을 다음 구성으로 업데이트
mongodb.tfvars
합니다.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.tfvars
대상 리소스에 terraform 구성을 적용합니다.
terraform fmt terraform apply -var-file="mongodb.tfvars" -target module.mongodb[0].azurerm_key_vault_secret.this
명령을 사용하여 이전 자습서에서 만든 비밀 저장소의 비밀을 업데이트합니다
kubectl apply
.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
예제 출력:
externalsecret.external-secrets.io/cluster-aks-mongodb-secrets configured
Mongo Express 배포
샘플 클라이언트 애플리케이션은 Node.js, Express 및 부트스트랩 5로 빌드된 웹 기반 MongoDB 관리 인터페이스를 사용하여 mongo-express
CRUD 작업을 수행합니다.
명령을 사용하여 다음 YAML 매니페스트를 적용합니다
kubectl apply
.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
예제 출력:
service/mongo-express created deployment.apps/mongo-express created
애플리케이션 테스트
애플리케이션이 실행되면 Kubernetes 서비스는 애플리케이션을 인터넷에 노출합니다. 이 프로세스를 완료하는 데 약간의 시간이 걸릴 수 있습니다.
mongo-express
서비스를 배포하고 나서 다음 스크립트를 사용하여EXTERNAL-IP
를 검색하십시오.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
할당되면
EXTERNAL-IP
다음 예제 출력과 같이 서비스에 대한 유효한 공용 IP 주소가 표시됩니다.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mongo-express LoadBalancer 10.0.150.235 x.xxx.xx.xxx 8081:30908/TCP 86s
웹 브라우저를 열고,
http://<EXTERNAL-IP>:8081
로 이동합니다.메시지가 표시되면 배포 구성에
username
입력하고password
설정합니다. 사용자 이름 및 암호를 검색해야 하는 경우 다음 명령을 사용하여 검색할 수 있습니다.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)
다음 단계
Azure Kubernetes Service