Упражнение. Безопасное хранение переменных в секретах

Завершено

Создание группы ресурсов и кластера 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. Создайте кластер AKS с помощью команды az aks create.

    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 и используйте его в составе команды, чтобы добавить зону в кластер для маршрутизации приложений.

    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. Разверните базу данных MongoDB для поддержки приложения с помощью команды az cosmosdb create.

    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. Создайте файл YAML с именем backend-secret.yaml и вставьте следующий код, чтобы создать спецификацию Secret. Обязательно замените строку заполнителя строкой подключения из предыдущих выходных данных.

    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. Создайте файл YAML с именем backend-application.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. ** Порядок этих ключей указывает развертыванию использовать значение из key, указанное в секрете, определенном ключом name.

  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. Под чертой из трёх дефисов вставьте следующий код, чтобы создать спецификацию Ingress.

    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