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 プライベート クラスターでトラフィックがどのように制限されるかを示しています。
Azure Firewall を使用してビッグ データ クラスターの基本的なアーキテクチャを開発します。
- リソース グループと VNet を作成する
- Azure ファイアウォールを作成および設定する
- ユーザー定義ルート テーブルを作成する
- ファイアウォール規則の設定
- サービス プリンシパル (SP) を作成する
- AKS プライベート クラスターを作成する
- BDC デプロイ プロファイルを作成する
- BDC をデプロイする
リソース グループと VNet を作成する
リソースを作成するための一連の環境変数を定義します。
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
リソース グループの作成
az group create -n $RESOURCE_GROUP -l $REGION_NAME
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 を作成および設定する
リソースを作成するための一連の環境変数を定義します。
export FWNAME=bdcaksazfw export FWPUBIP=$FWNAME-ip export FWIPCONFIG_NAME=$FWNAME-config az extension add --name azure-firewall
ファイアウォール専用のサブネットを作成します
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 リポジトリにある、このシナリオ用の自動化スクリプトを確認してください。