次の方法で共有


Azure Kubernetes Service (AKS) プライベート クラスターの SQL Server 2019 ビッグ データ クラスターからのエグレス トラフィックを制限する

重要

Microsoft SQL Server 2019 ビッグ データ クラスターのアドオンは廃止されます。 SQL Server 2019 ビッグ データ クラスターのサポートは、2025 年 2 月 28 日に終了します。 ソフトウェア アシュアランス付きの SQL Server 2019 を使用する既存の全ユーザーはプラットフォームで完全にサポートされ、ソフトウェアはその時点まで SQL Server の累積更新プログラムによって引き続きメンテナンスされます。 詳細については、お知らせのブログ記事と「Microsoft SQL Server プラットフォームのビッグ データ オプション」を参照してください。

Azure Kubernetes Service (AKS) を使用して、ビッグ データ クラスターからのエグレス トラフィックを制限できます。 このサービスでは、Standard SKU Load Balancer がプロビジョニングされます。 これは既定で設定され、エグレスに使用されます。 これで、既定のセットアップがすべてのシナリオと要件を満たしていない可能性があります。 たとえば、パブリック IP が許可されていない場合や、エグレスに追加 ホップ が必要な場合です。 クラスターがパブリック IP を禁止し、ネットワーク仮想アプライアンス (NVA) の背後にある場合は、ユーザー定義ルート (UDR) テーブルを定義できます。

AKS クラスターには、無制限の送信 (エグレス) インターネット アクセスがあります。 これは、管理と運用上の目的で使用されます。 AKS クラスター内のワーカー ノードは、特定のポートと 完全修飾ドメイン名 (FQDN) にアクセスする必要があります。 この例を次に示します。

  • ワーカー ノード OS のセキュリティ更新中に、クラスターが Microsoft Container Registry (MCR) から基本システム コンテナー イメージをプルする必要がある場合。
  • GPU が有効になっている場合、AKS ワーカー ノードは、ドライバーをインストールするために Nvidia からエンドポイントにアクセスする必要があります。
  • お客様が AKS を Azure サービスと組み合わせて使用する場合 (エンタープライズ レベルのコンプライアンスのための Azure ポリシー、Azure 監視 (コンテナーの分析情報を使用) など)。
  • Dev Space が有効になっている場合、およびその他の同様のシナリオ。

Azure Kubernetes Service (AKS ) プライベート クラスターにビッグ データ クラスター (BDC) をデプロイする場合、この記事で説明されているものを除き、受信依存関係はありません。 すべての送信依存関係は、 Azure Kubernetes Service (AKS) のクラスター ノードの制御エグレス トラフィックで 確認できます。

この記事では、高度なネットワークと UDR を使用して AKS プライベート クラスターに BDC をデプロイする方法について説明します。 また、BDC とエンタープライズ レベルのネットワーク環境の統合についても説明します。

Azure ファイアウォールでエグレス トラフィックを制限する方法

Azure Firewall には、構成を簡略化するための Azure Kubernetes Service (AzureKubernetesService) FQDN タグが用意されています。

FQDN タグの詳細については、「 Azure ファイアウォールを使用してエグレス トラフィックを制限する」を参照してください。

次の図は、AKS プライベート クラスターでのトラフィックの制限方法を示しています。

AKS プライベート クラスター ファイアウォールエグレス トラフィックを示すスクリーンショット。

Azure Firewall を使用してビッグ データ クラスターの基本的なアーキテクチャを開発します。

  1. リソース グループを作成する > VNet
  2. Azure ファイアウォールの作成と設定
  3. ユーザー定義ルート テーブルを作成する
  4. ファイアウォール規則を設定する
  5. サービス プリンシパル (SP) の作成
  6. AKS プライベート クラスターを作成する
  7. BDC デプロイ プロファイルを作成する
  8. BDC のデプロイ

リソース グループと VNet を作成する

  1. リソースを作成する環境変数のセットを定義します。

    export REGION_NAME=<region>
    export RESOURCE_GROUP=private-bdc-aksudr-rg
    export SUBNET_NAME=aks-subnet
    export VNET_NAME=bdc-vnet
    export AKS_NAME=bdcaksprivatecluster
    
  2. リソース グループを作成する

    az group create -n $RESOURCE_GROUP -l $REGION_NAME
    
  3. VNET を作成する

    az network vnet create \
      --resource-group $RESOURCE_GROUP \
      --___location $REGION_NAME \
      --name $VNET_NAME \
      --address-prefixes 10.0.0.0/8 \
      --subnet-name $SUBNET_NAME \
      --subnet-prefix 10.1.0.0/16
    
    SUBNET_ID=$(az network vnet subnet show \
      --resource-group $RESOURCE_GROUP \
      --vnet-name $VNET_NAME \
      --name $SUBNET_NAME \
      --query id -o tsv)
    

Azure Firewall の作成と設定

  1. リソースを作成するための環境変数のセットを定義します。

    export FWNAME=bdcaksazfw
    export FWPUBIP=$FWNAME-ip
    export FWIPCONFIG_NAME=$FWNAME-config
    
    az extension add --name azure-firewall
    
  2. ファイアウォール用の専用サブネットを作成する

    作成後にファイアウォール名を変更することはできません

    az network vnet subnet create \
      --resource-group $RESOURCE_GROUP \
      --vnet-name $VNET_NAME \
      --name AzureFirewallSubnet \
      --address-prefix 10.3.0.0/24
    
     az network firewall create -g $RESOURCE_GROUP -n $FWNAME -l $REGION_NAME --enable-dns-proxy true
    
     az network public-ip create -g $RESOURCE_GROUP -n $FWPUBIP -l $REGION_NAME --sku "Standard"
    
     az network firewall ip-config create -g $RESOURCE_GROUP -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBIP --vnet-name $VNET_NAME
    

