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) を使用してビッグ データ クラスターからのエグレス トラフィックを制限できます。 このサービスでは、標準の SKU Load Balancer をプロビジョニングします。 これは既定で設定され、エグレスに使用されます。 ここで、既定のセットアップで、すべてのシナリオと要件が満たされていない場合があります。 たとえば、パブリック IP が許可されていない場合、またはエグレス用に追加の "ホップ" が必要な場合です。 クラスターでパブリック IP が許可されず、クラスターがネットワーク仮想アプライアンス (NVA) の内側に置かれている場合は、ユーザー定義のルート (UDR) テーブルを定義できます。

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

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

Note

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

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

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

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

FQDN タグの完全な情報については、「Azure Firewall を使用してエグレス トラフィックを制限する」を参照してください。

次の図は、AKS プライベート クラスターでトラフィックがどのように制限されるかを示しています。

Screenshot that shows AKS private cluster firewall egress traffic.

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. ファイアウォール専用のサブネットを作成します

    Note

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

    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 クラスターに必要な送信ネットワーク規則と FQDN」のすべてを参照してください。 この URL には、すべてのワイルドカード HTTP/HTTPS エンドポイントと依存関係も含まれます。 これらは、いくつかの修飾子と実際の要件に基づき、AKS クラスターによって異なる場合がある依存関係です。
  • ここに記載されている、Azure Global に必要なネットワーク規則/FQDN/アプリケーション規則。
  • ここに記載されている、AKS クラスターに対して推奨される省略可能な FQDN とアプリケーションの規則。

AKS プライベート クラスターでビッグ データ クラスターを管理し、その後ビッグ データ クラスターに接続する方法についてご確認ください。

GitHub の SQL Server Samples リポジトリにある、このシナリオ用の自動化スクリプトを確認してください。