Udrul din oprindelige cloudapp manuelt i Azure Kubernetes Service

Fuldført

Før du kan automatisere udrulningen af dit websted, skal du udrulle den eksisterende eShop-app manuelt til Azure Kubernetes Service (AKS). Du opretter Azure-ressourcerne og udruller appen til AKS ved hjælp af Azure CLI-kommandoer og bash-scripts. Endelig opretter du en Azure Active Directory-tjenesteprincipal (Azure AD) for at tillade, at GitHub-handlinger udrulles i AKS og Azure Container Registry.

Kommandoerne opretter følgende ressourcer for at installere en opdateret version af appen eShop.

  • Klargør en Azure Container Registry (ACR), og send derefter billeder til registreringsdatabasen.
  • Klargør en AKS-klynge, og udrul derefter objektbeholderne i klyngen.
  • Test udrulningen.
  • Opret tjenesteprincipaler for at tillade, at GitHub-handlinger udrulles til AKS og Azure Container Registry.

Important

Sørg for, at du har opfyldt forudsætningerne , før du begynder.

Åbn udviklingsmiljøet

Du kan vælge at bruge et GitHub-kodeområde, der er vært for øvelsen, eller fuldføre øvelsen lokalt i Visual Studio Code.

Konfiguration af GitHub Codespaces

Kopiér det https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops lager til din egen GitHub-konto. Derefter på din nye kopi:

  1. Vælg Kode.
  2. Vælg fanen Codespaces .
  3. Vælg ikonet + for at oprette dit kodeområde.

GitHub tager flere minutter at oprette og konfigurere kodeområdet. Når processen er fuldført, kan du se kodefilerne til øvelsen.

Valgfrit: Konfiguration af Visual Studio Code

Hvis du vil bruge Visual Studio Code, skal du kopiere det https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops lager til din egen GitHub-konto og klone det lokalt. Then:

  1. Installer eventuelle systemkrav for at køre Dev Container i Visual Studio Code.
  2. Kontrollér, at Docker kører.
  3. Åbn mappen med det klonede lager i et nyt Visual Studio Code-vindue
  4. Tryk på Ctrl+Shift+P for at åbne kommandopaletten.
  5. Søg efter: >udviklerobjektbeholdere: Genopbyg og genåbn i objektbeholder
  6. Visual Studio Code opretter din udviklingsobjektbeholder lokalt.

Byg containere

  1. Kør denne kommando for kommandolinjegrænsefladen dotnet i terminalruden:

    dotnet publish /p:PublishProfile=DefaultContainer 
    

