연습 - 비밀에 안전하게 변수 저장
리소스 그룹 및 AKS 클러스터 만들기
참고 항목
이 연습은 선택 사항입니다. 이 연습을 완료하려면 시작하기 전에 Azure 구독을 만들어야 합니다. Azure 계정이 없거나 지금 만들지 않으려는 경우 제시되는 정보를 이해할 수 있도록 지침을 끝까지 읽어 보세요.
리소스 그룹, 클러스터, DNS 영역 및 위치에 대한 환경 변수를 만듭니다. LOCATION 변수를 가장 가까운 지역(예:
eastus
)으로 업데이트해야 합니다.export RESOURCE_GROUP=rg-ship-manager export CLUSTER_NAME=ship-manager-cluster export ZONE_NAME=ship-$RANDOM.com export LOCATION={location}
다음 명령을 실행하여 환경 변수의 값을 보고 나중에 사용할 수 있도록 기록해 둡니다.
echo "RESOURCE_GROUP:" $RESOURCE_GROUP echo "CLUSTER_NAME:"$CLUSTER_NAME echo "ZONE_NAME:" $ZONE_NAME echo "LOCATION:"$LOCATION
az group create
명령을 사용하여 리소스 그룹을 만듭니다.az group create --location $LOCATION --name $RESOURCE_GROUP
az aks create
명령을 사용하여 AKS 클러스터를 만듭니다.az aks create \ -g $RESOURCE_GROUP \ -n $CLUSTER_NAME \ --location $LOCATION \ --node-count 1 \ --node-vm-size Standard_B2s \ --generate-ssh-keys
다음 명령을 사용하여 애플리케이션 라우팅 추가 기능을 사용하도록 설정합니다.
az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
참고 항목
aks-preview 확장을 설치하라는 메시지가 표시되면 입력
Y
하여 설치하고 계속합니다.명령을 사용하여 DNS 영역을 만듭니다
az network dns zone create
.az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
DNS 영역의 ID를 검색하고 명령의 일부로 사용하여 앱 라우팅을 위해 클러스터에 영역을 추가합니다.
ZONEID=$(az network dns zone show -g $RESOURCE_GROUP -n $ZONE_NAME --query "id" --output tsv) az aks approuting zone add -g $RESOURCE_GROUP -n $CLUSTER_NAME --ids=${ZONEID} --attach-zones
명령을 사용하여 클러스터에 대한 자격 증명을 가져옵니다
az aks get-credentials
.az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
비밀 만들기
참고 항목
애플리케이션 설명서에서 이 애플리케이션이 프런트 엔드와 백 엔드라는 두 부분으로 구성되어 있음을 볼 수 있습니다. 백 엔드에서만 MongoDB 연결 문자열을 환경 변수로 사용하기 때문에 비밀을 사용해야 합니다.
az cosmosdb create
명령을 사용하여 애플리케이션을 지원하도록 MongoDB 데이터베이스를 배포합니다.export DATABASE_NAME=contoso-ship-manager-$RANDOM && \ az cosmosdb create \ -n $DATABASE_NAME \ -g $RESOURCE_GROUP \ --kind MongoDB
데이터베이스가 만들어지면
az cosmosdb keys list
명령을 사용하여 연결 문자열을 가져오고 출력 값을 복사합니다.az cosmosdb keys list \ --type connection-strings \ -g $RESOURCE_GROUP \ -n $DATABASE_NAME \ -o tsv \ --query "connectionStrings[0].connectionString"
backend-secret.yaml
이라는 새 YAML 파일을 만들고 다음 코드를 붙여넣어 비밀 사양을 만듭니다. 자리 표시자 문자열을 이전 출력의 연결 문자열로 바꿔야 합니다.apiVersion: v1 kind: Secret metadata: name: ship-manager-database namespace: default type: Opaque stringData: database_mongodb_uri: "<paste the connection string here>"
파일을 저장한 후 닫습니다.
kubectl apply
명령을 사용하여 비밀을 적용합니다.kubectl apply -f backend-secret.yaml
kubectl get secret
명령을 사용하여 비밀을 쿼리하여 결과를 확인합니다.kubectl get secret ship-manager-database
다음 예제와 유사한 출력을 가져와야 합니다.
NAME TYPE DATA AGE ship-manager-database Opaque 1 5s
애플리케이션 만들기
backend-application.yaml
이라는 새 YAML 파일을 만들고 다음 코드에 붙여넣어 배포 사양을 만듭니다.apiVersion: apps/v1 kind: Deployment metadata: name: ship-manager-backend namespace: default spec: replicas: 1 selector: matchLabels: app: ship-manager-backend template: metadata: labels: app: ship-manager-backend spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-ship-manager:backend name: ship-manager-backend ports: - containerPort: 3000 name: http env: - name: DATABASE_MONGODB_URI valueFrom: secretKeyRef: key: database_mongodb_uri name: ship-manager-database - name: DATABASE_MONGODB_DBNAME value: ship_manager
env
섹션에서는valueFrom
및secretKeyRef
키를 사용합니다. 이러한 키의 순서는 배포가name
키에 정의된 보안 비밀에 있는key
의 값을 사용하도록 지시합니다.다음 섹션을 구분하려면
backend-application.yaml
파일의 마지막 줄 아래에 세 개의 대시를 추가합니다.# Previous lines from the deployment value: ship_manager --- apiVersion: v1 kind: Service metadata: name: ship-manager-backend namespace: default spec: selector: app: ship-manager-backend ports: - name: http port: 80 targetPort: 3000 ---
세 개의 대시 아래에 다음 코드를 붙여넣어 수신 사양을 만듭니다.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ship-manager-backend namespace: default annotations: spec.ingressClassName: webapprouting.kubernetes.azure.com spec: rules: - host: ship-manager-backend.<paste the ZONE_NAME here> http: paths: - path: / pathType: Prefix backend: service: name: ship-manager-backend port: name: http
DNS 영역
host:
의 이름과 일치하도록 DNS 영역을 변경합니다. 이전에 만든 ZONE_NAME 변수의 값을 사용합니다.파일을 저장하고 닫습니다.
kubectl apply
명령을 사용하여 클러스터에 변경 내용을 적용합니다.kubectl apply -f backend-application.yaml