このガイドでは、Azure Kubernetes Service (AKS) クラスターの API サーバーに接続するためのさまざまなオプションについて説明します。 標準の AKS クラスターでは、API サーバーはインターネット経由で公開されます。 プライベート AKS クラスターを作成する場合は、プライベート クラスターへのネットワーク接続をもつデバイスからのみ API サーバーに接続できます。
API サーバーへのアクセスの計画は、最初に行うアクティビティです。 API サーバーにアクセスする方法の選択は、デプロイ シナリオによって異なります。
AKS API サーバー アクセス
AKS クラスターを管理するには、その API サーバーに対して操作を行います。 API サーバーへのアクセスをロックダウンし、必要とするユーザーにのみアクセス権を付与することが重要です。 AKS クラスターを Microsoft Entra ID と統合することで、きめ細かいアクセス制御を提供できます。 次に、管理者は、ロールベースのアクセス制御 (RBAC) を使用してアクセスを制限できます。 管理者は、RBAC を使用して、Microsoft Entra グループにユーザーと ID を配置し、適切なロールとアクセス許可をグループに割り当てることができます。 Microsoft Entra 認証は、OpenID Connect によって AKS クラスターに提供されます。 詳細については、以下の資料を参照してください:
Note
承認された IP アドレス範囲のみが API サーバーと通信できるようにすることで、AKS クラスターをさらにロックダウンできます。 詳細については「Azure Kubernetes Service (AKS) で許可された IP アドレス範囲を使用して API サーバーへのアクセスをセキュリティで保護する」を参照してください。
Azure DDoS Protection では、アプリケーションの設計に関するベスト プラクティスと組み合わせることにより、DDoS 攻撃からの保護を向上させるための強化された DDoS 軽減機能が提供されます。 すべての境界仮想ネットワークで Azure DDOS Protection を有効にする必要があります。
インターネット経由で AKS クラスターにアクセスする
API サーバーの完全修飾ドメイン名 (FQDN) に解決される非プライベート クラスターを作成すると、API サーバーには既定でパブリック IP アドレスが割り当てられます。 その後、Azure portal を使用してクラスターに接続することも、Azure CLI、PowerShell、コマンド プロンプトなどのシェルを使用することもできます。
注意
Kubernetes コマンド ライン クライアント kubectl
を使用してインターネット経由でクラスターに接続する方法の詳細については、「クラスターへの接続」を参照してください。
Azure Cloud Shell
Cloud Shell は Azure portal に組み込まれているシェルです。 PowerShell または Azure CLI から行うのと同じ方法で、Cloud Shell から Azure リソースを管理し、接続できます。 詳細については、Azure Cloud Shell の概要に関するページを参照してください。
AKS プライベート クラスターにアクセスする
AKS プライベート クラスターに接続するには数多くの方法があります。 AKS プライベート クラスターにアクセスする方法を計画することは、シナリオのニーズと制限によって変わる、最初に行うアクティビティです。 次のコンポーネントとサービスを使用して、プライベート クラスターに接続できます。
- ジャンプ ボックス。 ジャンプ ボックスをサブネットにデプロイし、操作ワークステーションとして使用できます。 ジャンプ ボックスでは、可用性セットでスタンドアロンの永続的な仮想マシン (VM) を使用できます。 Azure Virtual Machine Scale Sets を使用することもできます。
- Azure Bastion。
- 1 つの仮想プライベート ネットワーク (VPN)。
- Azure ExpressRoute。
- AKS を管理するための Azure CLI aks コマンド呼び出し。
- クラスターの API サーバーに接続されているサブネットにデプロイされている Cloud Shell インスタンス。
- Azure Virtual Desktop。 チームがさまざまなオペレーティング システムからリモートで接続している場合は、このサービスを使用して、ジャンプ ボックスとして使用する Windows VM へのアクセスを提供できます。
- Azure Container Instances と OpenSSH と互換性のある Secure Shell (SSH) クライアント。
注意
SSH、リモート デスクトップ プロトコル (RDP)、リモート デスクトップ サービス (RDS) は、ジャンプ ボックスをリモートで制御するために使用できる代替プロトコルです。
Azure Bastion を使用する
Azure Bastion は、仮想ネットワーク内にデプロイして、そのネットワーク内の VM (ジャンプ ボックスなど) に接続するサービスとしてのプラットフォーム (PaaS) オファリングです。 接続するには、Azure portal 内のブラウザーから RDP または SSH を使用します。 トランスポート層セキュリティ (TLS) プロトコルは、接続を保護します。 通常、VM のネットワーク インターフェイス カード (NIC) には関連付けられているパブリック IP アドレスがあります。 そのアドレスによって、VM に接続する方法が提供されます。 Azure Bastion を使用する場合、パブリック IP アドレスをジャンプ ボックスに関連付ける必要はありません。
AKS クラスターの API サーバーに接続するときは、信頼できる接続を使用することをお勧めします。 1 つのオプションとしては、Azure Bastion を使用して、Azure 環境内にあるジャンプ ボックスに接続する方法があります。 このシナリオでは、ジャンプ ボックスはハブ仮想ネットワークに存在します。 プライベート AKS クラスターは、スポーク仮想ネットワークに存在します。 仮想ネットワーク ピアリングは、ハブ ネットワークとスポーク ネットワークを接続します。
ジャンプ ボックスでは、Azure プライベート エンドポイント、プライベート DNS ゾーン、プライベート DNS ゾーン内の DNS A レコードを使用して、API サーバーの FQDN を解決できます。 AKS プライベート クラスターとプライベート エンドポイントを使用して、API サーバーの FQDN を仮想ネットワーク内からのみ解決できるようにします。 プライベート クラスターでは、AKS プライベート クラスターの仮想ネットワークにアクセスできるマシンでブラウザーを実行する必要があります。 詳細については、「Azure Bastion をホストするサブネット」を参照してください。
Note
ジャンプ ボックスの可用性と冗長性は非常に重要です。 ジャンプ ボックスには、常に到達できなければなりません。 同様に、プライベート AKS クラスターには常に到達できなければなりません。 ジャンプ ボックスの可用性と冗長性を実現するには、それらを可用性セットに配置し、少数の VM インスタンスで Virtual Machine Scale Sets を使用します。 詳細については、次のリソースを参照してください。
このアーキテクチャの Visio ファイルをダウンロードします。
データフロー
- ユーザーは、Azure Bastion と TLS 暗号化を使用した HTML5 ブラウザーを使用してジャンプ ボックスへの接続を試みます。
- ユーザーは、ジャンプ ボックスへの接続に RDP と SSH のどちらを使用するかをポータルから選択します。
- ユーザーは、Azure Bastion を使用してジャンプ ボックスにサインインします。 AKS プライベート クラスターへの接続の試行は、このジャンプ ボックスから行われます。 ハブ仮想ネットワークには、AKS プライベート DNS ゾーンへの仮想ネットワーク リンクがあり、プライベート クラスターの FQDN を解決します。
- ハブ仮想ネットワークとスポーク仮想ネットワークは、仮想ネットワーク ピアリングを使用して相互に通信します。
- プライベート AKS クラスターに到達するために、トラフィックは Azure バックボーンに入ります。 プライベート エンドポイントは、プライベート AKS クラスターへのプライベートで分離された接続を確立します。
- トラフィックがプライベート AKS クラスターの API サーバーに到達します。 その後、ユーザーはポッド、ノード、アプリケーションを管理できます。
Note
パブリック FQDN を明示的に無効にしない場合でも、プライベート クラスターの FQDN は仮想ネットワークの外部から解決できます。 AKS プライベート クラスターのパブリック FQDN を無効にする方法については、「既存のクラスターでパブリック FQDN を無効にする」を参照してください。
接続の問題のトラブルシューティング
プライベート クラスターに接続できない場合は、次の手順を行います。
仮想ネットワーク ピアリングを確認します。 このメカニズムは、2 つの仮想ネットワーク間のネットワーク間接続を提供するものです。 トラフィックがこれら 2 つのネットワーク間を流れるには、それらの間に仮想ネットワーク ピアリングを確立する必要があります。 仮想ネットワーク ピアリングを確立すると、仮想ネットワークのシステム ルート テーブルにルートが配置されます。 そのルートにより、宛先アドレス空間に到達するためのパスが提供されます。 仮想ネットワーク ピアリングのトラブルシューティングの詳細については、「仮想ネットワーク ピアリングの作成、変更、または削除」を参照してください。
注意
ジャンプ ボックスがプライベート エンドポイントおよび AKS プライベート クラスターと同じ仮想ネットワーク内にある場合は、仮想ネットワーク ピアリングは必要ありません。
プライベート DNS ゾーンへの仮想ネットワークのリンクを確認します。 仮想ネットワーク リンクでは、仮想ネットワーク内にある VM がプライベート DNS ゾーンに接続し、そのゾーン内の DNS レコードを解決する方法を提供します。 プライベート AKS クラスターに接続できない場合、またはプライベート クラスターの FQDN を解決できない場合は、仮想ネットワークにプライベート DNS ゾーンへの仮想ネットワーク リンクがあるかどうかを確認します。 プライベート DNS ゾーンの名前の形式は次のとおりです。
privatelink.<region>.azmk8s.io
仮想ネットワーク リンクのトラブルシューティングの詳細については、次のリソースを参照してください。
注意
ジャンプ ボックスがプライベート エンドポイントおよび AKS プライベート クラスターと同じ仮想ネットワーク内にある場合は、仮想ネットワーク リンクは必要ありません。 プライベート AKS クラスターを作成すると、そのプライベート AKS クラスターをホストする仮想ネットワークへの仮想ネットワーク リンクをもつプライベート DNS ゾーンが作成されます。
セキュリティの向上
AKS ワークロードとジャンプ ボックスをさらにセキュリティで保護するには、Just-In-Time (JIT) アクセスと特権アクセス ワークステーション (PAW) を使用できます。
Microsoft Defender for Cloud の JIT アクセス機能により、脅威の状況を軽減することができます。 多くの場合、攻撃者はジャンプ ボックスへの接続に使用する RDP ポートと SSH ポートをターゲットにしています。 JIT アクセス機能では、ネットワーク セキュリティ グループまたは Azure Firewall を使用して、ジャンプ ボックスへの受信トラフィックをすべてブロックします。 ユーザーが適切な RBAC アクセス許可を使用してジャンプ ボックスに接続しようとすると、この機能により、ネットワーク セキュリティ グループまたは Azure Firewall が構成され、選択したポートへの受信アクセスが、指定した時間の間許可されます。 その時間が経過すると、ポートはすべての受信トラフィックを拒否します。 JIT アクセスの詳細については、「Just-In-Time (JIT) VM アクセスについて」を参照してください。
PAW は、オペレーターに可能な限り高いセキュリティ構成を提供する、強化された物理デバイスです。 優れた特権アクセス戦略を採用するには、PAW を使用してジャンプ ボックスと AKS クラスターに接続します。 PAW は、電子メールや Web 閲覧など、多くの一般的な攻撃ベクトルをブロックするため、セキュリティ侵害は困難です。 PAW の詳細については、「特権アクセス ストーリーの一部としてのデバイスのセキュリティ保護」を参照してください。
VPN を使用する
VPN 接続では、オンプレミス環境から Azure へのハイブリッド接続を提供します。 AKS プライベート クラスターにアクセスするには、内部仮想ネットワーク インフラストラクチャへの接続が必要です。 プライベート クラスターの API サーバーは、仮想ネットワークの外部に到達できません。
VPN を使用すると、プライベート AKS クラスターに到達できます。 VPN 接続を使用すると、暗号化されたトンネルを介して Azure の仮想ネットワーク インフラストラクチャに到達できます。 仮想ネットワーク ゲートウェイに接続した後、ジャンプ ボックスに到達できます。 そこから、プライベート クラスターの API サーバーに接続できます。
このアーキテクチャの Visio ファイルをダウンロードします。
データフロー
- ユーザーは、オンプレミスのワークステーションからジャンプ ボックスへの RDP トラフィックまたは SSH トラフィックを開始します。
- ジャンプ ボックス トラフィックがカスタマー エッジ ルーターと VPN アプライアンスを出発します。 トラフィックは暗号化された IPsec トンネルを使用してインターネットを通過します。
- ジャンプ ボックス トラフィックが Azure 仮想ネットワーク インフラストラクチャのイングレス ポイントとエグレス ポイントである Azure の仮想ネットワーク ゲートウェイに到達します。
- トラフィックが仮想ネットワーク ゲートウェイを越えて移動すると、ジャンプ ボックスに到達します。 AKS プライベート クラスターへの接続の試行が、ジャンプ ボックスから行われます。 ハブ仮想ネットワークには、AKS プライベート DNS ゾーンへの仮想ネットワーク リンクがあり、プライベート クラスターの FQDN を解決します。
- ハブ仮想ネットワークとスポーク仮想ネットワークは、仮想ネットワーク ピアリングを使用して相互に通信します。
- プライベート AKS クラスターに到達するために、トラフィックは Azure バックボーンに入ります。 プライベート エンドポイントは、プライベート AKS クラスターへのプライベートで分離された接続を確立します。
- トラフィックがプライベート AKS クラスターの API サーバーに到達します。 その後、ユーザーはポッド、ノード、アプリケーションを管理できます。
ExpressRoute の使用
ExpressRoute は、オンプレミス環境から AKS プライベート クラスターへの接続を確立するために使用できるもう 1 つのオプションです。 ExpressRoute では、Border Gateway Protocol (BGP) を利用し、オンプレミス ネットワーク、Azure のインスタンス、および Microsoft パブリック アドレスの間のルートを交換します。 この交換により、Azure のサービスとしてのインフラストラクチャ (IaaS) リソースと、オンプレミス ワークステーションに、相互に対するパスが提供されます。 ExpressRoute は専用の分離された接続を提供しますが、エンタープライズ環境に対して、一定の帯域幅を保持し、遅延を生じさせます。
このアーキテクチャの Visio ファイルをダウンロードします。
データフロー
- ユーザーは、オンプレミスのワークステーションからジャンプ ボックスへの RDP トラフィックまたは SSH トラフィックを開始します。
- ジャンプ ボックス トラフィックは、顧客のエッジ ルーターから出発し、ファイバー接続上を伝わって、ExpressRoute 回線が存在する待ち合わせ場所に向かいます。 トラフィックは、そこで Microsoft Enterprise Edge (MSEE) デバイスに到達します。 続いて、Azure ファブリックに入ります。
- ジャンプ ボックス トラフィックが Azure 仮想ネットワーク インフラストラクチャのイングレス ポイントとエグレス ポイントである ExpressRoute ゲートウェイに到達します。
- トラフィックがジャンプ ボックスに到達します。 AKS プライベート クラスターへの接続の試行が、ジャンプ ボックスから行われます。 ハブ仮想ネットワークには、AKS プライベート DNS ゾーンへの仮想ネットワーク リンクがあり、プライベート クラスターの FQDN を解決します。
- ハブ仮想ネットワークとスポーク仮想ネットワークは、仮想ネットワーク ピアリングを使用して相互に通信します。
- プライベート AKS クラスターに到達するために、トラフィックは Azure バックボーンに入ります。 プライベート エンドポイントは、プライベート AKS クラスターへのプライベートで分離された接続を確立します。
- トラフィックがプライベート AKS クラスターの API サーバーに到達します。 その後、ユーザーはポッド、ノード、アプリケーションを管理できます。
Note
ExpressRoute では、サードパーティの接続プロバイダーは MSEE ルーターへのピアリング接続を提供する必要があります。 ExpressRoute トラフィックは暗号化されません。 詳細については、「Azure ExpressRoute とは」を参照してください。
aks コマンド呼び出しを実行する
AKS プライベート クラスターでは、クラスターの API サーバーにアクセスできる VM からプライベート クラスターに接続します。 Azure CLI コマンド aks command invoke
を使用して、kubectl
や helm
などのコマンドを、Azure API を介して AKS プライベート クラスターでリモートで実行できます。 aks command invoke
を使用すると、クラスター内の特定の名前空間に一時的なポッドが作成されます。 ポッドは、コマンドの実行中のみ存在します。 一時的なポッド内から、プライベート クラスターでコマンドを実行できます。
VPN、ExpressRoute、外部接続ソリューション、またはクラスターの仮想ネットワークに直接ピアリングされている仮想ネットワークがない場合に、プライベート クラスターに接続する別の方法として aks command invoke
を使用できます。 aks command invoke
を使用する前に、クラスターとノード プールで使用できるリソースを確認します。 リソースが不足している場合、一時的なポッドが作成できなくなることがあります。
詳細については、「`command invoke` を使用してプライベート Azure Kubernetes Service (AKS) クラスターにアクセスする」を参照してください。
サブネットに Cloud Shell を接続する
制御する仮想ネットワークに Cloud Shell をデプロイすると、その仮想ネットワーク内のリソースを操作できます。 通常、Cloud Shell インスタンスは、Microsoft が管理する仮想ネットワーク内にあるコンテナーにデプロイされます。 そのコンテナーは、他の仮想ネットワーク内のリソースを操作できません。 ただし、AKS プライベート クラスターをデプロイする場合、クラスターの API サーバーへの接続をもつ管理するサブネットに Cloud Shell を接続できます。 続いて、プライベート クラスターに接続できます。 詳細については、「Azure 仮想ネットワークに Cloud Shell をデプロイする」を参照してください。
テストに SSH と Visual Studio Code を使用する
SSH は、リモート ホスト上のファイルを安全に管理しアクセスするための方法を提供するプロトコルです。 認証プロセスの一環として、SSH では公開キーと秘密キーのペアを使用します。
ローカル コンピューターから、SSH と Visual Studio Code Remote - SSH 拡張機能を使用して、仮想ネットワーク内のジャンプ ボックスに接続できます。 SSH トンネルは暗号化され、ジャンプ ボックスに付いているパブリック IP アドレスで接続が終了します。 この方法では、Kubernetes マニフェスト ファイルを簡単に変更できます。
SSH 経由でジャンプ ボックスに接続する方法については、「SSH 経由でのリモート開発」を参照してください。
SSH 経由で VM に接続できず、プライベート クラスターを管理できない場合は、次の手順を行います。
- VM サブネットの受信ネットワーク セキュリティ グループのルールを確認します。 SSH 経由で Azure の VM に接続する場合、VM サブネットまたは NIC に接続されているネットワーク セキュリティ グループには既定のルールがあります。 このルールでは、Azure の外部から発信されるすべての受信インターネット トラフィックがブロックされます。 この問題を解決するには、新しい受信ネットワーク セキュリティ グループのルールを作成します。 新しいルールを構成して、ローカル コンピューターのパブリック IP アドレスから送信された SSH トラフィックを許可するようにします。
- 証明書の場所を確認します。 SSH を使用する場合は、証明書の配置が正しいことを確認します。 秘密キーは、ローカル コンピューター上の
C:\Users\User\.ssh\id_rsa
ディレクトリに存在する必要があります。 公開キーは、Azure の VM 上の~/.ssh/id_rsa.pub
ファイルに配置する必要があります。
注意
推奨事項は次のとおりです。
- パブリック IP アドレスを使用して運用環境のリソースに接続しないでください。 パブリック IP アドレスは、開発のシナリオとテストのシナリオでのみ使用します。 このセクションで前述したように、このような環境では、受信ネットワーク セキュリティ グループのルールを作成する必要があります。 そのルールでは、ローカル コンピューターのパブリック IP アドレスからのトラフィックが環境に入ることを許可する必要があります。 ネットワーク セキュリティ グループ ルールの詳細については、「ネットワーク セキュリティ グループの作成、変更、削除」を参照してください。
- SSH を使用して AKS ノードまたはコンテナーに直接接続しないでください。 言い換えると、管理ターゲット システムを管理ツールとして使用してはいけません。この方法は信頼できるものではないからです。 クラスターの外部にある専用のソリューションを使用することをお勧めします。
aks command invoke
が当該のデプロイに適しているかどうかを評価するときは、この点に注意してください。このコマンドを使用すると、プロキシされたアクセスについては、クラスター内に一時的なポッドが作成されるためです。
まとめ
- パブリック FQDN が無効になっていない場合は、インターネット経由で AKS クラスターの API サーバーにアクセスできます。
- Cloud Shell は、AKS クラスターへの接続に使用できる Azure portal の組み込みのコマンド ライン シェルです。
- プライベート クラスターにアクセスするためのより安全でロックダウンされた方法としては、Azure Bastion とプライベート エンドポイントを使用する方法があります。
- VPN と ExpressRoute はどちらも、プライベート AKS クラスターへのハイブリッド接続を可能にするのに役立ちます。
- 外部接続ソリューションがない場合は、リモートで
aks command invoke
を実行して AKS プライベート クラスターに接続できます。 - Cloud Shell は、管理する仮想ネットワークに直接デプロイできます。 Cloud Shell は、管理する仮想ネットワークからプライベート クラスターにアクセスできます。
- Visual Studio Code と SSH を使用してジャンプ ボックスに接続できます。 この方法では、ジャンプ ボックスへの接続が暗号化され、VM 内からプライベート クラスターにアクセスできるようになり、開発シナリオでマニフェスト ファイルを簡単に変更できます。 ただし、この接続方法では、環境内のパブリック IP アドレスが公開されます。
共同作成者
この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。
プリンシパルの作成者:
- Ayobami Ayodeji | プログラム マネージャー 2
- Ariel Ramirez | コンサルタント
- Bahram Rushenas | インキュベーション アーキテクト
その他の共同作成者:
- Shubham Agnihotri | コンサルタント
パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。