共用方式為


搭配 Azure Container Apps 環境使用私人端點 (預覽)

在本文中,您將瞭解如何使用私人端點安全地存取 Azure Container App,而不需將其公開至公用因特網。

私人端點會使用虛擬網路 (VNet) 的私人IP位址。 此端點會私下且安全地連線至由 Azure Private Link 提供的服務。

Azure Container Apps 上的私人端點僅支援輸入 HTTP 流量。 不支援 TCP 流量。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。

建立容器應用程式

登入 Azure 入口網站後即可開始。

  1. 在頂端搜尋列中搜尋容器應用程式

  2. 在搜尋結果中選取容器應用程式

  3. 選取建立按鈕。

  4. 在 [基本] 索引標籤的 [建立容器應用程式] 頁面中,輸入下列值。

    設定 動作
    訂用帳戶 選取 Azure 訂閱。
    資源群組 選取 [新建],然後輸入 my-container-apps
    容器應用程式名稱 輸入 my-container-app
    部署來源 選取 [容器映像]
    區域 選取 [美國中部]
  5. 在 [ 建立容器應用程式環境] 字段中,選取 [ 建立新 連結]。

  6. 在 [基本] 索引標籤的 [建立容器應用程式環境] 頁面中,輸如下列值:

    設定
    環境名稱 輸入 my-environment
    區域備援 選取 [停用]
  7. 選取 [ 網络] 索引 標籤以建立虛擬網路 (VNet)。 根據預設,會啟用公用網路存取,這表示已停用私人端點。

  8. 停用公用網路存取。

  9. 將 [使用您自己的虛擬網络] 保留為 []。 您可以使用現有的 VNet,但只有工作負載配置文件環境才支援私人端點,其需要最小 CIDR 範圍 /27 或更大的子網。 若要深入了解子網路大小調整,請參閱網路結構概觀 (部分機器翻譯)。

  10. 將 [啟用私人端點] 設定為 []。

  11. 將私人端點名稱設定my-private-endpoint

  12. 在 [ 私人端點虛擬網络 ] 字段中,選取 [ 建立新 連結]。

  13. 在 [建立 虛擬網絡] 頁面中,將 虛擬網絡 設定my-private-endpoint-vnet。 選取 [確定]。

  14. 在 [ 私人端點虛擬網络子網 ] 字段中,選取 [ 建立新 連結]。

  15. 在 [建立子網] 頁面中,將 [子網名稱] 設定my-private-endpoint-vnet-subnet。 選取 [確定]。

  16. DNS 設定為 Azure 私用 DNS 區域

  17. 選取 建立

  18. 在 [基本] 索引標籤的 [建立容器應用程式] 頁面上,選取 [下一步:容器>]。

  19. 在 [容器] 索引標籤的 [建立容器應用程式] 頁面中,選取 [使用快速入門映射]。

  20. 選取頁面底部的 [檢閱和建立]

    如果沒有找到任何錯誤,即會啟用 [建立] 按鈕。

    如果發生錯誤,則包含錯誤的任何索引標籤都會以紅點標示。 瀏覽至適當的索引標籤。含有錯誤的欄位會以紅色醒目提示。 修正所有錯誤之後,請再次選取 [檢閱及建立]

  21. 選取 建立

    即會顯示含有「部署正在進行中」訊息的頁面。 部署成功完成之後,您會看到訊息:「您的部署已完成」

    當您瀏覽至容器應用程式端點時,您會收到 ERR_CONNECTION_CLOSED 因為容器應用程式環境已停用公用存取。 相反地,您會使用私人端點存取容器應用程式。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。

  • 最新版的 Azure CLI。 若要確保您執行最新版本,請執行下列命令。

    az upgrade
    
  • Azure CLI 最新版的 Azure Container Apps 擴充功能。 若要確保您執行最新版本,請執行下列命令。

    az extension add --name containerapp --upgrade --allow-preview true
    

    注意

    從 2024 年 5 月開始,Azure CLI 延伸模組預設不會再啟用預覽功能。 若要存取容器應用程式預覽功能,請使用 --allow-preview true 安裝容器應用程式延伸模組。

如需必要條件和設定的詳細資訊,請參閱 快速入門:使用 containerapp up 部署您的第一個容器應用程式。

設定環境變數

設定下列環境變數。

RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
ENVIRONMENT_NAME="my-environment"
CONTAINERAPP_NAME="my-container-app"
VNET_NAME="my-custom-vnet"
SUBNET_NAME="my-custom-subnet"
PRIVATE_ENDPOINT="my-private-endpoint"
PRIVATE_ENDPOINT_CONNECTION="my-private-endpoint-connection"
PRIVATE_DNS_ZONE="privatelink.${LOCATION}.azurecontainerapps.io"
DNS_LINK="my-dns-link"

建立 Azure 資源群組

建立資源群組,以組織與容器應用程式部署相關的服務。

az group create \
    --name $RESOURCE_GROUP \
    --location $LOCATION

建立虛擬網路

Azure 容器應用程式中的環境會在容器應用程式群組周圍建立安全界限。 部署至相同環境的容器應用程式會部署在相同的虛擬網路中,並將記錄寫入相同的 Log Analytics 工作區。

  1. 建立 Azure 虛擬網路 (VNet) 以與 Container Apps 環境產生關聯。 VNet 必須有可用於環境部署的子網。 您可以使用現有的 VNet,但只有工作負載配置文件環境才支援私人端點,其需要最小 CIDR 範圍 /27 或更大的子網。 若要深入了解子網路大小調整,請參閱網路結構概觀 (部分機器翻譯)。

    az network vnet create \
        --resource-group $RESOURCE_GROUP \
        --name $VNET_NAME \
        --location $LOCATION \
        --address-prefix 10.0.0.0/16
    
  2. 建立子網以與 VNet 建立關聯,並包含私人端點。

    az network vnet subnet create \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 10.0.0.0/21
    
  3. 擷取子網標識碼。 您可以使用此專案來建立私人端點。

    SUBNET_ID=$(az network vnet subnet show \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --query "id" \
        --output tsv)
    

建立環境

  1. 使用上述步驟中部署的 VNet 建立 Container Apps 環境。 私人端點僅受工作負載配置文件環境支援,這是新環境的默認類型。

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    
  2. 擷取環境標識碼。 您可以使用此選項來設定環境。

    ENVIRONMENT_ID=$(az containerapp env show \
        --resource-group $RESOURCE_GROUP \
        --name $ENVIRONMENT_NAME \
        --query "id" \
        --output tsv)
    
  3. 停用環境的公用網路存取。 這是啟用私人端點的必要專案。

    az containerapp env update \
        --id $ENVIRONMENT_ID \
        --public-network-access Disabled
    

建立私人端點

在您先前建立的環境和子網中建立私人端點。

az network private-endpoint create \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --name $PRIVATE_ENDPOINT \
    --subnet $SUBNET_ID \
    --private-connection-resource-id $ENVIRONMENT_ID \
    --connection-name $PRIVATE_ENDPOINT_CONNECTION \
    --group-id managedEnvironments

設定私人 DNS 區域

  1. 擷取私人端點 IP 位址。 您可以使用此選項,將 DNS 記錄新增至私人 DNS 區域。

    PRIVATE_ENDPOINT_IP_ADDRESS=$(az network private-endpoint show \
        --name $PRIVATE_ENDPOINT \
        --resource-group $RESOURCE_GROUP \
        --query 'customDnsConfigs[0].ipAddresses[0]' \
        --output tsv)
    
  2. 擷取環境預設網域。 您可以使用此選項,將 DNS 記錄新增至私人 DNS 區域。

    DNS_RECORD_NAME=$(az containerapp env show \
        --id $ENVIRONMENT_ID \
        --query 'properties.defaultDomain' \
        --output tsv | sed 's/\..*//')
    
  3. 建立私人 DNS 區域。

    az network private-dns zone create \
        --resource-group $RESOURCE_GROUP \
        --name $PRIVATE_DNS_ZONE
    
  4. 建立 VNet 與私人 DNS 區域之間的連結。

    az network private-dns link vnet create \
        --resource-group $RESOURCE_GROUP \
        --zone-name $PRIVATE_DNS_ZONE \
        --name $DNS_LINK \
        --virtual-network $VNET_NAME \
        --registration-enabled false
    
  5. 將私人端點的記錄新增至私人 DNS 區域。

    az network private-dns record-set a add-record \
        --resource-group $RESOURCE_GROUP \
        --zone-name $PRIVATE_DNS_ZONE \
        --record-set-name $DNS_RECORD_NAME \
        --ipv4-address $PRIVATE_ENDPOINT_IP_ADDRESS
    

部署容器應用程式

在您的環境中部署容器應用程式。 此容器應用程式只會使用快速入門映像。

當您瀏覽至容器應用程式端點時,您會收到 ERR_CONNECTION_CLOSED 因為容器應用程式環境已停用公用存取。 相反地,您會使用私人端點存取容器應用程式。

