Share via


使用防火牆來限制使用 Azure CLI 的輸出流量

重要

此功能目前為預覽功能。 適用於 Microsoft Azure 預覽版的補充使用規定包含適用於 Beta 版、預覽版或尚未發行至正式運作之 Azure 功能的更合法條款。 如需此特定預覽的相關信息,請參閱 AKS 預覽資訊的 Azure HDInsight。 如需問題或功能建議,請在 AskHDInsight提交要求,並提供詳細數據,並遵循我們在 Azure HDInsight 社群取得更多更新。

當企業想要使用自己的虛擬網路進行叢集部署時,保護虛擬網路的流量變得很重要。 本文提供使用 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"

顯示 Cloud Shell 變數的圖表。

建立虛擬網路和子網路

  1. 使用 az group create 命令來建立資源群組。

    az group create --name $RG --location $LOC
    
  2. 建立虛擬網路和兩個子網。

    1. 具有 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
      
    2. Azure 防火牆 的子網。

      az network vnet subnet create \
         --resource-group $RG \
         --vnet-name $VNET_NAME \
         --name $FWSUBNET_NAME \
         --address-prefix 10.2.0.0/16
      

      重要

      1. 如果您在子網 HDIAKS_SUBNET_NAME中新增NSG,則必須手動新增特定輸出和輸入規則。 請遵循 使用 NSG 來限制流量
      2. 根據預設,路由表不會與子網相關聯。 如有需要,用戶必須建立路由表,並將它與叢集集區產生關聯。

使用 Azure 入口網站 在 AKS 叢集集區上建立 HDInsight

  1. 建立叢集集區。

    顯示叢集集區基本索引標籤的圖表。

    顯示安全性索引標籤的圖表。

  2. 建立路由表。

    建立路由表,並將它與叢集集區產生關聯。 如需詳細資訊,請參閱 建立路由表

取得在叢集集集區后建立的 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)

建立防火牆

  1. 建立標準 SKU 公用 IP 資源。 此資源會作為 Azure 防火牆 前端位址。

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. 註冊 Azure 防火牆 預覽 CLI 擴充功能,以建立 Azure 防火牆。

       az extension add --name azure-firewall
    
  3. 建立 Azure 防火牆 並啟用 DNS Proxy。

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. 建立 Azure 防火牆IP組態。

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. 一旦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)
    

將網路和應用程式規則新增至防火牆

  1. 建立網路規則。

    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
    
  2. 建立應用程式規則。

    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 FlinkTrinoApache Spark 叢集。

重要

建立叢集之前,請務必執行下列叢集特定規則以允許流量。

Trino

  1. 為 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"
    
  1. 為 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

  1. 為 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 來限制流量 以允許流量。

提示

如果您想要允許更多流量,您可以透過防火牆進行設定。

如何偵錯

如果您發現叢集無法預期運作,您可以檢查防火牆記錄,以找出哪些流量遭到封鎖。