共用方式為


快速入門:使用 ARM 範本部署 Azure Linux 作業系統的 OS Guard AKS 叢集(預覽)

使用 Azure Resource Manager (ARM) 範本,部署 Azure Linux 容器主機叢集,以開始使用 Azure Linux 容器主機。 安裝必要條件之後,您將安裝 aks-preview Azure CLI 延伸模組、註冊 AzureLinuxOSGuardPreview 功能旗標、建立 SSH 金鑰組、檢閱範本、部署範本並驗證它,然後部署應用程式。

Azure Resource Manager 範本是 JavaScript 物件表示法 (JSON) 檔案,可定義專案的基礎結構和組態。 範本使用宣告式語法。 您可以描述預期的部署,而不需要撰寫程式設計命令順序來建立部署。

考慮事項與限制條件

開始之前,請檢閱下列 Azure Linux with OS Guard (預覽) 的考量與限制:

  • 具有 OS Guard 的 Azure Linux 需要 Kubernetes 1.32.0 版或更新版本。
  • 所有 Azure Linux with OS Guard 映像都已啟用聯邦資訊處理標準 (FIPS)可信啟動
  • 在預覽階段中,Azure CLI 和 ARM 範本是唯一支援在 AKS 上部署 Azure Linux with OS Guard 的方法。 不支援 PowerShell 和 Terraform。
  • 在預覽階段中,Azure Linux with OS Guard 不支援 Arm64 映像在 AKS 上進行部署。
  • NodeImage ,並且 None 是 AKS 上具有 OS 防護的 Azure Linux 唯一支援的 OS 升級通道Unmanaged 而且 SecurityPatch 由於不可變的 /usr 目錄,因此與具有 OS Guard 的 Azure Linux 不相容。
  • 不支援工件串流
  • 不支援 Pod 沙箱
  • 不支援機密虛擬機器 (CVM)。
  • 不支援第 1 代虛擬機器 (VM)。

