Ćwiczenie — bezpieczne przechowywanie zmiennych we wpisach tajnych

Ukończone

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.

  1. 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}
    
  2. 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
    
  3. Utwórz grupę zasobów przy użyciu az group create polecenia .

    az group create --location $LOCATION --name $RESOURCE_GROUP
    
  4. 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
    
  5. 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ć.

  6. Utwórz strefę DNS przy użyciu az network dns zone create polecenia .

    az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
    
  7. 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
    
  8. 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ą.

  1. 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
    
  2. 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"
    
  3. 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>"
    
  4. Zapisz i zamknij plik.

  5. Zastosuj wpis tajny przy użyciu kubectl apply polecenia .

    kubectl apply -f backend-secret.yaml
    
  6. 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

  1. 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 klawiszy valueFrom secretKeyRef i . Kolejność tych kluczy nakazuje wdrożeniu użycie wartości z key wartości obecnej w kluczu tajnym zdefiniowanym w kluczu name .

  2. 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
    ---
    
  3. 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
    
  4. Zmień strefę DNS w poleceniu host: , aby pasowała do nazwy strefy DNS. Użyj wartości utworzonej wcześniej zmiennej ZONE_NAME.

  5. Zapisz i zamknij plik.

  6. Zastosuj zmiany do klastra kubectl apply przy użyciu polecenia .

    kubectl apply -f backend-application.yaml