搭配 Azure Container Apps 環境使用私人端點 (預覽)
在本文中,您將瞭解如何使用私人端點安全地存取 Azure Container App,而不需將其公開至公用因特網。
私人端點會使用虛擬網路 (VNet) 的私人IP位址。 此端點會私下且安全地連線至由 Azure Private Link 提供的服務。
Azure Container Apps 上的私人端點僅支援輸入 HTTP 流量。 不支援 TCP 流量。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。
- 如果您沒有,可以免費建立一個。
建立容器應用程式
登入 Azure 入口網站後即可開始。
在頂端搜尋列中搜尋容器應用程式。
在搜尋結果中選取容器應用程式。
選取建立按鈕。
在 [基本] 索引標籤的 [建立容器應用程式] 頁面中,輸入下列值。
設定 動作 訂用帳戶 選取 Azure 訂閱。 資源群組 選取 [新建],然後輸入 my-container-apps。 容器應用程式名稱 輸入 my-container-app。 部署來源 選取 [容器映像]。 區域 選取 [美國中部]。 在 [ 建立容器應用程式環境] 字段中,選取 [ 建立新 連結]。
在 [基本] 索引標籤的 [建立容器應用程式環境] 頁面中,輸如下列值:
設定 值 環境名稱 輸入 my-environment。 區域備援 選取 [停用] 選取 [ 網络] 索引 標籤以建立虛擬網路 (VNet)。 根據預設,會啟用公用網路存取,這表示已停用私人端點。
停用公用網路存取。
將 [使用您自己的虛擬網络] 保留為 [否]。 您可以使用現有的 VNet,但只有工作負載配置文件環境才支援私人端點,其需要最小 CIDR 範圍
/27
或更大的子網。 若要深入了解子網路大小調整,請參閱網路結構概觀 (部分機器翻譯)。將 [啟用私人端點] 設定為 [是]。
將私人端點名稱設定為 my-private-endpoint。
在 [ 私人端點虛擬網络 ] 字段中,選取 [ 建立新 連結]。
在 [建立 虛擬網絡] 頁面中,將 虛擬網絡 設定為 my-private-endpoint-vnet。 選取 [確定]。
在 [ 私人端點虛擬網络子網 ] 字段中,選取 [ 建立新 連結]。
在 [建立子網] 頁面中,將 [子網名稱] 設定為 my-private-endpoint-vnet-subnet。 選取 [確定]。
將 DNS 設定為 Azure 私用 DNS 區域。
選取 建立。
在 [基本] 索引標籤的 [建立容器應用程式] 頁面上,選取 [下一步:容器>]。
在 [容器] 索引標籤的 [建立容器應用程式] 頁面中,選取 [使用快速入門映射]。
選取頁面底部的 [檢閱和建立]。
如果沒有找到任何錯誤,即會啟用 [建立] 按鈕。
如果發生錯誤,則包含錯誤的任何索引標籤都會以紅點標示。 瀏覽至適當的索引標籤。含有錯誤的欄位會以紅色醒目提示。 修正所有錯誤之後,請再次選取 [檢閱及建立]。
選取 建立。
即會顯示含有「部署正在進行中」訊息的頁面。 部署成功完成之後,您會看到訊息:「您的部署已完成」。
當您瀏覽至容器應用程式端點時,您會收到
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 工作區。
建立 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
建立子網以與 VNet 建立關聯,並包含私人端點。
az network vnet subnet create \ --resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --address-prefixes 10.0.0.0/21
擷取子網標識碼。 您可以使用此專案來建立私人端點。
SUBNET_ID=$(az network vnet subnet show \ --resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --query "id" \ --output tsv)
建立環境
使用上述步驟中部署的 VNet 建立 Container Apps 環境。 私人端點僅受工作負載配置文件環境支援,這是新環境的默認類型。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
擷取環境標識碼。 您可以使用此選項來設定環境。
ENVIRONMENT_ID=$(az containerapp env show \ --resource-group $RESOURCE_GROUP \ --name $ENVIRONMENT_NAME \ --query "id" \ --output tsv)
停用環境的公用網路存取。 這是啟用私人端點的必要專案。
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 區域
擷取私人端點 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)
擷取環境預設網域。 您可以使用此選項,將 DNS 記錄新增至私人 DNS 區域。
DNS_RECORD_NAME=$(az containerapp env show \ --id $ENVIRONMENT_ID \ --query 'properties.defaultDomain' \ --output tsv | sed 's/\..*//')
建立私人 DNS 區域。
az network private-dns zone create \ --resource-group $RESOURCE_GROUP \ --name $PRIVATE_DNS_ZONE
建立 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
將私人端點的記錄新增至私人 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 入口網站後即可開始。
在頂端搜尋列中搜尋 虛擬機 。
在搜尋結果中,選取 [虛擬機器]。
選取 建立。
在 [基本] 索引標籤上的 [建立虛擬機] 頁面中,輸入下列值。
設定 動作 訂用帳戶 選取 Azure 訂閱。 資源群組 選取 my-container-apps。 虛擬機器名稱 輸入 azurevm。 區域 選取 [美國中部]。 可用性選項 選取 [不需要基礎結構備援]。 安全性類型 選取 [標準]。 映像 選取 [Windows Server 2022 Datacenter:Azure Edition - x64 Gen2]。 使用者名稱 輸入 azureuser。 密碼 輸入密碼。 確認密碼 再次輸入密碼。 公用輸入連接埠 選取 [無]。 在 [ 網络] 索引標籤中 ,輸入下列值。
設定 動作 虛擬網路 選取 my-private-endpoint-vnet。 子網路 選取 my-private-endpoint-vnet-subnet (10.0.0.0/23)。 公用 IP 選取 [無]。 NIC 網路安全性群組 選取進階。 選取 [檢閱 + 建立] 。
選取 建立。
設定環境變數
設定下列環境變數。
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 個特殊字元。
測試連線
登入 Azure 入口網站後即可開始。
搜尋您在頂端搜尋列中建立的 VM,並從搜尋結果中選取它。
在 VM 的 [ 概觀 ] 頁面中,選取 [ 連線],然後選取 [ 透過 Bastion 連線]。
在 [Bastion ] 頁面中,選取 [ 部署 Bastion]。
將 [使用者名稱和 VM 密碼] 設定為您建立 VM 時所使用的使用者名稱和密碼。
選取 Connect。
線上之後,請在 VM 中執行 PowerShell。
在 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>
在 VM 中開啟瀏覽器。
流覽至容器應用程式端點。 您會看到快速入門容器應用程式映像的輸出。
清除資源
如果您不打算繼續使用此應用程式,可以移除 my-container-apps 資源群組。 這會刪除 Azure 容器應用程式執行個體和所有相關聯的服務。 也會刪除容器應用程式服務自動建立,且其中包含自訂網路元件的資源群組。
警告
下列命令會刪除指定的資源群組和其中包含的所有資源。 如果本指南範圍以外的資源存在於指定的資源群組中,則也會一併刪除。
az group delete --name $RESOURCE_GROUP