先決條件

  • 如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶

  • 使用 Azure Cloud Shell 中的 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 快速入門 - Bash

  • 若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱 如何在 Docker 容器中執行 Azure CLI

    • 如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入

    • 出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能

    • 執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade

  • 如果您尚未安裝 kubectl,請使用 az aks install-cli 或遵循上游指示,透過 Azure CLI 加以安裝。

  • 若要使用 Resource Manager 範本建立 AKS 叢集,您必須提供 SSH 公開金鑰。 如果您需要此資源,請參閱下一節;否則請跳至檢閱範本一節。

  • 您用來建立叢集的身分識別擁有適當的最低權限。 如需 AKS 存取和身分識別的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 的存取與身分識別選項

  • 若要部署 Bicep 檔案或 ARM 範本,您需要對要部署的資源具備寫入存取權,並且需要存取 Microsoft.Resources/deployments 資源類型上所有作業的權限。 例如,若要部署虛擬機器,您需要 Microsoft.Compute/virtualMachines/write 和 Microsoft.Resources/deployments/* 權限。 如需角色與權限的清單,請參閱 Azure 內建角色

安裝 aks-preview Azure CLI 延伸模組

這很重要

AKS 預覽功能可透過自助服務,以加入方式使用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

若要安裝 aks-preview 延伸模組,請執行下列命令:

az extension add --name aks-preview

執行下列命令,以更新為發行的最新版延伸模組:

az extension update --name aks-preview

註冊 AzureLinuxOSGuardPreview 功能旗標

AzureLinuxOSGuardPreview使用 [az feature register][az-feature-register] 命令註冊功能旗標,如下列範例所示:

az feature register --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"

狀態需要幾分鐘的時間才會顯示「已註冊」。 使用 [az feature show][az-feature-show] 命令來驗證註冊狀態:

az feature show --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"

當狀態顯示為 已註冊時,請使用 [az provider register][az-provider-register] 命令更新 Microsoft.ContainerService 資源提供者的註冊:

az provider register --namespace "Microsoft.ContainerService"

建立 SSH 金鑰組

若要存取 AKS 節點,您可以使用 SSH 金鑰組 (公用和私人) 進行連線,您可以使用 ssh-keygen 命令產生該金鑰組。 根據預設,這些檔案會建立在 ~/.ssh 目錄中。 執行 ssh-keygen 命令會覆寫任何指定位置中已經存在相同名稱的 SSH 金鑰組。

  1. 移至 https://shell.azure.com,並在瀏覽器中開啟 Cloud Shell。

  2. 執行 ssh-keygen 命令。 下列命令會使用 RSA 加密建立 SSH 金鑰組,位元長度為 4096:

    ssh-keygen -t rsa -b 4096
    

如需建立 SSH 金鑰的詳細資訊,請參閱在 Azure 中建立及管理驗證的 SSH 金鑰

檢閱範本

下列部署使用來自 Azure 快速入門範本的 ARM 範本。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
        "clusterName": {
            "defaultValue": "osguardakscluster",
            "type": "String",
            "metadata": {
                "description": "The name of the Managed Cluster resource."
            }
        },
        "location": {
            "defaultValue": "[resourceGroup().location]",
            "type": "String",
            "metadata": {
                "description": "The location of the Managed Cluster resource."
            }
        },
        "dnsPrefix": {
            "type": "String",
            "metadata": {
                "description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
            }
        },
        "agentCount": {
            "defaultValue": 3,
            "minValue": 1,
            "maxValue": 50,
            "type": "Int",
            "metadata": {
                "description": "The number of nodes for the cluster."
            }
        },
        "agentVMSize": {
            "defaultValue": "Standard_DS2_v2",
            "type": "String",
            "metadata": {
                "description": "The size of the Virtual Machine."
            }
        },
        "osSKU": {
            "defaultValue": "AzureLinuxOSGuard",
            "allowedValues": [
                "AzureLinuxOSGuard",
                "AzureLinux3OSGuard"
            ],
            "type": "String",
            "metadata": {
                "description": "The Linux SKU to use."
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.ContainerService/managedClusters",
            "apiVersion": "2025-05-01",
            "name": "[parameters('clusterName')]",
            "location": "[parameters('location')]",
            "identity": {
                "type": "SystemAssigned"
            },
            "properties": {
                "dnsPrefix": "[parameters('dnsPrefix')]",
                "agentPoolProfiles": [
                    {
                        "name": "agentpool",
                        "mode": "System",
                        "count": "[parameters('agentCount')]",
                        "vmSize": "[parameters('agentVMSize')]",
                        "osType": "Linux",
                        "osSKU": "[parameters('osSKU')]",
                        "osDiskType": "Managed",
                        "enableFIPS": true,
                        "securityProfile": {
                            "enableSecureBoot": true,
                            "enableVTPM": true
                        },
                    }
                ]
            }
        }
    ],
    "outputs": {
        "controlPlaneFQDN": {
            "type": "String",
            "value": "[reference(parameters('clusterName')).fqdn]"
        }
    }
}

若要將具有 OS Guard 的 Azure Linux 新增至現有的 ARM 範本,您必須新增:

  • "osSKU": "AzureLinuxOSGuard"
  • "mode": "System"agentPoolProfiles
  • "osDiskType": "Managed"agentPoolProfiles
  • "enableFIPS": trueagentPoolProfiles
  • "securityProfile": {enableSecureBoot: true enableVTPM: true}agentPoolProfiles
  • 將 apiVersion 設定為 2025-05-01 或更新版本 ("apiVersion": "2025-05-01")。

部署範本

  1. 選取下列按鈕來登入 Azure 並開啟範本。

    將 Resource Manager 範本部署至 Azure 的按鈕。

  2. 選取或輸入下列值。

    在本快速入門中,請保留 [OS 磁碟大小 GB]、[代理程式計數]、[代理程式 VM 大小]、[OS 類型] 和 [Kubernetes 版本] 的預設值。 請針對下列範本參數提供您自己的值︰

    • 訂用帳戶:選取 Azure 訂用帳戶。
    • 資源群組:選取 [新建]。 輸入資源群組的唯一名稱,例如 testAzureLinuxOSGuardResourceGroup,然後選擇 [確定]。
    • 位置:選取一個位置,例如 [美國東部]
    • 叢集名稱:輸入 AKS 叢集的唯一名稱,例如 testAzureLinuxOSGuardCluster
    • DNS 前置詞:輸入叢集的唯一 DNS 前置詞,例如 myAzureLinuxOSGuardCluster
    • Linux 管理員使用者名稱:輸入使用 SSH 連線的使用者名稱,例如 azureUser
    • SSH RSA 公開金鑰:複製並貼上 SSH 金鑰組的公開部分 (根據預設,為~/.ssh/id_rsa.pub內容)。
  3. 選取檢閱 + 建立

建立具有 OS Guard 叢集的 Azure Linux 需要幾分鐘的時間。 請等到叢集成功部署後,再移至下一個步驟。

驗證部署

連接至叢集

若要管理 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端 kubectl

  1. 使用 kubectl 命令在本機安裝 az aks install-cli

    az aks install-cli
    
  2. 使用 kubectl 命令,設定 az aks get-credentials 連線到 Kubernetes 叢集。 此命令會下載認證,並設定 Kubernetes CLI 來使用這些認證。

    az aks get-credentials --resource-group testAzureLinuxOSGuardResourceGroup --name testAzureLinuxCluster
    
  3. 使用 kubectl get 命令確認叢集的連線。 此命令會傳回叢集節點的清單。

    kubectl get nodes
    

    下列輸出範例會顯示上一個步驟中建立的三個節點。 確定節點的狀態為就緒

    NAME                       STATUS   ROLES   AGE     VERSION
    aks-agentpool-41324942-0   Ready    agent   6m44s   v1.12.6
    aks-agentpool-41324942-1   Ready    agent   6m46s   v1.12.6
    aks-agentpool-41324942-2   Ready    agent   6m45s   v1.12.6
    

部署應用程式

Kubernetes 資訊清單檔會定義叢集所需的狀態,例如要執行哪些容器映像。

在本快速入門中,您可以使用資訊清單,建立執行 Azure Vote 應用程式所需的所有物件。 此資訊清單包含兩個 Kubernetes 部署:

  • 範例 Azure Vote Python 應用程式。
  • Redis 執行個體。

也會建立兩個 Kubernetes 服務:

  • Redis 執行個體的內部服務。
  • 從網際網路存取 Azure Vote 應用程式的外部服務。
  1. 建立名為 azure-vote.yaml 的檔案。

    • 如果您使用 Azure Cloud Shell,可以使用 codevinano 建立這個檔案,猶如使用虛擬或實體系統
  2. 將下列 YAML 定義複製到其中:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: azure-vote-back
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: azure-vote-back
      template:
        metadata:
          labels:
            app: azure-vote-back
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-back
            image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
            env:
            - name: ALLOW_EMPTY_PASSWORD
              value: "yes"
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            ports:
            - containerPort: 6379
              name: redis
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: azure-vote-back
    spec:
      ports:
      - port: 6379
      selector:
        app: azure-vote-back
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: azure-vote-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: azure-vote-front
      template:
        metadata:
          labels:
            app: azure-vote-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-front
            image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            ports:
            - containerPort: 80
            env:
            - name: REDIS
              value: "azure-vote-back"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: azure-vote-front
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-vote-front
    

    如需 YAML 資訊清單檔案的詳細資訊,請參閱部署和 YAML 資訊清單

  3. 使用 kubectl apply 命令來部署應用程式並指定 YAML 資訊清單的名稱:

    kubectl apply -f azure-vote.yaml
    

    下列範例類似於輸出,顯示已成功建立部署和服務:

    deployment "azure-vote-back" created
    service "azure-vote-back" created
    deployment "azure-vote-front" created
    service "azure-vote-front" created
    

測試應用程式

當應用程式執行時,Kubernetes 服務會將應用程式前端公開至網際網路。 此程序可能需要幾分鐘才能完成。

使用 kubectl get service 命令搭配 --watch 引數來監視進度。

kubectl get service azure-vote-front --watch

服務的 azure-vote-front 輸出一開始會顯示為擱置

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   <pending>     80:30572/TCP   6s

EXTERNAL-IP 位址從暫止變成實際的公用 IP 位址時,請使用 CTRL-C 停止 kubectl 監看處理程序。 下列範例輸出顯示指派給服務的有效公用 IP 位址:

azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

若要查看作用中的 Azure 投票應用程式,請開啟網頁瀏覽器連至服務的外部 IP 位址。

瀏覽至 Azure 投票範例應用程式的螢幕擷取畫面。

刪除叢集

如果您不打算繼續執行下列教學課程,為避免 Azure 費用,請清除任何不必要的資源。 使用 az group delete 命令,以移除資源群組和所有相關資源。

az group delete --name testAzureLinuxOSGuardCluster --yes --no-wait

後續步驟

在本快速入門中,您已部署具有 OS Guard 叢集的 Azure Linux。 若要深入瞭解 Azure Linux 搭配 OS 保全,並逐步解說完整的叢集部署和管理範例,請繼續閱讀 Azure Linux 搭配 OS 保全教學課程。