Uw cloudeigen app handmatig implementeren in Azure Kubernetes Service
Voordat u uw website-implementaties kunt automatiseren, moet u de bestaande eShop-app handmatig implementeren in Azure Kubernetes Service (AKS). U maakt de Azure-resources en implementeert de app in AKS met behulp van Azure CLI-opdrachten en bash-scripts. Ten slotte maakt u een Azure Ad-service-principal (Azure Active Directory) om GitHub Actions toe te staan te implementeren in AKS en Azure Container Registry.
Met de opdrachten worden de volgende resources gemaakt om een bijgewerkte versie van de eShop-app te implementeren.
- Richt een Azure Container Registry (ACR) in en push vervolgens installatiekopieën naar het register.
- Richt een AKS-cluster in en implementeer vervolgens de containers in het cluster.
- Test de implementatie.
- Maak service-principals zodat GitHub Actions kan worden geïmplementeerd in AKS en Azure Container Registry.
Belangrijk
Zorg ervoor dat u de vereisten hebt voltooid voordat u begint.
De ontwikkelomgeving openen
U kunt ervoor kiezen om een GitHub-coderuimte te gebruiken die als host fungeert voor de oefening of om de oefening lokaal te voltooien in Visual Studio Code.
Installatie van GitHub Codespaces
Fork de https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops opslagplaats naar uw eigen GitHub-account. Ga vervolgens naar uw nieuwe fork:
- Selecteer Code.
- Selecteer het tabblad Codespaces .
- Selecteer het + pictogram om uw codespace te maken.
GitHub duurt enkele minuten om de codespace te maken en te configureren. Wanneer het proces is voltooid, ziet u de codebestanden voor de oefening.
Optioneel: Installatie van Visual Studio Code
Als u Visual Studio Code wilt gebruiken, forkt u de https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops opslagplaats naar uw eigen GitHub-account en kloont u deze lokaal. Daarna kunt u het volgende doen:
- Installeer systeemopdrachten om Dev Container uit te voeren in Visual Studio Code.
- Zorg ervoor dat Docker wordt uitgevoerd.
- Open in een nieuw Visual Studio Code-venster de map van de gekloonde opslagplaats
- Druk op Ctrl+Shift+P om het opdrachtenpalet te openen.
- Zoeken: Dev-containers: >opnieuw bouwen en opnieuw openen in container
- Visual Studio Code maakt uw ontwikkelcontainer lokaal.
Containers bouwen
Voer in het terminalvenster deze dotnet CLI-opdracht uit:
dotnet publish /p:PublishProfile=DefaultContainer
De Azure-resources maken
Meld u in het terminalvenster aan bij Azure met deze Azure CLI-opdracht:
az login --use-device-code
Bekijk het geselecteerde Azure-abonnement.
az account show -o table
Als het verkeerde abonnement is geselecteerd, gebruikt u de opdracht az account set om het juiste abonnement te selecteren.
Voer de volgende Azure CLI-opdracht uit om een lijst met Azure-regio's en de bijbehorende naam op te halen:
az account list-locations -o table
Zoek een regio die het dichtst bij u ligt en gebruik deze in de volgende stap door deze te vervangen
[Closest Azure region]
Voer deze bash-instructies uit:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CLUSTER_NAME=aks-eshop export ACR_NAME=acseshop$SRANDOM
Met de vorige opdrachten maakt u omgevingsvariabelen die u in de volgende Azure CLI-opdrachten gaat gebruiken. U moet de LOCATIE wijzigen in een Azure-regio dicht bij u in de buurt, bijvoorbeeld eastus. Als u een andere naam wilt voor uw resourcegroep, AKS-cluster of ACR, wijzigt u deze waarden. Als u uw nieuwe opslagplaatsen in Azure Portal wilt weergeven, wijst u uzelf toe als App Compliance Automation-Beheer istrator in het toegangsbeheer (IAM) van het containerregister.
Voer deze Azure CLI-opdrachten uit:
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
Als u een verificatiefout ontvangt wanneer
az acr login --name $ACR_Name
deze wordt uitgevoerd, moet u Beheer gebruiker inschakelen in het zojuist gemaakte containerregister in Azure onder Instellingen - Toegangssleutels. Azure vraagt u om deze referenties in te voeren om door te gaan. U kunt ook opnieuw verifiëren metaz login --use-device-code
.Met deze opdrachten maakt u een resourcegroep die de Azure-resources, een ACR voor uw installatiekopieën bevat en meldt u zich vervolgens aan bij de ACR. Het kan enkele minuten duren voordat u deze uitvoer ziet:
... }, "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
Voer de volgende opdrachten uit om uw installatiekopieën te taggen en naar de gemaakte ACR te pushen:
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
U kunt controleren of het pushen van de installatiekopieën is voltooid met deze opdracht:
az acr repository list --name $ACR_NAME --output table
Maak uw AKS en verbind deze met de ACR met deze opdrachten:
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
Met de bovenstaande opdrachten maakt u een AKS-cluster met één knooppunt, verbindt u het met de ACR en verbindt u vervolgens uw lokale computer met het AKS-cluster. Het kan enkele minuten duren voordat de bovenstaande opdrachten zijn voltooid.
Controleer met deze opdracht of de nieuwe AKS installatiekopieën uit de ACR kan ophalen:
az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Als het goed is, ziet u vergelijkbare uitvoer als in de volgende berichten:
[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!
U kunt nu kubectl-opdrachten uitvoeren op uw nieuwe AKS-cluster. Kopieer de volledige ACR-URL uit de uitvoer; Boven de URL is bijvoorbeeld acseshop1251599299.
Controleer de status van uw AKS-cluster:
kubectl get nodes -A
Als het goed is, ziet u vergelijkbare uitvoer als in de volgende berichten:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37200563-vmss000000 Ready agent 3h44m v1.26.6
Het Kubernetes-implementatiemanifest configureren
Nu bevinden de eShop-installatiekopieën zich in de ACR, kunt u het AKS-implementatiemanifest bijwerken om deze nieuwe installatiekopieën te gebruiken.
Selecteer in Visual Studio Code in het deelvenster EXPLORER het bestand deployment.yml in de hoofdmap van het project.
Vervangen op regel 17:
- image: [replace with your ACR name].azurecr.io/storeimage:v1
Plak de gekopieerde ACR-naam uit de vorige stap: de regel moet er ongeveer als volgt uitzien:
- image: acseshop1251599299.azurecr.io/storeimage:v1
Herhaal deze stappen voor regel 65:
- image: [replace with your ACR name].azurecr.io/productservice:v1
Sla het bestand op met CTRL+S.
Implementeer in het terminalvenster een NGINX-ingangscontroller met de volgende kubernetes-opdracht:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yaml
Met de bovenstaande
kubectl
opdracht worden services en onderdelen toegevoegd om inkomend verkeer toe te staan in uw AKS-cluster. Controleer of het toegangsbeheerobject gereed is voor uitvoering met behulp van de volgende kubernetes-opdracht:kubectl get services --namespace ingress-nginx
Als het goed is, ziet u vergelijkbare uitvoer als in de volgende berichten:
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
Implementeer de eShop-app met deze opdracht:
kubectl apply -f deployment.yml
Met
kubectl
de opdracht Apply implementeert u de eShop-app, een front-end Blazor-web-app en een back-end REST API-productservice en een regel voor inkomend verkeer om verkeer naar de juiste services naar uw AKS-cluster te routeren. Voer deze opdracht opnieuw uit als er een fout optreedt bij implementaties.Als het goed is, ziet u vergelijkbare uitvoer als in de volgende berichten:
deployment.apps/storeimage created service/eshop-website created deployment.apps/productservice created service/eshop-backend created ingress.networking.k8s.io/eshop-ingress created
Controleer of de twee microservices zijn geïmplementeerd met deze opdracht:
kubectl get pods -A
Als het goed is, ziet u vergelijkbare uitvoer als in de volgende berichten:
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
Bekijk de geïmplementeerde eShop met deze opdracht:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Met de bovenstaande opdracht wordt het externe IP-adres voor de web-app geretourneerd. Houd Ctrl ingedrukt en klik op de koppeling om de app op een nieuw tabblad te openen.
Een service-principal maken voor implementatie vanuit GitHub
GitHub Actions kan containerinstallatiekopieën publiceren naar een Azure Container Registry. De GitHub-runner moet daarom machtigingen hebben om verbinding te maken met Azure. Met de volgende stappen maakt u een Azure AD-service-principal om te fungeren als de GitHub Actions-identiteit in Azure.
Voer de volgende opdracht uit in de terminal om uw abonnements-id op te slaan in een omgevingsvariabele:
export SUBS=$(az account show --query 'id' --output tsv)
Voer de volgende opdracht uit om een Azure AD-service-principal te maken om toegang vanuit GitHub toe te staan:
az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-auth
Er verschijnt een variant van de volgende uitvoer:
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/" }
Kopieer de JSON-uitvoer en vierkante haken die u in de volgende stap wilt gebruiken.
De GitHub-geheimen maken
De GitHub Actions-runner gebruikt referenties om te communiceren met Container Registry en AKS. De service-principal en de referenties voor het containerregister zijn gevoelige informatie. Het is raadzaam om gevoelige informatie op te slaan als versleutelde geheimen op een veilige locatie. GitHub biedt een ingebouwde locatie voor het opslaan van geheimen en andere variabelen.
Voer de volgende stappen uit om gevoelige informatie veilig op te slaan als omgevingsvariabelen in uw opslagplaats. Beheerders van opslagplaatsen moeten de geheimen beheren waartoe de GitHub Actions-runner toegang heeft.
Ga in uw gesplitste GitHub-opslagplaats naar SettingsActions>Secrets and variables>.
Selecteer New repository secretop de Actions secrets and variables pagina .
Voer op de New secret pagina onder NameAZURE_CREDENTIALS in en voer onder Secretde JSON-uitvoer in die u uit de terminal hebt gekopieerd.
De instellingen moeten er ongeveer uitzien als in de volgende schermopname:
Selecteer Add secret.
U gebruikt dit GitHub-geheim in de volgende sectie om een GitHub-actie te maken om de containerinstallatiekopieën te bouwen.