Azure Arc 対応 Kubernetes でのファイアウォール越えクラスター接続

この記事の内容

  • ファイアウォールの内側にある Kubernetes クラスターに、インターネット越しで外部から接続する方法を紹介します
  • Azure Arc の Connected Cluster 機能を使い、グローバル側から穴あけなしで接続を実現します
  • az connectedk8s proxy コマンドによるローカルプロキシ経由の接続手順を解説します
  • Azure Active Directory ユーザー認証を用いた ClusterRoleBinding の設定方法を説明します
  • ハイブリッドクラウド・エッジ環境への応用可能性についても触れます

Azure Arc とファイアウォール越え接続の概要

通常、ファイアウォールの内側にある Kubernetes クラスターには、外部のパブリッククラウドや一般のインターネットからアクセスすることができません。ファイアウォールに穴を開ける(インバウンド許可ルールを追加する)必要があるため、セキュリティリスクが生じます。

Azure Arc の Connected Cluster 機能を使うと、クラスター側からのアウトバウンド接続のみを利用して、外部からクラスターへのアクセスを実現できます。つまり、ファイアウォールのインバウンドルールを一切変更することなく、世界中どこからでもそのクラスターに接続できるようになります。


検証環境

この検証では、以下の環境を使用しています。

  • ベースマシン: SE3号機(お借りしている環境)
  • Hyper-V 上に Azure Local(旧 Azure Stack HCI)の OS を構築
  • その上に AKS(Azure Kubernetes Service)を導入
  • AKS のサービス上で Kubernetes クラスター(ワークロードクラスター)を1つ作成済み

クラスターの kubeconfig ファイルは事前にダウンロードし、~/.kube/config に配置してあります。サーバーは 192.168.1.211 というプライベート IP アドレスで、ファイアウォールの設定は変更していない状態です。

ファイアウォール内のネットワークから直接 kubectl を実行すると、プライベート IP で疎通できるため問題なく動作します。


Azure Arc への登録(Connected Cluster の有効化)

まず、対象の Kubernetes クラスターを Azure Arc に登録します。以下のコマンドを使用します。

az connectedk8s connect \
  --name <クラスター名> \
  --resource-group <リソースグループ名>

実行後、クラスターが Azure Arc に接続(Connected 状態)になったことを確認します。


インターネット越しの端末からの接続手順

ここからは、ファイアウォールの外側にある、完全にインターネット越しの端末からの操作になります。

1. Azure CLI でログイン

az login

今回は Azure Active Directory(AAD)に招待されている Microsoft アカウントのユーザーでログインします。

ログイン後、対象のサブスクリプションを確認し、正しい環境になっていることを確認してください。

2. プロキシの起動

az connectedk8s proxy \
  --name <クラスター名> \
  --resource-group <リソースグループ名>

実行すると、ローカル PC 上でプロキシが起動し、以下のようなメッセージが表示されます。

Proxylisteningonport47011

これにより、ローカルの 47011 番ポートでプロキシが動作し始めます。また、kubeconfig にその設定が自動的にマージされます。

3. 認証(Azure AD ユーザーの場合)

kubectl でプロキシ経由に接続しようとすると、最初は認証が要求されます。AAD ユーザーによる認証には、ブラウザベースの対話型認証フローが使われます。

表示される GUI でサインインを行うと、ログインしたユーザーのオブジェクト ID が確認できます。

4. ClusterRoleBinding の設定

AAD ユーザーでクラスターを操作するには、そのユーザーに対して Kubernetes 側で権限を付与する必要があります。ファイアウォール内のクラスターに直接アクセスできる環境から以下のコマンドを実行します。

kubectl create clusterrolebinding admin-user-binding \
  --clusterrole=cluster-admin \
  --user=<ユーザーのオブジェクトID>

<ユーザーのオブジェクトID> には、AAD に招待されているユーザーの GUID(例: e8xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)を指定します。


接続確認

プロキシが動作している状態で、インターネット越しの端末から kubectl を実行します。

kubectl get nodes

正常に接続できていれば、ファイアウォールの内側にあるクラスターのノード情報が返ってきます。

ポートフォワーディングの設定を確認すると、ローカルの 47011 番ポートを経由してクラスターと通信していることがわかります。


まとめ

Azure Arc の Connected Cluster 機能を使うことで、ファイアウォールのインバウンドルールを一切変更することなく、インターネット越しに Kubernetes クラスターへ接続できることを確認しました。

ポイントを整理すると、以下の通りです。

  • アウトバウンド接続のみを使用するため、ファイアウォールに穴を開ける必要がない
  • az connectedk8s proxy コマンドでローカルにプロキシを立ち上げ、kubeconfig が自動更新される
  • AAD ユーザー認証と ClusterRoleBinding の組み合わせで、安全にアクセス制御が可能
  • Azure Local(旧 Azure Stack HCI)やエッジ環境のクラスターも、Azure Arc を通じて一つのロケーションとして管理できる

この仕組みは、Azure のサービスをエッジ環境やオンプレミス環境に展開するハイブリッドクラウド構成の基盤としても有効で、Azure Arc を活用することでセキュアかつ柔軟な Kubernetes 管理が実現できます。