Opret Azure-ressourcerne

  1. Log på Azure med denne Kommandolinjegrænseflade i Azure i terminalruden:

    az login --use-device-code
    
  2. Få vist det valgte Azure-abonnement.

    az account show -o table
    

    Hvis det forkerte abonnement er valgt, skal du bruge kommandoen az-konto, der er angivet kommando, til at vælge den korrekte.

  3. Kør følgende Azure CLI-kommando for at få vist en liste over Azure-områder og det navn, der er knyttet til det:

    az account list-locations -o table
    

    Find et område, der er tættest på dig, og brug det i næste trin ved at erstatte [Closest Azure region]

  4. Kør disse bash-sætninger:

    export LOCATION=[Closest Azure region]
    export RESOURCE_GROUP=rg-eshop
    export CLUSTER_NAME=aks-eshop
    export ACR_NAME=acseshop$SRANDOM
    

    De tidligere kommandoer opretter miljøvariabler, som du skal bruge i de næste Azure CLI-kommandoer. Du skal ændre PLACERING til et Azure-område tæt på dig, f.eks. eastus. Hvis du vil have et andet navn til din ressourcegruppe, AKS-klynge eller ACR, skal du ændre disse værdier. Hvis du vil have vist dine nye lagre på Azure Portal, skal du tildele dig selv som administrator af App Compliance Automation i Access Control (IAM) af objektbeholderregistreringsdatabasen.

  5. Kør disse Azure CLI-kommandoer:

    az group create --name $RESOURCE_GROUP --location $LOCATION
    az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic
    az acr login --name $ACR_NAME
    

    Hvis du modtager en godkendelsesfejl, når az acr login --name $ACR_Name den køres, skal du aktivere Administratorbruger i det nyoprettede containerregister i Azure under Indstillinger – Adgangsnøgler. Azure beder dig om at angive disse legitimationsoplysninger for at fortsætte. Du skal muligvis også godkende igen med az login --use-device-code.

    Disse kommandoer opretter en ressourcegruppe, der indeholder Azure-ressourcerne, en ACR til dine billeder og logger derefter på ACR'en. Det kan tage et par minutter, indtil du ser dette output:

      ...
      },
      "status": null,
      "systemData": {
        "createdAt": "2023-10-19T09:11:51.389157+00:00",
        "createdBy": "",
        "createdByType": "User",
        "lastModifiedAt": "2023-10-19T09:11:51.389157+00:00",
        "lastModifiedBy": "",
        "lastModifiedByType": "User"
      },
      "tags": {},
      "type": "Microsoft.ContainerRegistry/registries",
      "zoneRedundancy": "Disabled"
    }
    Login Succeeded
    
  6. Hvis du vil mærke dine billeder og sende dem til den ACR, du har oprettet, skal du køre disse kommandoer:

    docker tag store $ACR_NAME.azurecr.io/storeimage:v1
    docker tag products $ACR_NAME.azurecr.io/productservice:v1
    
    docker push $ACR_NAME.azurecr.io/storeimage:v1
    docker push $ACR_NAME.azurecr.io/productservice:v1
    

    Du kan kontrollere, om push af billederne er fuldført med denne kommando:

    az acr repository list --name $ACR_NAME --output table
    
  7. Opret din AKS, og opret forbindelse til ACR med disse kommandoer:

    az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 1 --generate-ssh-keys --node-vm-size Standard_B2s --network-plugin azure --attach-acr $ACR_NAME
    
    az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    

    Kommandoerne opretter en enkelt node AKS-klynge, forbinder den med ACR og derefter forbinder din lokale computer med AKS-klyngen. Kommandoerne kan tage et par minutter at fuldføre.

  8. Kontrollér, at den nye AKS kan hente billeder fra ACR med denne kommando:

    az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    

    Du får vist samme output som følgende meddelelser:

    [2023-10-19T13:33:09Z] Loading azure.json file from /etc/kubernetes/azure.json
    [2023-10-19T13:33:09Z] Checking managed identity...
    [2023-10-19T13:33:09Z] Cluster cloud name: AzurePublicCloud
    [2023-10-19T13:33:09Z] Kubelet managed identity client ID: 00001111-aaaa-2222-bbbb-3333cccc4444
    [2023-10-19T13:33:09Z] Validating managed identity existance: SUCCEEDED
    [2023-10-19T13:33:09Z] Validating image pull permission: SUCCEEDED
    [2023-10-19T13:33:09Z] 
    Your cluster can pull images from acseshop1251599299.azurecr.io!
    

    Du kan nu køre kubectl-kommandoer mod din nye AKS-klynge. Kopiér den fulde ACR-URL fra outputtet; Over URL-adressen er f.eks. acseshop1251599299.

  9. Kontrollér status for din AKS-klynge:

    kubectl get nodes -A
    

    Du får vist samme output som følgende meddelelser:

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-37200563-vmss000000   Ready    agent   3h44m   v1.26.6
    

Konfigurer Kubernetes-installationsmanifestet

