Ćwiczenie — bezpieczne przechowywanie zmiennych w sekretach
Utwórz grupę zasobów i klaster usługi AKS
Notatka
To ćwiczenie jest opcjonalne. Jeśli chcesz wykonać to ćwiczenie, przed rozpoczęciem musisz utworzyć subskrypcję platformy Azure. Jeśli nie masz konta platformy Azure lub nie chcesz go tworzyć w tej chwili, możesz zapoznać się z instrukcjami, aby zrozumieć prezentowane informacje.
Utwórz zmienne środowiskowe dla grupy zasobów, klastra, strefy DNS i lokalizacji. Upewnij się, że zmienna LOCATION jest aktualizowana z regionem najbliżej Ciebie, na przykład
eastus
.export RESOURCE_GROUP=rg-ship-manager export CLUSTER_NAME=ship-manager-cluster export ZONE_NAME=ship-$RANDOM.com export LOCATION={location}
Uruchom następujące polecenie, aby wyświetlić wartości zmiennych środowiskowych i zanotować je do późniejszego użycia.
echo "RESOURCE_GROUP:" $RESOURCE_GROUP echo "CLUSTER_NAME:"$CLUSTER_NAME echo "ZONE_NAME:" $ZONE_NAME echo "LOCATION:"$LOCATION
Utwórz grupę zasobów przy użyciu polecenia
az group create
.az group create --location $LOCATION --name $RESOURCE_GROUP
Utwórz klaster AKS przy użyciu polecenia
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
Włącz dodatek routingu aplikacji za pomocą następującego polecenia.
az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
Notatka
Jeśli zostanie wyświetlony komunikat z prośbą o zainstalowanie rozszerzenia aks-preview, wprowadź
Y
, aby go zainstalować i kontynuować.Utwórz strefę DNS przy użyciu polecenia
az network dns zone create
.az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
Pobierz identyfikator strefy DNS i użyj go w ramach polecenia , aby dodać strefę do klastra na potrzeby routingu aplikacji.
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
Pobierz poświadczenia dla klastra przy użyciu polecenia
az aks get-credentials
.az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
Utwórz tajemnicę
Notatka
W dokumentacji aplikacji widać, że ta aplikacja ma dwie części: fronton i zaplecze. Tylko zaplecze musi używać sekretu, ponieważ ma ciąg połączenia MongoDB jako zmienną środowiskową.
Wdróż bazę danych MongoDB, aby obsługiwać aplikację przy użyciu polecenia
az cosmosdb create
.export DATABASE_NAME=contoso-ship-manager-$RANDOM && \ az cosmosdb create \ -n $DATABASE_NAME \ -g $RESOURCE_GROUP \ --kind MongoDB
Po utworzeniu bazy danych pobierz parametry połączenia przy użyciu polecenia
az cosmosdb keys list
i skopiuj wartość wyjściową.az cosmosdb keys list \ --type connection-strings \ -g $RESOURCE_GROUP \ -n $DATABASE_NAME \ -o tsv \ --query "connectionStrings[0].connectionString"
Utwórz nowy plik YAML o nazwie
backend-secret.yaml
i wklej następujący kod, aby utworzyć specyfikację Secret. Pamiętaj, aby zastąpić ciąg znaków symbolu zastępczego ciągiem połączenia z poprzedniego wyniku.apiVersion: v1 kind: Secret metadata: name: ship-manager-database namespace: default type: Opaque stringData: database_mongodb_uri: "<paste the connection string here>"
Zapisz i zamknij plik.
Zastosuj sekret, używając polecenia
kubectl apply
.kubectl apply -f backend-secret.yaml
Sprawdź wynik, wykonując zapytanie o tajemnicę przy użyciu polecenia
kubectl get secret
.kubectl get secret ship-manager-database
Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:
NAME TYPE DATA AGE ship-manager-database Opaque 1 5s
Tworzenie aplikacji
Utwórz nowy plik YAML o nazwie
backend-application.yaml
i wklej następujący kod, aby utworzyć specyfikację wdrożenia.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
Zwróć uwagę, że w sekcji
env
używamyvalueFrom
i kluczysecretKeyRef
. Kolejność tych kluczy informuje wdrożenie o użyciu wartości zkey
obecnej w kluczu tajnym zdefiniowanym w kluczuname
.Dodaj trzy kreski poniżej ostatniego wiersza w pliku
backend-application.yaml
, aby oddzielić następną sekcję.# 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 ---
Pod trzema myślnikami wklej następujący kod, aby utworzyć specyfikację 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
Zmień strefę DNS w
host:
tak, by pasowała do nazwy Twojej strefy DNS. Użyj wartości utworzonej wcześniej zmiennej ZONE_NAME.Zapisz i zamknij plik.
Zastosuj zmiany do klastra przy użyciu polecenia
kubectl apply
.kubectl apply -f backend-application.yaml