Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Začněte s Azure Linux s funkcí OS Guard a pomocí Azure CLI nasadíte hostitel kontejnerů OS Guard pro cluster AKS. Po instalaci požadavků nainstalujete rozšíření Azure CLI aks-Preview, zaregistrujete příznak funkce AzureLinuxOSGuardPreview, vytvoříte skupinu prostředků, vytvoříte cluster AKS, připojíte se ke clusteru a spustíte ukázkovou vícekontejnerovou aplikaci v clusteru.
Úvahy a omezení
Než začnete, projděte si následující aspekty a omezení pro Azure Linux s OS Guard (Preview):
- Pro Azure Linux s OS Guard se vyžaduje Kubernetes verze 1.32.0 nebo vyšší.
- Všechny image Azure Linuxu s OS Guard mají povolené Federal Information Process Standard (FIPS) a Trusted Launch.
- Azure CLI a šablony ARM jsou jedinými podporovanými metodami nasazení pro Azure Linux s OS Guard v AKS ve verzi Preview. PowerShell a Terraform se nepodporují.
- Obrazy Arm64 nejsou pro Azure Linux s OS Guard na AKS v režimu Preview podporovány.
-
NodeImageaNonejsou jedinými podporovanými kanály upgradu operačního systému pro Azure Linux s OS Guard v AKS.UnmanagedaSecurityPatchnejsou kompatibilní s Azure Linuxem s OS Guard z důvodu neměnného adresáře /usr. - Streamování artefaktů se nepodporuje.
- Pod Sandboxing není podporován.
- Důvěrné virtuální počítače (CVM) se nepodporují.
- Virtuální počítače Gen1 se nepodporují.
Požadavky
-
Pokud nemáte účet Azure, vytvořte si bezplatný účet před tím, než začnete.
Použijte prostředí Bash v Azure Cloud Shellu. Pro více informací si přečtěte Průvodce rychlým startem pro Azure Cloud Shell – Bash.
Pokud chcete spouštět referenční příkazy CLI lokálně, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Pro více informací, viz Jak spustit Azure CLI v Docker kontejneru.
- Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Chcete-li dokončit proces ověřování, postupujte podle kroků zobrazených ve vašem terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
- Když budete vyzváni, nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
- Spuštěním
az versionvyhledejte nainstalované verze a závislé knihovny. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Instalace rozšíření Azure CLI aks-Preview
Důležité
Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Ukázky jsou poskytovány "jak jsou" a "podle aktuální dostupnosti" a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Pokud chcete nainstalovat rozšíření aks-preview, spusťte následující příkaz:
az extension add --name aks-preview
Spuštěním následujícího příkazu aktualizujte nejnovější verzi vydaného rozšíření:
az extension update --name aks-preview
Zaregistrujte příznak funkce AzureLinuxOSGuardPreview
AzureLinuxOSGuardPreview Příznak funkce zaregistrujte pomocí příkazu az feature register, jak je znázorněno v následujícím příkladu:
az feature register --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"
Zobrazení stavu Zaregistrované trvá několik minut. Pomocí příkazu az feature show ověřte stav registrace.
az feature show --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"
Pokud se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí příkazu az provider register :
az provider register --namespace "Microsoft.ContainerService"
Vytvoření skupiny zdrojů
Skupina prostředků Azure je logická skupina, ve které se nasazují a spravují prostředky Azure. Při vytváření skupiny prostředků je nutné zadat umístění. Toto umístění je:
- Úložiště metadat pro skupinu prostředků.
- Pokud při vytváření prostředku nezadáte jinou oblast, budou se vaše prostředky spouštět v Azure.
Vytvořte skupinu prostředků pomocí příkazu az group create.
export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myAzureLinuxOSGuardResourceGroup$RANDOM_ID"
export REGION="westeurope"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
Výsledky:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$MY_RESOURCE_GROUP_NAMExxxxxx",
"location": "$REGION",
"managedBy": null,
"name": "$MY_RESOURCE_GROUP_NAME",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Vytvoření Azure Linuxu s clusterem OS Guard
Vytvořte cluster AKS pomocí az aks create příkazu s --os-sku parametrem pro zřízení clusteru AKS s imagí OS Guard v Azure Linuxu.
export MY_AZ_CLUSTER_NAME="myAzureLinuxOSGuardCluster$RANDOM_ID"
az aks create --name $MY_AZ_CLUSTER_NAME --resource-group $MY_RESOURCE_GROUP_NAME --os-sku AzureLinuxOSGuard --node-osdisk-type Managed --enable-fips-image --enable-secure-boot --enable-vtpm
Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.
Připojení ke clusteru
Ke správě clusteru Kubernetes použijte klienta kubectlpříkazového řádku Kubernetes.
kubectl už je nainstalovaný, pokud používáte Azure Cloud Shell. Pokud chcete nainstalovat kubectl místně, použijte az aks install-cli příkaz.
Nakonfigurujte
kubectlpro připojení ke svému Kubernetes clusteru pomocí příkazuaz aks get-credentials. Tento příkaz stahuje přihlašovací údaje a konfiguruje Kubernetes CLI pro jejich použití.az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AZ_CLUSTER_NAMEOvěřte připojení k vašemu clusteru pomocí příkazu
kubectl get. Tento příkaz vrátí seznam uzlů clusteru.kubectl get nodes
Nasazení aplikace
K nasazení aplikace použijete soubor manifestu k vytvoření všech objektů potřebných ke spuštění aplikace AKS Store. Soubor manifestu Kubernetes definuje požadovaný stav clusteru, například které image kontejneru se mají spustit. Manifest zahrnuje následující nasazení a služby Kubernetes:
- Store front: Webová aplikace pro zákazníky k zobrazení produktů a objednávání.
- Produktová služba: Zobrazuje informace o produktu.
- Služba objednávek: Vyřizuje objednávky.
- Rabbit MQ: Systém zpráv pro správu fronty objednávek.
Poznámka:
Nedoporučujeme spouštět stavové kontejnery, jako je Rabbit MQ, bez trvalého úložiště pro produkční prostředí. Tady se používají pro zjednodušení, ale doporučujeme používat spravované služby, jako je Azure Cosmos DB nebo Azure Service Bus.
Vytvořte soubor s názvem
aks-store-quickstart.yamla zkopírujte ho v následujícím manifestu:apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerPokud soubor YAML vytvoříte a uložíte místně, můžete soubor manifestu nahrát do výchozího adresáře v CloudShellu tak, že vyberete tlačítko Nahrát/Stáhnout soubory a vyberete soubor z místního systému souborů.
Nasaďte aplikaci pomocí
kubectl applypříkazu a zadejte název manifestu YAML.kubectl apply -f aks-store-quickstart.yaml
Testování aplikace
Aplikaci můžete ověřit tak, že navštívíte veřejnou IP adresu nebo adresu URL aplikace.
Adresu URL aplikace získejte pomocí následujících příkazů:
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "Service IP Address: $IP_ADDRESS"
break
else
sleep 10
fi
done
curl $IP_ADDRESS
Výsledky:
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/favicon.ico">
<title>store-front</title>
<script defer="defer" src="/js/chunk-vendors.df69ae47.js"></script>
<script defer="defer" src="/js/app.7e8cfbb2.js"></script>
<link href="/css/app.a5dc49f6.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
echo "You can now visit your web server at $IP_ADDRESS"
Odstranění clusteru
Pokud je už nepotřebujete, můžete vyčistit nepotřebné prostředky, abyste se vyhnuli poplatkům za Azure. Pomocí příkazu můžete odebrat skupinu prostředků, službu kontejneru a všechny související prostředky az group delete .
Další kroky
V tomto rychlém startu jste nasadili Azure Linux s clusterem OS Guard. Další informace o Azure Linuxu s OS Guard získáte v tutoriálu, kde si projdete kompletní příklad nasazení a správy clusteru. Pokračujte do tutoriálu Azure Linux s OS Guard.