연습 - 비밀에 안전하게 변수 저장

완료됨

리소스 그룹 및 AKS 클러스터 만들기

참고 항목

이 연습은 선택 사항입니다. 이 연습을 완료하려면 시작하기 전에 Azure 구독을 만들어야 합니다. Azure 계정이 없거나 지금 만들지 않으려는 경우 제시되는 정보를 이해할 수 있도록 지침을 끝까지 읽어 보세요.

  1. 리소스 그룹, 클러스터, DNS 영역 및 위치에 대한 환경 변수를 만듭니다. LOCATION 변수를 가장 가까운 지역(예: eastus)으로 업데이트해야 합니다.

    export RESOURCE_GROUP=rg-ship-manager
    export CLUSTER_NAME=ship-manager-cluster
    export ZONE_NAME=ship-$RANDOM.com
    export LOCATION={location}
    
  2. 다음 명령을 실행하여 환경 변수의 값을 보고 나중에 사용할 수 있도록 기록해 둡니다.

    echo "RESOURCE_GROUP:" $RESOURCE_GROUP
    echo "CLUSTER_NAME:"$CLUSTER_NAME
    echo "ZONE_NAME:" $ZONE_NAME
    echo "LOCATION:"$LOCATION
    
  3. az group create 명령을 사용하여 리소스 그룹을 만듭니다.

    az group create --location $LOCATION --name $RESOURCE_GROUP
    
  4. 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
    
  5. 다음 명령을 사용하여 애플리케이션 라우팅 추가 기능을 사용하도록 설정합니다.

    az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
    

    참고 항목

    aks-preview 확장을 설치하라는 메시지가 표시되면 입력 Y 하여 설치하고 계속합니다.

  6. 명령을 사용하여 DNS 영역을 만듭니다 az network dns zone create .

    az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
    
  7. 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
    
  8. 명령을 사용하여 클러스터에 대한 자격 증명을 가져옵니다 az aks get-credentials .

    az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

비밀 만들기

참고 항목

애플리케이션 설명서에서 이 애플리케이션이 프런트 엔드와 백 엔드라는 두 부분으로 구성되어 있음을 볼 수 있습니다. 백 엔드에서만 MongoDB 연결 문자열을 환경 변수로 사용하기 때문에 비밀을 사용해야 합니다.

  1. az cosmosdb create 명령을 사용하여 애플리케이션을 지원하도록 MongoDB 데이터베이스를 배포합니다.

    export DATABASE_NAME=contoso-ship-manager-$RANDOM && \
    az cosmosdb create \
     -n $DATABASE_NAME \
     -g $RESOURCE_GROUP \
     --kind MongoDB
    
  2. 데이터베이스가 만들어지면 az cosmosdb keys list 명령을 사용하여 연결 문자열을 가져오고 출력 값을 복사합니다.

    az cosmosdb keys list \
      --type connection-strings \
      -g $RESOURCE_GROUP \
      -n $DATABASE_NAME \
      -o tsv \
      --query "connectionStrings[0].connectionString"
    
  3. 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>"
    
  4. 파일을 저장한 후 닫습니다.

  5. kubectl apply 명령을 사용하여 비밀을 적용합니다.

    kubectl apply -f backend-secret.yaml
    
  6. kubectl get secret 명령을 사용하여 비밀을 쿼리하여 결과를 확인합니다.

    kubectl get secret ship-manager-database
    

    다음 예제와 유사한 출력을 가져와야 합니다.

    NAME                    TYPE     DATA   AGE
    ship-manager-database   Opaque   1      5s
    

애플리케이션 만들기

  1. 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 섹션에서는 valueFromsecretKeyRef 키를 사용합니다. 이러한 키의 순서는 배포가 name 키에 정의된 보안 비밀에 있는 key의 값을 사용하도록 지시합니다.

  2. 다음 섹션을 구분하려면 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
    ---
    
  3. 세 개의 대시 아래에 다음 코드를 붙여넣어 수신 사양을 만듭니다.

    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
    
  4. DNS 영역 host: 의 이름과 일치하도록 DNS 영역을 변경합니다. 이전에 만든 ZONE_NAME 변수의 값을 사용합니다.

  5. 파일을 저장하고 닫습니다.

  6. kubectl apply 명령을 사용하여 클러스터에 변경 내용을 적용합니다.

    kubectl apply -f backend-application.yaml