Упражнение. Безопасное хранение переменных в секретах
Создание группы ресурсов и кластера 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
Создайте кластер 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
Включите надстройку маршрутизации приложений с помощью следующей команды.
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 и используйте его в составе команды, чтобы добавить зону в кластер для маршрутизации приложений.
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 используется как переменная среды.
Разверните базу данных MongoDB для поддержки приложения с помощью команды
az cosmosdb create
.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"
Создайте файл 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>"
Сохраните и закройте файл.
Примените секрет с помощью команды
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
Создание приложения
Создайте файл 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
.Добавьте три дефиса под последней строкой в файле
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 ---
Под чертой из трёх дефисов вставьте следующий код, чтобы создать спецификацию 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
Измените DNS-зону в
host:
так, чтобы она соответствовала имени вашей зоны DNS. Используйте значение созданной ранее переменной ZONE_NAME.Сохраните и закройте файл.
Примените изменения к кластеру с помощью команды
kubectl apply
.kubectl apply -f backend-application.yaml