Oktatóanyag – Cloud-init használata az Azure-ban először induló linuxos virtuális gépek testreszabásához

A következőkre vonatkozik: ✔️ Linux rendszerű virtuális gépek rugalmas méretezési ✔️ csoportjai

Egy korábbi oktatóanyagból megtudhatta, hogyan csatlakozhat SSH-val a virtuális gépekhez, és hogyan telepítheti manuálisan az NGINX-et. A virtuális gépek gyors és következetes létrehozásához általában valamilyen automatizálásra van szükség. A virtuális gépek első rendszerindításkor való testreszabásának általánosan használt megközelítése a cloud-init használata. Ezen oktatóanyag segítségével megtanulhatja a következőket:

  • Cloud-init konfigurációs fájl létrehozása
  • Cloud-init-fájlt használó virtuális gép létrehozása
  • Futó Node.js-alkalmazás megtekintése a virtuális gép létrehozása után
  • A Key Vault használata a tanúsítványok biztonságos tárolására
  • Az NGINX biztonságos telepítéseinek automatizálása a cloud-init használatával

Ha a parancssori felület helyi telepítését és használatát választja, akkor ehhez az oktatóanyaghoz az Azure CLI 2.0.30-as vagy újabb verziójára lesz szükség. A verzió azonosításához futtassa a következőt: az --version. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.

A cloud-init áttekintése

A cloud-init egy széles körben használt módszer a Linux rendszerű virtuális gépek első indításkor való testreszabásához. A cloud-init használatával csomagokat telepíthet és fájlokat írhat, vagy beállíthatja a felhasználókat és a biztonságot. Mivel a cloud-init a kezdeti rendszerindítás során fut, nincs szükség további lépésekre vagy ügynökökre a konfiguráció alkalmazásához.

A cloud-init különböző disztribúciókon is működik. Például nem kell az apt-get install vagy a yum install használatával telepítenie a csomagokat. Ehelyett megadhatja a telepítendő csomagok listáját. A cloud-init automatikusan a natív csomagkezelő eszközt használja a kiválasztott disztribúcióhoz.

A partnereinkkel dolgozunk rajta, hogy egyre több általuk biztosított Azure-rendszerkép tartalmazza a cloud-init eszközt. Az egyes disztribúciók cloud-init-támogatásával kapcsolatos részletes információkért lásd: Cloud-init-támogatás az Azure-beli virtuális gépekhez.

Cloud-init konfigurációs fájl létrehozása

A cloud-init működés közbeni megtekintéséhez hozzon létre egy virtuális gépet, amely telepíti az NGINX-et, és egy egyszerű „Hello World” Node.js-alkalmazást futtat. Az alábbi cloud-init konfiguráció telepíti a szükséges csomagokat, létrehoz egy Node.js-alkalmazást, majd inicializálja és elindítja azt.

