Ćwiczenie — bezpieczne przechowywanie zmiennych we wpisach tajnych
Tworzenie grupy zasobów i klastra usługi AKS
Uwaga
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
az group create
polecenia .az group create --location $LOCATION --name $RESOURCE_GROUP
Utwórz klaster usługi AKS przy użyciu
az aks create
polecenia .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
Uwaga
Jeśli zostanie wyświetlony komunikat z prośbą o zainstalowanie rozszerzenia aks-preview, wprowadź polecenie
Y
, aby go zainstalować i kontynuować.Utwórz strefę DNS przy użyciu
az network dns zone create
polecenia .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
az aks get-credentials
przy użyciu polecenia .az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
Tworzenie wpisu tajnego
Uwaga
W dokumentacji aplikacji można zobaczyć, że ta aplikacja ma dwie części: fronton i zaplecze. Tylko zaplecze musi używać wpisu tajnego, ponieważ ma parametry połączenia mongoDB jako zmienną środowiskową.
Wdróż bazę danych MongoDB, aby obsługiwać aplikację przy użyciu
az cosmosdb create
polecenia .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
az cosmosdb keys list
polecenia 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ę wpisu tajnego. Pamiętaj, aby zastąpić ciąg zastępczy parametry połączenia z poprzednich danych wyjściowych.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 wpis tajny przy użyciu
kubectl apply
polecenia .kubectl apply -f backend-secret.yaml
Sprawdź wynik, wykonując zapytanie dotyczące wpisu tajnego
kubectl get secret
przy użyciu polecenia .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
env
sekcji używamy klawiszyvalueFrom
secretKeyRef
i . Kolejność tych kluczy nakazuje wdrożeniu użycie wartości zkey
wartości 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 ---
Poniżej trzech kresek wklej następujący kod, aby utworzyć specyfikację ruchu przychodzącego.
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 poleceniu
host:
, aby pasowała do nazwy strefy DNS. Użyj wartości utworzonej wcześniej zmiennej ZONE_NAME.Zapisz i zamknij plik.
Zastosuj zmiany do klastra
kubectl apply
przy użyciu polecenia .kubectl apply -f backend-application.yaml