Nu er eShop-afbildningerne i ACR'en, som du kan opdatere AKS-installationsmanifestet for at bruge disse nye billeder.

  1. I Visual Studio Code eller Codespaces skal du vælge den deployment.yml fil i roden af projektet i panelet EXPLORER.

  2. Erstat på linje 17:

    - image: [replace with your ACR name].azurecr.io/storeimage:v1
    

    Indsæt det kopierede ACR-navn fra det forrige trin – linjen skal ligne følgende yaml:

    - image: acseshop1251599299.azurecr.io/storeimage:v1
    
  3. Gentag disse trin for linje 65:

    - image: [replace with your ACR name].azurecr.io/productservice:v1
    

    Gem filen med CTRL+S.

  4. I terminalruden skal du installere en NGINX-ingresscontroller med følgende kubernetes-kommando:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yaml
    

    Kommandoen kubectl tilføjer tjenester og komponenter for at tillade indtrængen i AKS-klyngen. Kontrollér, at indgående data er klar til at køre ved hjælp af følgende kubernetes-kommando:

    kubectl get services --namespace ingress-nginx 
    

    Du får vist samme output som følgende meddelelser:

    NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGE
    ingress-nginx-controller             LoadBalancer   10.0.135.51    20.26.154.64   80:32115/TCP,443:32254/TCP   58s
    ingress-nginx-controller-admission   ClusterIP      10.0.137.137   <none>         443/TCP                      58s
    
  5. Installér eShop-appen med denne kommando:

    kubectl apply -f deployment.yml
    

    Kommandoen kubectl apply installerer eShop-appen, en frontend-Blazor-webapp og back-end REST API-produkttjenesten og en indgående regel for at dirigere trafik til de korrekte tjenester til din AKS-klynge. Kør denne kommando igen, hvis du får vist en fejl i installationer.

    Du får vist samme output som følgende meddelelser:

    deployment.apps/storeimage created
    service/eshop-website created
    deployment.apps/productservice created
    service/eshop-backend created
    ingress.networking.k8s.io/eshop-ingress created
    
  6. Kontrollér, at de to mikrotjenester er installeret med denne kommando:

    kubectl get pods -A
    

    Du får vist samme output som følgende meddelelser:

    NAMESPACE       NAME                                        READY   STATUS      RESTARTS   AGE
    default         productservice-7569b8c64-vfbfz              1/1     Running     0          3m56s
    default         storeimage-6c7c999d7c-zsnxd                 1/1     Running     0          3m56s
    ingress-nginx   ingress-nginx-admission-create-szb8l        0/1     Completed   0          4m4s
    ingress-nginx   ingress-nginx-admission-patch-czdbv         0/1     Completed   0          4m4s
    ingress-nginx   ingress-nginx-controller-58bf5bf7dc-nwtsr   1/1     Running     0          4m4s
    
  7. Få vist den installerede eShop med denne kommando:

    echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    

    Kommandoen returnerer den eksterne IP-adresse for webappen. Hold CTRL nede, og klik på linket for at åbne appen i en ny fane.

    Et skærmbillede af startsiden for eShop-webappen.

Opret en tjenesteprincipal til udrulning fra GitHub

GitHub-handlinger kan publicere objektbeholderbilleder til en Azure Container Registry. GitHub-løberen skal derfor have tilladelse til at oprette forbindelse til Azure. Følgende trin opretter en Azure AD-tjenesteprincipal for at fungere som GitHub Actions-identiteten i Azure.

  1. Hvis du vil gemme dit abonnements-id i en miljøvariabel, skal du køre følgende kommando i terminalen:

    export SUBS=$(az account show --query 'id' --output tsv)
    
  2. Hvis du vil oprette en Azure AD-tjenesteprincipal for at give adgang fra GitHub, skal du køre følgende kommando:

    az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-auth
    

    Der vises en variation af følgende output:

    Creating 'Contributor' role assignment under scope '/subscriptions/ffffffff-aaaa-bbbb-6666-777777777777'
    
    The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
     {
      "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "clientSecret": "abc1A~abc123ABC123abc123ABC123abc123ABC1",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "tenantId": "00000000-0000-0000-0000-000000000000",
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
      "resourceManagerEndpointUrl": "https://management.azure.com/",
      "activeDirectoryGraphResourceId": "https://graph.windows.net/",
      "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
      "galleryEndpointUrl": "https://gallery.azure.com/",
      "managementEndpointUrl": "https://management.core.windows.net/"
    }
    
  3. Kopiér JSON-outputtet og kantede parenteser, der skal bruges i næste trin.

Opret GitHub-hemmelighederne

GitHub Actions-løberen bruger legitimationsoplysninger til at interagere med Container Registry og AKS. Tjenesteprincipalen og legitimationsoplysningerne for objektbeholderregistreringsdatabasen er følsomme oplysninger. Det er bedst at gemme følsomme oplysninger som krypterede hemmeligheder på et sikkert sted. GitHub har en indbygget placering til lagring af hemmeligheder og andre variabler.

Udfør følgende trin for sikkert at gemme de følsomme oplysninger som miljøvariabler i dit lager. Lageradministratorer skal administrere de hemmeligheder, som Løberen af GitHub-handlinger har adgang til.

  1. Gå til Settings>Secrets and variables>Actionsi dit GitHub-lager.

  2. Vælg Actions secrets and variablespå siden New repository secret .

  3. New secret siden, under Name, indtast AZURE_CREDENTIALS, og under Secret, indtast det JSON-output, du kopierede fra terminalen.

    Indstillingerne skal ligne følgende skærmbillede:

    Skærmbillede af siden Ny hemmelig for at angive hemmeligheder for miljøvariabler i GitHub.

  4. Vælg Add secret.

Du skal bruge denne GitHub-hemmelighed i næste afsnit til at oprette en GitHub-handling til at oprette objektbeholderbilledet.