みなさんこんにちは。 以前にこちらのブログ記事でAzure Arcの概要をご紹介いたしました。
まずはAzure Arcに接続してみようということで、様々なリソースの接続方法をご紹介しています。 今回はKubernetesクラスターをAzure Arcに接続してみます(Azure Arc対応Kubernetes)。
Azureの外にあるKubernetesクラスターをAzure Arcに接続することで、Azureを介した管理ができるようになります。 KubernetesをAzure Arcに接続した後に扱える機能の詳細についてはこちらをご参照ください。
検証環境
Azure Arcに接続できるのはCloud Native Computing Foundation (CNCF)に認定されたKubernetesです。 Microsoft社により検証されたディストリビューションはこちらで確認することが可能です。 また、Azure Arc対応Kubernetesの要件については以下にまとめられています。
・システム要件
・ネットワーク要件
今回はオンプレミス環境に存在するKubernetesクラスターを利用します。 Kubernetesクラスターはkubeadm を利用して3ノードで構成しており、各ノードのOSはUbuntu 20.04 LTSです。
操作環境としてKubernetesクラスターとはまた別にUbuntuの仮想マシン(以下、「操作用マシン」と呼びます)をデプロイしています。 こちらはKubernetesクラスターならびにインターネットにアクセス可能です。 また、kubectlならびにAzure CLIを利用できるようにしてあります。
Azure側にはリソースプロバイダーとしてMicrosoft.Kubernetes、Microsoft.KubernetesConfiguration、Microsoft.ExtendedLocationを登録済です。(Azure Arc対応Kubernetesのためのリソースプロバイダー登録についてはこちらをご参照ください。)
KubernetesクラスターをAzure Arcに接続
今回はAzure Portalを利用してKubernetesクラスターをAzure Arcに接続します。(Azure Portal を利用するとAzure Arcに接続するためのスクリプトを入手することができます。)
※ CLIを利用して接続する手順についてはMicrosoft Learnのクイックスタートをご参照ください。
Azure CLIへの拡張機能インストール
操作用マシンで以下のコマンドを実行し、Azure CLI拡張機能をインストールします。 これによりaz connectedk8sコマンドを実行できるようになります。(本コマンドの詳細についてはこちらをご参照ください。)
az extension add --name connectedk8s
Azure Arcへの接続
Azure PortalでAzure Arcの「インフラストラクチャ」配下の「Kubernetesクラスター」を開き「追加」をクリックします。
接続のための要件が表示されます。 Kubernetesバージョン1.13以降が必要であることなど記載されています。「次へ」をクリックします。
「Azure ArcにKubernetesクラスターを追加」をクリックします。
サブスクリプション、リソースグループ、クラスター名、地域、接続方法を指定し「次へ」をクリックします。 今回はリソースグループ「arc-rg」を利用し、クラスター名は「arc-kubernetes」とします。 今回はプロキシ、VPNやAzure ExpressRouteがない環境ですのでKubernetesクラスターからAzure Arcのパブリックエンドポイントに接続します。
タグの設定画面が表示されます。 Azure Arc対応サーバーの場合と同様に「物理的な場所タグ」としてプリセットでDatacenter / City / SiteOrDistrict / CountryOrRegion という名称のタグが存在しています。 必要に応じて値を入力し「次へ」をクリックします。
スクリプトが表示されますので、こちらを操作用マシンの任意の場所に保存します。 今回はBashのスクリプトを利用します。 「2. Open the Azure CLI and run the script」にスクリプトの用法や内容が記載されています。
スクリプトを「CreateConnectedClusterScript.sh」という名称で保存しましたので、こちらを実行します。 実行すると認証のためURLとコードが表示されます。
表示されたURLにWebブラウザでアクセスします。(Webブラウザを開くのは操作用マシンとは異なるホストでも構いません。) コードを入力して「次へ」をクリックします。
サインインします。(Azureアカウントに必要なロールについてはこちらをご参照ください。)
認証が完了したらWebブラウザを閉じて構いません。
スクリプトの実行が続行されますので、完了するまで待機します。 以下は完了時の出力です。
Azure Portalには接続したKubernetesクラスターが以下のように表示されています。 Azure Portalでスクリプト作成時に「クラスター名」として指定した文字列がリソース名になっています。
Azure Arc接続後の状態を確認
KubernetesクラスターをAzure Arcに接続するとAzure Arcエージェント(Azure Arc 対応 Kubernetesエージェント)がNamespace「azure-arc」にデプロイされます。(本エージェントの詳細についてはこちらをご参照ください。) Namespace「azure-arc」内のリソースは以下のようになっています。
Azure Arc対応KubernetesのリソースをAzure Portalで扱う
Azure Arc対応Kubernetesには「Kubernetes resources (preview)」というメニューがあります。 以下はAzure Portalで一例として「Kubernetes resources (preview)」の「Namespaces」をKubernetesクラスター接続後に開いたものです。 「サービスアカウント ベアラートークン」を入力していないためKubernetesクラスター上のNamespaceをはじめとする各種リソースが表示されない状態になっています。
サービスアカウント ベアラートークンの作成と登録
リソースをAzure Poral上で扱うために、サービスアカウント ベアラートークンを作成して登録します。 今回はこちらに記載の手順を参考に、下図のようなリソースを作成し、トークンを取得します。
操作用マシンで以下のコマンドを実行しServiceAccountを作成します。
kubectl create serviceaccount arcdemo-user -n default
ClusterRoleBindingを作成し、ServiceAccountにアクセス許可を付与します。 今回はClusterRole「cluster-admin」を付与しています。
さらにSecret (service-account-token)を作成します。
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: arcdemo-user-secret
annotations:
kubernetes.io/service-account.name: arcdemo-user
type: kubernetes.io/service-account-token
EOF
トークンを確認します。
TOKEN=$(kubectl get secret arcdemo-user-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
echo $TOKEN
表示されたトークンをAzure Portalで登録します。トークンを入力し「サインイン」をクリックします。
Azure PortalでKubernetesリソースを扱う
サービスアカウント ベアラートークンを登録したことによりNamespaceが表示されました。
Namespaceを閲覧できるようになったと同時に、Workloads / Services and ingresses / Storage / 構成も閲覧できるようになります。(以下はWorkloadsの画面です。)
新たなリソースを作成することも可能です。 「追加」をクリックしてマニフェストを入力し、「追加」をクリックします。
また、Webアプリケーションをデプロイして簡易的に動作確認することも可能です。 「YAMLで追加」画面で「クイックスタート アプリケーションをデプロイして起動し、実行します。」をクリックします。
「基本Webアプリケーションの作成」をクリックします。
「次へ」をクリックします。
デプロイされるリソースのマニフェストが表示されます。 内容を確認し「デプロイする」をクリックします。
リソースがデプロイされます。
WebブラウザでService「azure-vote-front」の外部IPアドレスにアクセスするとアプリケーション(投票アプリ)を利用することができます。
まとめ
本ブログ記事ではKubernetesクラスターをAzure Arcに接続する手順についてご紹介いたしました。 さらにAzure PortalからKubernetesクラスター上のリソースを扱えるよう、サービスアカウント ベアラートークンを登録する方法についてもご紹介しました。
本ブログ記事ではご紹介しませんでしたが、Azure Arc対応Kubernetesでは拡張機能によりAzure MonitorやAzureポリシー、Microsoft Defenderなどの機能を利用したり、GitOps (Flux)による構成管理をデプロイするといったことが可能です。 利用できる拡張機能、各拡張機能でサポートされるディストリビューション等についてはこちらをご参照ください。
SB C&SはAzureを取り扱われているパートナー企業様へ様々なご支援のメニューを用意しております。 メニューの詳細やAzureに関するご相談等につきましては以下の「Azure相談センター」をご確認ください。
Azure相談センター
https://licensecounter.jp/azure/
※ 本ブログは弊社にて把握、確認された内容を基に作成したものであり、製品の動作や仕様について担保・保証するものではありません。サービスや製品の動作、仕様等に関しては、予告なく変更される場合があります。
Microsoft Azureに関する記事一覧はこちら
著者紹介
SB C&S株式会社
ICT事業本部 技術本部 第1技術部 4課
中原 佳澄