🎼
AKS の API Server の VNET 統合を試してみた
タイトルの機能がプレビュー提供されましたね!
早速、試してみました。
環境・準備
- Windows 10
- Windows PowerShell
- Azure CLI (v2.40.0)
プレビュー機能を使う準備
公式ドキュメントの「aks-preview CLI 拡張機能をインストールする」「EnableAPIServerVnetIntegrationPreview プレビュー機能を登録する」を実施しておきます。
やってみた
VNET 統合を使うということは、基本的に自分で VNET およびサブネットを設計していきたいものだと思うので、自分で作成した VNET に構築する方法を実施してみました。
リソースグループの作成
$RGNAME = "<リソースグループ名>"
$CLUSTERNAME = "<クラスター名>"
$LOCATION = "eastus2"
az group create -l $LOCATION -n $RGNAME
仮想ネットワーク (VNET) の作成
まずは仮想ネットワークを作成。
$VNETNAME = "<仮想ネットワーク名>"
# Create the virtual network
az network vnet create -n $VNETNAME `
-l $LOCATION `
-g $RGNAME `
--address-prefixes 172.19.0.0/16
各サブネットを作成します。
$APISUBNETNAME = "<API サーバーサブネット名>"
az network vnet subnet create --vnet-name $VNETNAME `
-g $RGNAME `
--name $APISUBNETNAME `
--delegations Microsoft.ContainerService/managedClusters `
--address-prefixes 172.19.0.0/28
$CLUSTERSUBNETNAME = "<クラスターサブネット名>"
az network vnet subnet create --vnet-name $VNETNAME `
-g $RGNAME `
--name $CLUSTERSUBNETNAME `
--address-prefixes 172.19.1.0/24
ここで、上記コマンドの出力から id
の箇所をコピーして変数に入れておきます。
$APISUBNETID = "<API サーバーサブネット作成コマンドの出力の id の値>"
$CLUSTERSUBNETID = "<クラスターサブネット作成コマンドの出力の id の値>"
マネージド ID を作成し、仮想ネットワークに対するアクセス許可を付与する
$MANAGEDIDNAME = "<マネージド ID 名>"
az identity create -n $MANAGEDIDNAME -l $LOCATION -g $RGNAME
上記コマンドの出力から clientId
および id
の箇所をコピーして変数に入れて、仮想ネットワークに対するアクセス許可を付与します。
$MANAGEDID = "<マネージド ID 作成コマンドの出力の clientId の値>"
$MANAGEDID_RID = "<マネージド ID 作成コマンドの出力の id の値>"
az role assignment create --scope $APISUBNETID `
--role "Network Contributor" --assignee $MANAGEDID
az role assignment create --scope $CLUSTERSUBNETID `
--role "Network Contributor" --assignee $MANAGEDID
AKS クラスターを作成する
az aks create -n $CLUSTERNAME `
-g $RGNAME `
-l $LOCATION `
--network-plugin azure `
--enable-private-cluster `
--enable-apiserver-vnet-integration `
--vnet-subnet-id $CLUSTERSUBNETID `
--apiserver-subnet-id $APISUBNETID `
--assign-identity $MANAGEDID_RID
接続確認
ローカル環境では、クラスターに接続はできないはずです。
> az aks get-credentials -n $CLUSTERNAME -g $RGNAME
The behavior of this command has been altered by the following extension: aks-preview
Merged "xxxxxxxxxxx" as current context in C:\Users\xxxxx\.kube\config
> kubectl get pods
Unable to connect to the server: dial tcp: lookup xxxxxxxxxx.private.eastus2.azmk8s.io: no such host
ということで、OK ですね。
次に、対象の VNET (クラスターサブネット) に Ubuntu VM を新規作成し、Azure CLI と kubectl をインストールして接続してみます。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-19647542-vmss000000 Ready agent 21m v1.23.8
aks-nodepool1-19647542-vmss000001 Ready agent 21m v1.23.8
aks-nodepool1-19647542-vmss000002 Ready agent 22m v1.23.8
ということで、こちら (クラスターサブネット) からならアクセスすることができました!
まとめ
プライベートな Kubernetes 環境を構成するための機能が更に充実しましたね!
ちなみに、API サーバーサブネットには VM (管理用 VM など) を作成できないようなので、更に別に管理用のサブネットを設計しておくのが良いかもしれません。
#ネットワークの内部構造は複雑なので引き続き勉強が必要です🙄
Discussion