將網路輸入 Azure 容器應用程式環境
Azure 容器應用程式會在虛擬網路 (VNet) 所支援的環境內容中執行。
根據預設,容器應用程式環境會使用自動為您產生的 VNet 來建立。 若要進一步控制網路,您可以在建立環境時提供現有的 VNet。 建立具有已產生或現有 VNet 的環境後,便無法變更網路類型。
產生的 VNet 會採用下列特性。
畫面如下:
- 由於已在 Microsoft 租用戶中建立這些特性,因此您無法進行存取
- 透過網際網路公開存取
- 只能連線到網際網路可存取的端點
此外,只支援有限的網路功能子集,例如輸入 IP 限制和容器應用程式層級輸入控制。
如果您需要更多 Azure 網路功能,請使用現有的 VNet,例如:
- 與應用程式閘道器整合
- 網路安全性群組
- 與虛擬網路中私人端點後方的資源通訊
可用的 VNet 功能取決於您的環境選擇。
環境選擇
容器應用程式有兩種不同的環境類型,其中有許多相同的網路特性有一些主要差異。
環境類型 | 描述 | 支援的計劃類型 |
---|---|---|
工作負載設定檔 | 支援使用者定義的路由(UDR)和透過 NAT 閘道器的輸出。 所需的子網路大小下限為 /27 。 |
使用量、專用 |
僅耗用量 | 不支援使用者定義的路由 (UDR)、透過 NAT 閘道器輸出、透過遠端閘道對等窺視或其他自訂輸出。 所需的子網路大小下限為 /23 。 |
耗用 |
協助工具層次
您可以設定容器應用程式是否允許公用輸入,或只允許從環境層級的 VNet 內輸入。
存取範圍層次 | 描述 |
---|---|
外部 | 可讓您的容器應用程式接受公用要求。 外部環境會使用位於外部的對外公開 IP 位址上的虛擬 IP 進行部署。 |
內部 | 內部環境沒有公開端點,且使用對應至內部 IP 位址的虛擬 IP (VIP) 進行部署。 內部端點是 Azure 內部負載平衡器 (ILB),IP 位址則會從私人 IP 位址的自訂 VNet 清單發出。 |
自訂 VNet 設定
當您建立自訂 VNet 時,請記住下列情況:
如果您想要讓容器應用程式限制所有外部存取,請建立內部容器應用程式環境。
當您提供自己的 VNet 時,您需要提供專門用於部署容器應用程式環境的子網路。 此子網路無法供其他服務使用。
網路位址會從您建立環境時所定義的子網路範圍來指派。
您可以定義容器應用程式環境所使用的子網路範圍。
您可以將環境部署為內部,將環境的輸入要求限制為專門限制在 VNet。
注意
提供自己的虛擬網路時,將會建立其他受控資源。 這些資源會以相關的費率產生成本。
當您開始設計容器應用程式周圍的網路時,請參閱規劃虛擬網路。
注意
如果容器應用程式環境正在使用 VNet,則不支援在不同資源群組或訂用帳戶之間移動 VNet。
HTTP 邊緣 Proxy 行為
Azure 容器應用程式使用 Envoy Proxy 作為邊緣 HTTP Proxy。 傳輸層安全性 (TLS) 會在邊緣終止,要求則會根據其流量分割規則路由傳送,並將流量路由傳送至正確的應用程式。
HTTP 應用程式會根據 HTTP 要求和連線的數目進行縮放。 Envoy 會在叢集內部路由傳送內部流量。
下游連線支援 HTTP1.1 和 HTTP2,Envoy 則會在用戶端連線需要升級時自動偵測並升級連線。
藉由在輸入物件上設定 transport
屬性,即可定義上游連線。
輸入設定
在輸入區段下,您可以進行下列設定:
存取範圍層次:您可以將容器應用程式設定為可在環境外部或內部進行存取。 環境變數
CONTAINER_APP_ENV_DNS_SUFFIX
用來自動解析環境的完整網域名稱 (FQDN) 後綴。 在相同環境內的容器應用程式之間進行通訊時,您也可以使用應用程式名稱。 如需如何存取應用程式的詳細資訊,請參閱 Azure Container Apps 中的輸入 (部分機器翻譯)。流量分割規則:您可以在應用程式的不同修訂之間定義流量分割規則。 如需詳細資訊,請參閱流量分割。
如需不同網路情節的詳細資訊,請參閱 Azure Container Apps 中的輸入 (部分機器翻譯)。
入口網站相依性
Azure 容器應用程式中的每個應用程式都有兩個 URL。
容器應用程式執行時間最初會產生用來存取應用程式的完整網域名稱 (FQDN)。 如需容器應用程式的 FQDN,請在 Azure 入口網站中查看容器應用程式「概觀」視窗中的應用程式 URL。
這也會為您產生第二個 URL。 此位置授予記錄串流服務和控制台的存取權。 如有必要,您可能需要將 https://azurecontainerapps.dev/
新增至防火牆或 Proxy 的允許清單。
連接埠和 IP 位址
下列連接埠會公開給輸入連線使用。
通訊協定 | 連接埠 |
---|---|
HTTP/HTTPS | 80、443 |
IP 位址分成下列類型:
類型 | 描述 |
---|---|
公用輸入 IP 位址 | 這會用於外部部署中的應用程式流量,以及內部和外部部署中的管理流量。 |
輸出公用 IP | 作為離開虛擬網路的輸出連線所用的「來源」IP。 這些連線不會透過 VPN 路由傳送。 輸出 IP 可能隨時間而改變。 只有在工作負載設定檔環境中,才支援使用 NAT 閘道器或其他來自容器應用程式環境的輸出流量 Proxy。 |
內部負載平衡器 IP 位址 | 此位址只位於內部環境中。 |
子網路
虛擬網路整合取決於專用子網路。 在子網路中分配 IP 位址的方式,以及支援的子網路大小取決於您在 Azure 容器應用程式中使用的方案。
請仔細選取您的子網路大小。 建立容器應用程式環境之後,便無法修改子網路大小。
不同的環境類型有不同的子網路需求:
/27
是虛擬網路整合所需的最小子網路大小。必須將子網路委派給
Microsoft.App/environments
。搭配外部輸入使用外部環境時,輸入流量會透過基礎結構的公用 IP 而不是透過子網路傳送。
容器應用程式會自動保留 12 個 IP 位址,以便與子網路整合。 基礎結構整合所需的 IP 位址數量不會根據環境的規模需求而有所不同。 根據您使用其他 IP 位址的工作負載設定檔類型,其他 IP 位址會根據下列規則進行分配:
當您在單一修訂模式中對修訂進行變更時,所需的位址空間會在短時間內加倍,以支援零停機部署。 這會影響指定子網路大小實際可用的支援複本或節點。 下表顯示每個 CIDR 區塊的可用位址上限,以及對水平調整的影響。
子網路大小 可用的 IP 位址 1 最大節點 (專用工作負載設定檔) 2 最大複本 (使用量工作負載設定檔) 2 23/ 500 250 2,500 /24 244 122 1,220 /25 116 58 580 /26 52 26 260 /27 20 10 100 1 可用的 IP 位址是子網路大小減去 Azure 容器應用程式基礎結構所需的 12 個 IP 位址。
2 這是單一修訂模式的應用程式會計。
子網路地址範圍限制
子網路位址範圍無法與 Azure Kubernetes Service 保留的下列範圍重疊:
- 169.254.0.0/16
- 172.30.0.0/16
- 172.31.0.0/16
- 192.0.2.0/24
此外,工作負載設定檔環境會保留下列位址:
- 100.100.0.0/17
- 100.100.128.0/19
- 100.100.160.0/19
- 100.100.192.0/19
使用 CLI 的子網路設定
您會在建立容器應用程式環境時,為單一子網路提供多個資源識別碼。
如果您使用 CLI,用來定義子網路資源識別碼的參數為 infrastructure-subnet-resource-id
。 子網路會裝載基礎結構元件和使用者應用程式容器。
如果您使用 Azure CLI 搭配僅限使用量環境,且已定義 platformReservedCidr 範圍,則子網路不得與 platformReservedCidr
中定義的 IP 範圍重疊。
路由
使用者定義的路由 (UDR)
在工作負載設定檔環境中支援透過使用者定義的路由 (UDR) 和透過 NAT 閘道的受控制輸出。 在僅限使用量環境中,不支援這些功能。
注意
在 Azure 容器應用程式中搭配 Azure 防火牆使用 UDR 時,您必須將特定的 FQDN 和服務標籤加入防火牆的允許清單。 若要深入瞭解,請參閱使用 Azure 防火牆設定 UDR (部分機器翻譯)。
您可以搭配工作負載設定檔環境使用 UDR,以透過 Azure 防火牆或其他網路設備限制來自容器應用程式的輸出流量。
UDR 設定作業是在容器應用程式環境範圍外完成。
Azure 會在建立時為您的虛擬網路建立預設路由表。 您可以實作使用者定義的路由表,控制流量在您虛擬網路內的傳送方式。 例如,您可以建立將所有流量傳送至防火牆的 UDR。
使用 Azure 防火牆設定 UDR
只有在工作負載設定檔環境中才支援使用者定義的路由。 下列應用程式和網路規則必須根據正在使用的資源,新增至防火牆的允許清單。
注意
如需有關如何使用容器應用程式設定 UDR 以透過 Azure 防火牆限制輸出流量的指南,請造訪如何用於容器應用程式和 Azure 防火牆。
應用程式規則
應用程式規則會根據應用程式層,允許或拒絕流量。 根據案例,需要下列輸出防火牆應用程式規則。
案例 | FQDN | 描述 |
---|---|---|
所有案例 | mcr.microsoft.com , *.data.mcr.microsoft.com |
Azure 容器應用程式會使用這些適用於 Microsoft Container Registry (MCR) 的 FQDN,而且這些應用程式規則或 MCR 的網路規則必須在搭配 Azure 防火牆使用 Azure 容器應用程式時新增至允許清單。 |
Azure Container Registry (ACR) | your-ACR-address、*.blob.core.windows.net 、login.microsoft.com |
搭配 ACR 和 Azure 防火牆使用 Azure 容器應用程式時,需要這些 FQDN。 |
Azure Key Vault | Your-Azure-Key-Vault-address、login.microsoft.com |
除了 Azure Key Vault 網路規則所需的服務標籤之外,則需要這些 FQDN。 |
受控識別 | *.identity.azure.net , login.microsoftonline.com , *.login.microsoftonline.com , *.login.microsoft.com |
在 Azure 容器應用程式中透過 Azure 防火牆使用受控識別時,這些 FQDN 為必要。 |
Docker Hub 登錄 | hub.docker.com 、registry-1.docker.io 、production.cloudflare.docker.com |
若您正在使用 Docker Hub 登錄並想要透過防火牆進行存取,則需要將這些 FQDN 新增至防火牆。 |
網路規則
網路規則會根據網路和傳輸層來允許或拒絕流量。 根據案例,需要下列輸出防火牆網路規則。
案例 | 服務標籤 | 描述 |
---|---|---|
所有案例 | MicrosoftContainerRegistry , AzureFrontDoorFirstParty |
Azure 容器應用程式會使用這些適用於 Microsoft Container Registry (MCR) 的服務標籤,而且這些網路規則或 MCR 的應用程式規則必須在搭配 Azure 防火牆使用 Azure 容器應用程式時新增至允許清單。 |
Azure Container Registry (ACR) | AzureContainerRegistry , AzureActiveDirectory |
搭配 Azure 容器應用程式使用 ACR 時,您必須設定 Azure Container Registry 所使用的這些應用程式規則。 |
Azure Key Vault | AzureKeyVault , AzureActiveDirectory |
除了 Azure Key Vault 應用程式規則的 FQDN 之外,則需要這些服務標籤。 |
受控識別 | AzureActiveDirectory |
搭配 Azure 容器應用程式使用受控識別時,您必須設定受控識別所使用的這些應用程式規則。 |
注意
針對您搭配本文未列出的 Azure 防火牆使用的 Azure 資源,請參閱服務標籤文件。
NAT 閘道整合
在工作負載設定檔環境中,您可以使用 NAT 閘道器簡化虛擬網路中輸出網際網路流量的輸出連線。
當您在子網路上設定 NAT 閘道時,NAT 閘道器會為您的環境提供靜態公用 IP 位址。 來自容器應用程式的所有輸出流量皆會透過 NAT 閘道器的靜態公用 IP 位址進行傳送。
環境安全性
您可以採取下列動作,完全保護您的輸入和輸出網路流量工作負載設定檔環境:
在工作負載設定檔環境中建立您的內部容器應用程式環境。 如需步驟,請參閱使用 Azure CLI 管理工作負載設定檔。
將容器應用程式與應用程式閘道器整合。
設定 UDR 以透過 Azure 防火牆傳送所有流量。
Azure 容器應用程式環境中的點對點加密
Azure 容器應用程式支援環境內的點對點 TLS 加密。 啟用此功能會使用在 Azure 容器應用程式環境範圍內有效的私人憑證,來加密環境中的所有網路流量。 這些憑證會自動由 Azure 容器應用程式管理。
注意
點對點加密預設會停用。 為您的應用程式啟用點對點加密可能會增加回應延遲,並減少高負載案例中的最大輸送量。
下列範例顯示已啟用點對點加密的環境。
1 輸入 TLS 流量會在環境邊緣的輸入 Proxy 終止。
2 環境內往返輸入 Proxy 的流量會使用私人憑證進行 TLS 加密,並由接收者解密。
3 從應用程式 A 到應用程式 B 的 FQDN 呼叫會先傳送至邊緣輸入 Proxy,並經過 TLS 加密。
4 使用應用程式 B 的應用程式名稱從應用程式 A 到應用程式 B 的呼叫,會直接傳送至應用程式 B,並經過 TLS 加密。
容器應用程式環境內的應用程式會自動經過驗證。 不過,容器應用程式執行階段不支援使用內建點對點加密應用程式之間存取控制的授權。
當您的應用程式與環境外部的用戶端通訊時,則支援使用 mTLS 進行雙向驗證。 若要深入瞭解,請參閱設定用戶端憑證 (部分機器翻譯)。
您可以使用下列命令來啟用點對點加密。
建立時:
az containerapp env create \
--name <environment-name> \
--resource-group <resource-group> \
--location <location> \
--enable-peer-to-peer-encryption
用於現有的應用程式:
az containerapp env update \
--name <environment-name> \
--resource-group <resource-group> \
--enable-peer-to-peer-encryption
DNS
自訂 DNS:若您的 VNet 使用自訂 DNS 伺服器,而非由 Azure 提供的預設 DNS 伺服器,請將 DNS 伺服器設定為會將未解析的 DNS 查詢轉送至
168.63.129.16
。 Azure 遞迴解析程式會使用此 IP 位址來解析要求。 設定 NSG 或防火牆時,請勿封鎖168.63.129.16
地址,否則您的容器應用程式環境將無法正常運作。VNet 範圍的輸入:若您打算在內部環境中使用 VNet 範圍輸入,請透過下列其中一種方式來設定您的網域:
非自訂網域:若您不打算使用自訂網域,請建立私人 DNS 區域以將容器應用程式環境的預設網域解析為容器應用程式環境的靜態 IP 位址。 您可以使用 Azure 私人 DNS 或您自己的 DNS 伺服器。 如果您使用 Azure 私人 DNS,請建立名為容器應用程式環境預設網域 (
<UNIQUE_IDENTIFIER>.<REGION_NAME>.azurecontainerapps.io
) 的私人 DNS 區域,搭配A
記錄。A
記錄包含容器應用程式環境的名稱*<DNS Suffix>
和靜態 IP 位址。自訂網域:若您打算使用自訂網域且正在使用外部容器應用程式環境,請使用可公開解析的網域,將自訂網域和憑證新增至容器應用程式。 如果您使用內部容器應用程式環境,則 DNS 繫結沒有驗證,因為叢集只能從虛擬網路記憶體存取。 此外,建立私人 DNS 區域,將頂點網域解析為容器應用程式環境的靜態 IP 位址。 您可以使用 Azure 私人 DNS 或您自己的 DNS 伺服器。 如果您使用 Azure 私人 DNS,請將具名的私人 DNS 區域建立為頂點網域,並將
A
記錄指向容器應用程式環境的靜態 IP 位址。
容器應用程式環境的靜態 IP 位址可在容器應用程式頁面自訂 DNS 後綴 的 Azure 入口網站中,或使用 Azure CLI az containerapp env list
命令取得。
受控資源
在將內部或外部環境部署到您自己的網路時,系統會在裝載環境的 Azure 訂用帳戶中,建立具有前綴的新資源群組。 此資源群組包含 Azure 容器應用程式平台所管理的基礎結構元件。 請勿修改此群組或資源群組本身的服務。
工作負載設定檔環境
在主控環境 Azure 訂用帳戶中建立的資源群組名稱預設會加上 ME_
前綴 ,而且當您建立容器應用程式環境時,可以自訂資源群組名稱。
若為外部環境,資源群組包含特別用於外部環境和負載平衡器輸出連線的公用 IP 位址。 若為內部環境,資源群組只會包含 Load Balancer。
除了 Azure 容器應用程式計費之外,還需計算下列費用:
如果使用內部或外部環境,則需輸出三個個標準靜態公用 IP 的費用,如果使用外部環境,則需輸入四個標準靜態公用 IP 的費用。 如果由於 SNAT 問題而需要更多輸出的公用 IP,請開啟支援票證來要求覆寫作業。
一個標準負載平衡器。
已處理的資料 (GB) 成本包含管理作業的輸入和輸出。
僅限使用量環境
在主控環境 Azure 訂用帳戶中建立的資源群組名稱預設會加上 MC_
前綴 ,而且當您建立容器應用程式環境時,無法自訂資源群組名稱。 資源群組包含特別用於環境和負載平衡器輸出連線的公用 IP 位址。
除了 Azure 容器應用程式計費之外,還需計算下列費用:
一個用於輸出的標準靜態公用 IP。 如果由於來源網路位址轉讓 (SNAT) 問題而需要更多輸出 IP,請開啟支援票證來要求覆寫作業。
兩個標準的負載平衡器 (使用內部環境),或是一個標準負載平衡器 (使用外部環境)。 每個負載平衡器都有不到六個規則。 已處理的資料 (GB) 成本包含管理作業的輸入和輸出。