az containerapp up \
    --name $CONTAINERAPP_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --environment $ENVIRONMENT_NAME \
    --image mcr.microsoft.com/k8se/quickstart:latest \
    --target-port 80 \
    --ingress external \
    --query properties.configuration.ingress.fqdn

確認私人端點連線

在本節中,您會建立與 VNet 相關聯的虛擬機,以便存取您使用私人端點定義的容器應用程式。

建立虛擬機器 (VM)

登入 Azure 入口網站後即可開始。

  1. 在頂端搜尋列中搜尋 虛擬機

  2. 在搜尋結果中,選取 [虛擬機器]。

  3. 選取 建立

  4. 在 [基本] 索引標籤上的 [建立虛擬機] 頁面中,輸入下列值。

    設定 動作
    訂用帳戶 選取 Azure 訂閱。
    資源群組 選取 my-container-apps
    虛擬機器名稱 輸入 azurevm
    區域 選取 [美國中部]
    可用性選項 選取 [不需要基礎結構備援]
    安全性類型 選取 [標準]。
    映像 選取 [Windows Server 2022 Datacenter:Azure Edition - x64 Gen2]。
    使用者名稱 輸入 azureuser
    密碼 輸入密碼。
    確認密碼 再次輸入密碼。
    公用輸入連接埠 選取 [無]。
  5. 在 [ 網络] 索引標籤中 ,輸入下列值。

    設定 動作
    虛擬網路 選取 my-private-endpoint-vnet
    子網路 選取 my-private-endpoint-vnet-subnet (10.0.0.0/23)。
    公用 IP 選取 [無]。
    NIC 網路安全性群組 選取進階
  6. 選取 [檢閱 + 建立] 。

  7. 選取 建立

設定環境變數

設定下列環境變數。

VM_NAME="azurevm"
VM_ADMIN_USERNAME="azureuser"

建立虛擬機器 (VM)

執行下列命令。

az vm create \
    --resource-group $RESOURCE_GROUP \
    --name $VM_NAME \
    --image Win2022Datacenter \
    --public-ip-address "" \
    --vnet-name $VNET_NAME \
    --subnet $SUBNET_NAME \
    --admin-username $VM_ADMIN_USERNAME

執行此命令之後,系統會提示您輸入 VM 的系統管理員密碼。

系統管理員用戶名稱長度必須介於 1 到 20 個字元之間。

系統管理員密碼具有下列需求:

  • 長度必須介於 12 到 123 個字元之間。
  • 必須有下列 3 個:1 個小寫字元、1 個大寫字元、1 個數位和 1 個特殊字元。

測試連線

  1. 登入 Azure 入口網站後即可開始。

  2. 搜尋您在頂端搜尋列中建立的 VM,並從搜尋結果中選取它。

  3. 在 VM 的 [ 概觀 ] 頁面中,選取 [ 連線],然後選取 [ 透過 Bastion 連線]。

  4. [Bastion ] 頁面中,選取 [ 部署 Bastion]。

  5. 將 [使用者名稱和 VM 密碼] 設定為您建立 VM 時所使用的使用者名稱和密碼。

  6. 選取 Connect

  7. 線上之後,請在 VM 中執行 PowerShell。

  8. 在 PowerShell 中,執行下列命令。 將 <PLACEHOLDERS> 取代為您的值。

    nslookup <CONTAINER_APP_ENDPOINT>
    

    輸出與下列範例類似,您的值會取代 <PLACEHOLDERS>。

    Server:  UnKnown
    Address:  168.63.129.16
    
    Non-authoritative answer:
    Name:    <ENVIRONMENT_DEFAULT_DOMAIN>.privatelink.<LOCATION>.azurecontainerapps.io
    
    Address:  10.0.0.4
    Aliases:  <CONTAINER_APP_ENDPOINT>
    
  9. 在 VM 中開啟瀏覽器。

  10. 流覽至容器應用程式端點。 您會看到快速入門容器應用程式映像的輸出。

清除資源

如果您不打算繼續使用此應用程式,可以移除 my-container-apps 資源群組。 這會刪除 Azure 容器應用程式執行個體和所有相關聯的服務。 也會刪除容器應用程式服務自動建立,且其中包含自訂網路元件的資源群組。

警告

下列命令會刪除指定的資源群組和其中包含的所有資源。 如果本指南範圍以外的資源存在於指定的資源群組中,則也會一併刪除。

az group delete --name $RESOURCE_GROUP