Azure では、Azure のサブネット、仮想ネットワーク、およびオンプレミスのネットワーク間のトラフィックが自動的にルーティングされます。

ユーザー定義ルート テーブルを作成する方法

Azure Firewall へのホップを含む UDR テーブルを作成できます。


export SUBID= <your Azure subscription ID>
export FWROUTE_TABLE_NAME=bdcaks-rt
export FWROUTE_NAME=bdcaksroute
export FWROUTE_NAME_INTERNET=bdcaksrouteinet

export FWPUBLIC_IP=$(az network public-ip show -g $RESOURCE_GROUP -n $FWPUBIP --query "ipAddress" -o tsv)
export FWPRIVATE_IP=$(az network firewall show -g $RESOURCE_GROUP -n $FWNAME --query "ipConfigurations[0].privateIpAddress" -o tsv)

# Create UDR and add a route for Azure Firewall

az network route-table create -g $RESOURCE_GROUP --name $FWROUTE_TABLE_NAME

az network route-table route create -g $RESOURCE_GROUP --name $FWROUTE_NAME --route-table-name $FWROUTE_TABLE_NAME --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address $FWPRIVATE_IP --subscription $SUBID

az network route-table route create -g $RESOURCE_GROUP --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME --address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet

ファイアウォール規則を設定する方法

# Add FW Network Rules

az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$REGION_NAME" --destination-ports 1194 --action allow --priority 100
az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$REGION_NAME" --destination-ports 9000
az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123

# Add FW Application Rules

az network firewall application-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwar' -n 'fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100

次のコマンドを使用して、以前に BDC をデプロイした AKS クラスターに UDR を関連付けることができます。

az network vnet subnet update -g $RESOURCE_GROUP --vnet-name $VNET_NAME --name $SUBNET_NAME --route-table $FWROUTE_TABLE_NAME

サービス プリンシパル (SP) を作成して構成する

この手順では、サービス プリンシパルを作成し、仮想ネットワークにアクセス許可を割り当てる必要があります。

次の例を参照してください。

# Create SP and Assign Permission to Virtual Network

az ad sp create-for-rbac -n "bdcaks-sp"

APPID=<your service principal ID >
PASSWORD=< your service principal password >
VNETID=$(az network vnet show -g $RESOURCE_GROUP --name $VNET_NAME --query id -o tsv)

# Assign SP Permission to VNET

az role assignment create --assignee $APPID --scope $VNETID --role "Network Contributor"


RTID=$(az network route-table show -g $RESOURCE_GROUP -n $FWROUTE_TABLE_NAME --query id -o tsv)
az role assignment create --assignee $APPID --scope $RTID --role "Network Contributor"

AKS クラスターを作成する

userDefinedRoutingを送信の種類として使用して AKS クラスターを作成できるようになりました。

az aks create \
    --resource-group $RESOURCE_GROUP \
    --___location $REGION_NAME \
    --name $AKS_NAME \
    --load-balancer-sku standard \
    --outbound-type userDefinedRouting \
    --enable-private-cluster \
    --network-plugin azure \
    --vnet-subnet-id $SUBNET_ID \
    --docker-bridge-address 172.17.0.1/16 \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 \
    --service-principal $APPID \
    --client-secret $PASSWORD \
    --node-vm-size Standard_D13_v2 \
    --node-count 2 \
    --generate-ssh-keys

ビッグ データ クラスターのデプロイ プロファイルを作成する

カスタム プロファイルを使用してビッグ データ クラスターを作成できます。

azdata bdc config init --source aks-dev-test --target private-bdc-aks --force

カスタム BDC デプロイ プロファイルを生成して構成する

azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.docker.imageTag=2019-CU6-ubuntu-16.04"
azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.storage.data.className=default"
azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.storage.logs.className=default"

azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.endpoints[0].serviceType=NodePort"
azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.endpoints[1].serviceType=NodePort"

azdata bdc config replace -c private-bdc-aks/bdc.json -j "$.spec.resources.master.spec.endpoints[0].serviceType=NodePort"
azdata bdc config replace -c private-bdc-aks/bdc.json -j "$.spec.resources.gateway.spec.endpoints[0].serviceType=NodePort"
azdata bdc config replace -c private-bdc-aks/bdc.json -j "$.spec.resources.appproxy.spec.endpoints[0].serviceType=NodePort"

AKS プライベート クラスターに BDC をデプロイする

export AZDATA_USERNAME=<your bdcadmin username>
export AZDATA_PASSWORD=< your bdcadmin password>

azdata bdc create --config-profile private-bdc-aks --accept-eula yes

サード パーティのファイアウォールを使用してエグレス トラフィックを制限することはできますか?

サードパーティのファイアウォールを使用して、デプロイされた BDC と AKS プライベート クラスターを使用してエグレス トラフィックを制限できます。 例を表示するには、 Azure Marketplace ファイアウォールにアクセスしてください。 サードパーティ製のファイアウォールは、より準拠した構成を持つプライベート デプロイ ソリューションで使用できます。 ファイアウォールには、次のネットワーク規則が用意されている必要があります。

AKS プライベート クラスターでビッグ データ クラスターを管理する方法を確認してから、次の手順はビッグ データ クラスターに接続することです

このシナリオの自動化スクリプトについては、 GitHub の SQL Server サンプル リポジトリを参照してください