使用防火牆來限制使用 Azure CLI 的輸出流量
重要
AKS 上的 Azure HDInsight 於 2025 年 1 月 31 日淘汰。 透過此公告 深入瞭解。
您必須將工作負載移轉至 Microsoft Fabric 或對等 Azure 產品,以避免突然終止工作負載。
重要
這項功能目前為預覽狀態。 Microsoft Azure 預覽版的補充使用規定 包含適用於 Beta 版、預覽版或尚未正式發行之 Azure 功能的更合法條款。 如需此特定預覽的相關信息,請參閱 AKS 預覽資訊上的 Azure HDInsight。 若對問題或功能建議有任何疑問,請在 AskHDInsight 提交要求,並關注我們,以獲得更多來自Azure HDInsight社群 的更新。
當企業想要使用自己的虛擬網路進行叢集部署時,保護虛擬網路的流量變得很重要。 本文提供使用 Azure CLI Azure CLI,透過 Azure 防火牆保護 AKS 叢集上 HDInsight 輸出流量的步驟。
下圖說明本文中用來模擬企業案例的範例:
本文中示範的範例是使用 Azure Could Shell。
定義變數
在 Azure Cloud Shell 中複製並執行,以設定這些變數的值。
PREFIX="hdiaks-egress"
RG="${PREFIX}-rg"
LOC="eastus"
HDIAKS_CLUSTER_POOL=${PREFIX}
VNET_NAME="${PREFIX}-vnet"
HDIAKS_SUBNET_NAME="${PREFIX}-subnet"
# DO NOT CHANGE FWSUBNET_NAME - This is currently a requirement for Azure Firewall.
FWSUBNET_NAME="AzureFirewallSubnet"
FWNAME="${PREFIX}-fw"
FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
FWIPCONFIG_NAME="${PREFIX}-fwconfig"
FWROUTE_NAME="${PREFIX}-fwrn"
FWROUTE_NAME_INTERNET="${PREFIX}-fwinternet"
建立虛擬網路和子網
使用 az group create 命令建立資源群組。
az group create --name $RG --location $LOC
建立虛擬網路和兩個子網。
在 AKS 叢集集區上包含 HDInsight 子網的虛擬網路
az network vnet create \ --resource-group $RG \ --name $VNET_NAME \ --location $LOC \ --address-prefixes 10.0.0.0/8 \ --subnet-name $HDIAKS_SUBNET_NAME \ --subnet-prefix 10.1.0.0/16
Azure 防火牆的子網。
az network vnet subnet create \ --resource-group $RG \ --vnet-name $VNET_NAME \ --name $FWSUBNET_NAME \ --address-prefix 10.2.0.0/16
重要
- 如果您在子網中新增 NSG
HDIAKS_SUBNET_NAME
,則必須手動新增特定輸出和輸入規則。 請遵循 使用 NSG 來限制流量。 - 根據預設,路由表不會與子網相關聯。 如有需要,用戶必須建立路由表,並將它與叢集集區產生關聯。
- 如果您在子網中新增 NSG
使用 Azure 入口網站在 AKS 叢集集區上建立 HDInsight
建立叢集集區。
建立路由表。
建立路由表,並將它與叢集集區產生關聯。 如需詳細資訊,請參閱 建立路由表。
取得在叢集池中建立的 AKS 叢集詳細資料
請遵循步驟來取得 AKS 叢集資訊,這在後續步驟中很有用。
AKS_MANAGED_RG=$(az network vnet subnet show --name $HDIAKS_SUBNET_NAME --vnet-name $VNET_NAME --resource-group $RG --query routeTable.resourceGroup -o tsv)
AKS_ID=$(az group show --name $AKS_MANAGED_RG --query managedBy -o tsv)
HDIAKS_MANAGED_RG=$(az resource show --ids $AKS_ID --query "resourceGroup" -o tsv)
API_SERVER=$(az aks show --name $HDIAKS_CLUSTER_POOL --resource-group $HDIAKS_MANAGED_RG --query fqdn -o tsv)
建立防火牆
建立標準 SKU 公用 IP 資源。 此資源會作為 Azure 防火牆前端位址使用。
az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
註冊 Azure 防火牆預覽 CLI 擴充功能以建立 Azure 防火牆。
az extension add --name azure-firewall
建立 Azure 防火牆並啟用 DNS Proxy。
az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
建立 Azure 防火牆 IP 組態。
az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
一旦IP組態命令成功,請儲存防火牆前端IP位址以供稍後進行設定。
FWPUBLIC_IP=$(az network public-ip show -g $RG -n $FWPUBLICIP_NAME --query "ipAddress" -o tsv) FWPRIVATE_IP=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].privateIPAddress" -o tsv)
將網路和應用程式規則新增至防火牆
建立網路規則。
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100 az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000 az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiserver' --protocols 'TCP' --source-addresses '*' --destination-fqdns "$API_SERVER" --destination-ports 443 #Add below step, in case you are integrating log analytics workspace az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'azuremonitor' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureMonitor" --destination-ports 443
建立應用程式規則。
az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'aks-fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100 az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'acr' --source-addresses '*' --protocols 'https=443' --target-fqdns "hiloprodrpacr00.azurecr.io" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'blob' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.blob.core.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'servicebus' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.servicebus.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'gsm' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.table.core.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'gcsmonitoring' --source-addresses '*' --protocols 'https=443' --target-fqdns "gcs.prod.monitoring.core.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'graph' --source-addresses '*' --protocols 'https=443' --target-fqdns "graph.microsoft.com"
在路由表中建立路由以將流量重新導向至防火牆
建立路由表以與 AKS 叢集集區上的 HDInsight 相關聯。 如需詳細資訊,請參閱 建立路由表命令。
建立叢集
在先前的步驟中,我們會將網路流量路由傳送至防火牆。
下列步驟提供每個叢集類型所需的特定網路和應用程式規則詳細數據。 您可以參考叢集建立頁面,以根據您的需求 建立 Apache Flink、Trino和 Apache Spark 叢集。
重要
建立叢集之前,請務必執行下列叢集特定規則以允許流量。
Trino
為 Trino 叢集新增下列網路和應用程式規則。
az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'mysql' --source-addresses '*' --protocols 'mssql=1433' --target-fqdns "*.database.windows.net"
根據您的需求,將下列語法中的
Sql.<Region>
變更至您的區域。 例如:Sql.EastUS
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'mysql' --protocols 'TCP' --source-addresses '*' --destination-addresses Sql.<Region> --destination-ports "11000-11999"
Apache Flink
為 Apache Flink 叢集新增下列應用程式規則。
az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
Apache Spark
為 Spark 叢集新增下列網路和應用程式規則。
根據您的需求,將下列語法中的
Storage.<Region>
變更至您的區域。 例如:Storage.EastUS
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'smb' --protocols 'TCP' --source-addresses '*' --destination-addresses "Storage.<Region>" --destination-ports 445 az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
根據您的需求,將下列語法中的
Sql.<Region>
變更至您的區域。 例如:Sql.EastUS
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'mysql' --protocols 'TCP' --source-addresses '*' --destination-addresses "Sql.<Region>" --destination-ports '11000-11999' az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'mysql' --source-addresses '*' --protocols 'mssql=1433' --target-fqdns "*.database.windows.net"
解決對稱路由問題
下列步驟可讓您請求叢集負載平衡器的入口服務,並確保網路回應流量不會流經防火牆。 將路由新增至路由表,將回應流量重新導向至用戶端IP至因特網,然後您可以直接連線到叢集。
az network route-table route create -g $AKS_MANAGED_RG --name clientip --route-table-name $ROUTE_TABLE_NAME --address-prefix {Client_IPs} --next-hop-type Internet
如果您在設定 NSG 之後無法連線到叢集,請按照 的指示使用 NSG 來限制流量,然後按照 的指示來允許流量。
提示
如果您想要允許更多流量,您可以透過防火牆進行設定。
如何偵錯
如果您發現叢集無法預期運作,您可以檢查防火牆記錄,以找出哪些流量遭到封鎖。