A bash parancssorában vagy a Cloud Shell hozzon létre egy cloud-init.txt nevű fájlt, és illessze be az alábbi konfigurációt. Írja be sensible-editor cloud-init.txt például a fájlt a fájl létrehozásához, és tekintse meg az elérhető szerkesztők listáját. Ügyeljen arra, hogy megfelelően másolja ki a teljes cloud-init-fájlt, különösen az első sort:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
    path: /etc/nginx/sites-available/default
    defer: true
    content: |
      server {
        listen 80;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
    path: /home/azureuser/myapp/index.js
    defer: true
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

További információk a cloud-init konfigurációs beállításairól: cloud-init példakonfigurációk.

Virtuális gép létrehozása

Mielőtt létrehozhatna egy virtuális gépet, létre kell hoznia egy erőforráscsoportot az az group create paranccsal. A következő példa egy myResourceGroupAutomate nevű erőforráscsoportot hoz létre az eastus helyen:

az group create --name myResourceGroupAutomate --location eastus

Most hozzon létre egy virtuális gépet az az vm create paranccsal. Használja a --custom-data paramétert a cloud-init konfigurációs fájl megadásához. Adja meg a cloud-init.txt konfiguráció teljes elérési útját, ha az aktuális munkakönyvtáron kívülre mentette. Az alábbi példa egy myVM nevű virtuális gépet hoz létre:

az vm create \
    --resource-group myResourceGroupAutomate \
    --name myAutomatedVM \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init.txt

A virtuális gép létrehozása, a csomagok telepítése és az alkalmazás elindítása néhány percig tart. Néhány háttérfeladat azután is tovább fut, hogy az Azure CLI visszairányítja Önt a parancssorhoz. Eltarthat még néhány percig, amíg hozzáférhet az alkalmazáshoz. A virtuális gép létrehozása után jegyezze fel az Azure CLI által megjelenített publicIpAddress értéket. Ezzel a címmel érheti el a Node.js-alkalmazást a webböngészőn keresztül.

Ahhoz, hogy a webes adatforgalom elérje a virtuális gépét, nyissa meg az internetről a 80-as portot az az vm open-port paranccsal:

az vm open-port --port 80 --resource-group myResourceGroupAutomate --name myAutomatedVM

Webalkalmazás tesztelése

Most megnyithat egy webböngészőt, és beírhatja http://< publicIpAddress> címet a címsorba. Adja meg a saját nyilvános IP-címét, amelyet a virtuális gép létrehozásakor kapott. A Node.js-alkalmazás a következő példához hasonlóan jelenik meg:

Futó NGINX-webhely megtekintése

Tanúsítványok beszúrása a Key Vaultból

Ez az opcionális szakasz bemutatja, hogyan tárolhatja biztonságosan a tanúsítványokat az Azure Key Vaultban, és hogyan szúrhatja be azokat a virtuális gép üzembe helyezése során. A beépített tanúsítványokat tartalmazó egyéni rendszerképek használata helyett ez a folyamat biztosítja, hogy a legnaprakészebb tanúsítványok legyenek beszúrva a virtuális gépbe az első rendszerindításkor. A folyamat során a tanúsítvány egyszer sem hagyja el az Azure platformot, és nem jelenik meg a szkriptekben, a parancssori előzményekben és a sablonokban.

Az Azure Key Vault megvédi a titkosítási kulcsokat és titkos kódokat, például a tanúsítványokat és jelszavakat. A Key Vault leegyszerűsíti a kulcskezelési folyamatot, valamint lehetővé teszi az adatok titkosításához használt kulcsok feletti teljes körű felügyeletet. Ez a forgatókönyv bemutat néhány, a tanúsítványok létrehozásával és használatával kapcsolatos Key Vault-fogalmat, viszont nem nyújt teljes körű áttekintést a Key Vault használatáról.

A következő lépések bemutatják, hogyan végezheti el a következőket:

  • Azure Key Vault létrehozása;
  • tanúsítvány létrehozása vagy feltöltése a Key Vaultba;
  • Titkos kulcs létrehozása a tanúsítványból, majd beszúrása a virtuális gépbe
  • Virtuális gép létrehozása, és a tanúsítvány beszúrása

Azure Key Vault létrehozása;

Először hozzon létre egy Key Vaultot az az keyvault create paranccsal, és engedélyezze a használatát a virtuális gépek üzembe helyezésekor. Mindegyik Key Vaultnak egyedi névvel kell rendelkeznie, amely csak kisbetűkből állhat. Cserélje le a mykeyvault nevet a következő példában a saját egyedi Key Vault-névre:

keyvault_name=mykeyvault
az keyvault create \
    --resource-group myResourceGroupAutomate \
    --name $keyvault_name \
    --enabled-for-deployment

Tanúsítvány létrehozása és tárolása a Key Vaultban

Éles környezetben importálnia kell egy megbízható szolgáltató által aláírt érvényes tanúsítványt az az keyvault certificate import paranccsal. Ebben az oktatóanyagban a következő példa mutatja be, hogyan hozhat létre olyan önaláírt tanúsítványt az az keyvault certificate create paranccsal, amely az alapértelmezett tanúsítványszabályzatot használja:

az keyvault certificate create \
    --vault-name $keyvault_name \
    --name mycert \
    --policy "$(az keyvault certificate get-default-policy --output json)"

Tanúsítvány előkészítése virtuális géppel való használatra

Ha a virtuális gép létrehozása alatt szeretné használni a tanúsítványt, szerezze be a tanúsítvány azonosítóját az az keyvault secret list-versions paranccsal. A virtuális gép csak egy bizonyos formátumú tanúsítványt képes beszúrni a rendszerindításkor, ezért alakítsa át a tanúsítványt az az vm secret format paranccsal. A következő példa ezen parancsok kimenetét ezekhez változókhoz rendeli, hogy könnyen használhatók legyenek a következő lépésekben:

secret=$(az keyvault secret list-versions \
          --vault-name $keyvault_name \
          --name mycert \
          --query "[?attributes.enabled].id" --output tsv)
vm_secret=$(az vm secret format --secret "$secret" --output json)

Cloud-init konfiguráció létrehozása az NGINX védelméhez

Virtuális gép létrehozásakor a tanúsítványokat és a kulcsokat a védett /var/lib/waagent/ könyvtár tárolja. A tanúsítvány virtuális géphez való hozzáadásának automatizálásához és az NGINX konfigurálásához használhat egy frissített cloud-init konfigurációt az előző példából.

Hozzon létre egy cloud-init-secured.txt nevű fájlt, és illessze be a következő konfigurációt. Ha a Cloud Shell használja, ott hozza létre a cloud-init konfigurációs fájlt, és ne a helyi gépen. Írja be sensible-editor cloud-init-secured.txt például a fájlt a fájl létrehozásához, és tekintse meg az elérhető szerkesztők listáját. Ügyeljen arra, hogy megfelelően másolja ki a teljes cloud-init-fájlt, különösen az első sort:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
    path: /etc/nginx/sites-available/default
    defer: true
    content: |
      server {
        listen 80;
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/mycert.cert;
        ssl_certificate_key /etc/nginx/ssl/mycert.prv;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
    path: /home/azureuser/myapp/index.js
    defer: true
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - secretsname=$(find /var/lib/waagent/ -name "*.prv" | cut -c -57)
  - mkdir /etc/nginx/ssl
  - cp $secretsname.crt /etc/nginx/ssl/mycert.cert
  - cp $secretsname.prv /etc/nginx/ssl/mycert.prv
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

Biztonságos virtuális gép létrehozása

Most hozzon létre egy virtuális gépet az az vm create paranccsal. A tanúsítványadatokat a --secrets paraméterrel szúrhatja be a Key Vaultból. A cloud-init konfigurációt az előző példához hasonlóan itt is a --custom-data paraméterrel adhatja meg:

az vm create \
    --resource-group myResourceGroupAutomate \
    --name myVMWithCerts \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init-secured.txt \
    --secrets "$vm_secret"

A virtuális gép létrehozása, a csomagok telepítése és az alkalmazás elindítása néhány percig tart. Néhány háttérfeladat azután is tovább fut, hogy az Azure CLI visszairányítja Önt a parancssorhoz. Eltarthat még néhány percig, amíg hozzáférhet az alkalmazáshoz. A virtuális gép létrehozása után jegyezze fel az Azure CLI által megjelenített publicIpAddress értéket. Ezzel a címmel érheti el a Node.js-alkalmazást a webböngészőn keresztül.

Ahhoz, hogy a biztonságos webes adatforgalom elérje a virtuális gépét, nyissa meg az internetről a 443-as portot az az vm open-port paranccsal:

az vm open-port \
    --resource-group myResourceGroupAutomate \
    --name myVMWithCerts \
    --port 443

A biztonságos webalkalmazás tesztelése

Most megnyithat egy webböngészőt, és beírhatja https://< publicIpAddress> címet a címsorba. Adja meg a saját nyilvános IP-címét, amelyet az előző virtuálisgép-létrehozási folyamat kimeneteként kapott. Fogadja el a biztonsági figyelmeztetést, ha önaláírt tanúsítványt használt:

Webböngésző biztonsági figyelmeztetésének elfogadása

Ekkor a biztonságos NGINX-webhely és a Node.js-alkalmazás a következő példához hasonlóan jelennek meg:

Futó biztonságos NGINX-webhely megtekintése

Következő lépések

Ebben az oktatóanyagban virtuális gépeket konfigurált az első rendszerindításkor a cloud-init használatával. Megtanulta végrehajtani az alábbi műveleteket:

  • Cloud-init konfigurációs fájl létrehozása
  • Cloud-init-fájlt használó virtuális gép létrehozása
  • Futó Node.js-alkalmazás megtekintése a virtuális gép létrehozása után
  • A Key Vault használata a tanúsítványok biztonságos tárolására
  • Az NGINX biztonságos telepítéseinek automatizálása a cloud-init használatával

Folytassa a következő oktatóanyaggal, amelyből megtudhatja, hogyan hozhat létre egyéni virtuálisgép-rendszerképeket.