プライベート Azure Kubernetes Service (AKS) クラスターを作成する

プライベート クラスターでは、コントロール プレーンまたは API サーバーに、「RFC1918 - Address Allocation for Private Internet」 (RFC1918 - プライベート インターネットでのアドレス割り当て) で定義されている内部 IP アドレスがあります。 プライベート クラスターを使用することにより、API サーバーとノード プールの間のネットワーク トラフィックがプライベート ネットワークにのみ保持されるようにすることができます。

コントロール プレーンまたは API サーバーは、Azure Kubernetes Service (AKS) マネージドの Azure リソース グループの中にあります。 クラスターまたはノード プールはリソース グループに含まれています。 サーバーとクラスターまたはノード プールは、API サーバー仮想ネットワーク内の Azure Private Link サービスと、AKS クラスターのサブネットで公開されているプライベート エンドポイントを介して相互に通信できます。

プライベート AKS クラスターをプロビジョニングすると、既定では AKS によって、プライベート DNS ゾーンを持つプライベート FQDN と、対応する A レコードを持つ追加のパブリック FQDN が、Azure パブリック DNS に作成されます。 エージェント ノードはプライベート DNS ゾーンの A レコードを使用し続け、API サーバーとの通信のためにプライベート エンドポイントのプライベート IP アドレスを解決します。

この記事の目的は、プライベート リンクベースの AKS クラスターのデプロイに役立つことです。 必要なプライベート リンクやトンネルを使用せずに AKS クラスターを作成する場合は、「API Server VNet 統合を使用して Azure Kubernetes Service クラスターを作成する (プレビュー)」を参照してください。

利用可能なリージョン

プライベート クラスターは、AKS がサポートされているパブリック リージョン、Azure Government リージョン、および 21Vianet で運営される Microsoft Azure リージョンで使用できます。

前提条件

  • Azure CLI バージョン 2.28.0 以降。 az --version を実行してバージョンを見つけ、az upgrade を実行してバージョンをアップグレードします。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
  • aks-preview 拡張機能 0.5.29 以降。
  • Azure Resource Manager (ARM) または Azure REST API を使用する場合、AKS API バージョンは 2021-05-01 以降である必要があります。
  • Azure Private Link サービスは、Standard Azure Load Balancer でのみサポートされています。 Basic Azure Load Balancer はサポートされていません。
  • カスタム DNS サーバーを使用するには、カスタム DNS サーバーのアップストリーム DNS サーバーとして Azure パブリック IP アドレス 168.63.129.16 を追加し、このパブリック IP アドレスを 最初 の DNS サーバーとして追加してください。 Azure IP アドレスの詳細については、「IP アドレス 168.63.129.16 とは」を参照してください
    • クラスターの DNS ゾーンは、168.63.129.16 に転送するものにします。 ゾーン名の詳細については、「Azure サービス DNS ゾーンの構成」を参照してください。

Note

Azure Linux ノード プールが一般提供 (GA) になりました。 利点とデプロイの手順については、AKS 用 Azure Linux コンテナー ホストの概要に関する記事を参照してください。

制限事項

  • 認可済み IP 範囲は、プライベート API サーバー エンドポイントには適用できません。パブリック API サーバーにのみ適用されます
  • Azure Private Link サービスの制限事項は、プライベート クラスターに適用されます。
  • Azure DevOps Microsoft でホストするエージェントとプライベート クラスターの組み合わせはサポートされていません。 セルフホステッド エージェントを使用することを検討してください。
  • Azure Container Registry がプライベート AKS クラスターと連携できるようにする必要がある場合は、クラスター仮想ネットワークにコンテナー レジストリのプライベート リンクを設定するか、Container Registry 仮想ネットワークとプライベート クラスターの仮想ネットワークの間にピアリングを設定します。
  • 既存の AKS クラスターからプライベートクラスターへの変換はサポートされていません。
  • カスタマーのサブネット内でプライベート エンドポイントを削除または変更すると、クラスターが機能しなくなります。

プライベート AKS クラスターを作成する

リソース グループを作成する

az group create コマンドを使用して、リソース グループを作成します。 AKS クラスターに既存のリソース グループを使用することもできます。

az group create -l eastus -n myResourceGroup

既定の基本ネットワーク

--enable-private-cluster フラグを指定した az aks create コマンドを使用して、既定の基本ネットワークでプライベート クラスターを作成します。

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster  

[高度] ネットワーク

次のフラグを指定して az aks create コマンドを使用し、高度なネットワークを備えたプライベート クラスターを作成します。

az aks create \
    --resource-group <private-cluster-resource-group> \
    --name <private-cluster-name> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --network-plugin azure \
    --vnet-subnet-id <subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 

カスタム ドメインを使用する

内部でのみ解決できるカスタム ドメインを構成する場合は、「カスタム ドメインを使用する」を参照してください。

パブリック FQDN を無効にする

新しい AKS クラスターでパブリック FQDN を無効にする

--disable-public-fqdn フラグを使用してプライベート AKS クラスターを作成するときに、パブリック FQDN を無効にします。

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <private-dns-zone-mode> --disable-public-fqdn

既存のクラスターでパブリック FQDN を無効にする

--disable-public-fqdn フラグを指定した az aks update コマンドを使用して、既存の AKS クラスターでパブリック FQDN を無効にします。

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --disable-public-fqdn

プライベート DNS ゾーンを構成する

プライベート DNS ゾーンは、次のパラメーターを使用して構成できます。

  • system: これが既定値です。 --private-dns-zone 引数を省略すると、AKS によって、ノード リソース グループにプライベート DNS ゾーンが作成されます。
  • none: 既定値はパブリック DNS です。 AKS では、プライベート DNS ゾーンは作成されません。
  • CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID: これにより、Azure グローバル クラウド用に privatelink.<region>.azmk8s.io または <subzone>.privatelink.<region>.azmk8s.io の形式でプライベート DNS ゾーンを作成する必要があります。 今後使用するために、プライベート DNS ゾーンのリソース ID が必要になります。 プライベート DNS ゾーンの共同作成者およびネットワーク共同作成者のロールを持つユーザー割り当て ID またはサービス プリンシパルも必要です。 API サーバー VNet 統合を使用してデプロイする場合、プライベート DNS ゾーンでは、private.<region>.azmk8s.io または <subzone>.private.<region>.azmk8s.io の名前付け形式がサポートされます。
    • プライベート DNS ゾーンが AKS クラスターとは異なるサブスクリプションにある場合は、両方のサブスクリプションで Azure プロバイダーの Microsoft.ContainerServices を登録する必要があります。
    • "fqdn-subdomain" は、サブドメインの機能を privatelink.<region>.azmk8s.io に提供するためにのみ、"CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID" と共に使用できます。
    • AKS クラスターが Active Directory サービス プリンシパルで構成されている場合、AKS では、カスタム プライベート DNS ゾーンでのシステム割り当てマネージド ID の使用はサポートされません。
    • <subzone> を指定する場合、<subzone> 名には 32 文字の制限があります。

Note

CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID は、Azure CLI に加えて、ARM テンプレートを使用しても構成できます。 privateDNSZone は、次の例に示すように、プライベート DNZ ゾーン resourceID を受け入れます。

properties.apiServerAccessProfile.privateDNSZone.
"apiServerAccessProfile": {
"enablePrivateCluster": true,
"privateDNSZone": "system|none|[resourceId(..., 'Microsoft.Network/privateDnsZones', 'privatelink.<region>.azmk8s.io']"
}

重要

クラスターの作成後に CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID を変更することはできません。また、削除することもできません。 そうしないと、クラスターでアップグレード操作の実行に問題が発生します。

プライベート DNS ゾーンがあるプライベート AKS クラスターを作成する

次のフラグを指定した az aks create コマンドを使用して、プライベート DNS ゾーンを持つプライベート AKS クラスターを作成します。

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone [system|none]

カスタム プライベート DNS ゾーンまたはプライベート DNS サブゾーンを持つプライベート AKS クラスターを作成する

次のフラグを指定した az aks create コマンドを使用して、カスタム プライベート DNS ゾーンまたはサブゾーンを持つプライベート AKS クラスターを作成します。

# The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.azmk8s.io"

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone or custom private dns subzone resourceID>

カスタム プライベート DNS ゾーンとカスタム サブドメインがあるプライベート AKS クラスターを作成する

次のフラグを指定した az aks create コマンドを使用して、カスタム プライベート DNS ゾーンおよびサブドメインを持つプライベート AKS クラスターを作成します。

# The custom private DNS zone name should be in one of the following formats: "privatelink.<region>.azmk8s.io" or "<subzone>.privatelink.<region>.azmk8s.io"

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone resourceID> --fqdn-subdomain <subdomain>

プライベート クラスターをプライベート DNS ゾーンからパブリックに更新する

Note

この機能には、aks-preview 拡張機能のバージョン >= 0.5.97 が必要です

次のフラグを指定した az aks update コマンドを使用して、プライベート クラスターを byo または system から none に更新します。

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --private-dns-zone none

Note

byo または system から none にのみ更新できます。 それ以外の更新値の組み合わせはサポートされていません。

プライベート クラスターに接続するための選択肢

API サーバー エンドポイントには、パブリック IP アドレスがありません。 API サーバーを管理するには、AKS クラスターの Azure Virtual Network (VNet) にアクセスできる VM を使用する必要があります。 プライベート クラスターへのネットワーク接続を確立するには、いくつかの選択肢があります。

注意

AKS クラスターと同じ VNet に VM を作成するのが最も簡単な方法です。 Express Route と VPN にはコストがかかり、ネットワークがさらに複雑になります。 仮想ネットワーク ピアリングを利用する場合、重複する範囲がないようにネットワーク CIDR 範囲を計画する必要があります。

仮想ネットワーク ピアリング

仮想ネットワーク ピアリングはプライベート クラスターにアクセスする方法の 1 つです。 仮想ネットワーク ピアリングを使用するには、仮想ネットワークとプライベート DNS ゾーンの間にリンクを設定する必要があります。

  1. お使いのブラウザーで Azure portal に移動します。
  2. Azure portal からノード リソース グループに移動します。
  3. プライベート DNS ゾーンを選択します。
  4. 左側のウィンドウで、[仮想ネットワーク] を選択します。
  5. 新しいリンクを作成して、VM の仮想ネットワークをプライベート DNS ゾーンに追加します。 DNS ゾーンリンクが利用可能になるまで数分かかります。
  6. Azure portal で、クラスターの仮想ネットワークが含まれるリソース グループに移動します。
  7. 右側のウィンドウで、仮想ネットワークを選択します。 仮想ネットワーク名は aks-vnet-* という形式になっています。
  8. 左側のウィンドウで、 [ピアリング] を選択します。
  9. [追加] を選択して VM の仮想ネットワークを追加し、次にピアリングを作成します。 詳細については、「[仮想ネットワーク ピアリング](../virtual-network/virtual-network-peering-overview.md)」をご覧ください。

カスタム DNS を使用したハブとスポーク

ハブとスポークのアーキテクチャは、Azure でネットワークをデプロイするためによく使用されます。 これらのデプロイの多くでは、オンプレミスと Azure ベースの DNS 解決が可能となるよう、スポーク VNet の DNS 設定は中央の DNS フォワーダーを参照するように構成されます。 このようなネットワーク環境に AKS クラスターをデプロイする場合、いくつかの特別な考慮事項があります。

Private cluster hub and spoke

  • 既定では、プライベート クラスターがプロビジョニングされると、プライベート エンドポイント (1) とプライベート DNS ゾーン (2) がクラスター管理対象リソース グループに作成されます。 クラスターによりプライベート ゾーンの A レコードが使用され、API サーバーとの通信のためにプライベート エンドポイントの IP が解決されます。
  • プライベート DNS ゾーンは、クラスター ノードが接続されている VNet にのみリンクされます (3)。 つまり、プライベート エンドポイントは、そのリンクされた VNet 内のホストによってのみ解決できます。 VNet にカスタム DNS が一切構成されていないシナリオ (既定) では、これは問題なく機能します。リンクされているためにプライベート DNS ゾーン内のレコードを解決できる DNS の 168.63.129.16 が、ホストによって指定されるためです。
  • クラスターを含む VNet にカスタム DNS 設定があるシナリオでは (4)、プライベート DNS ゾーンがカスタム DNS リゾルバーを含む VNet にリンクされていない限り (5)、クラスターのデプロイは失敗します。 このリンクは、クラスターのプロビジョニング中にプライベート ゾーンを作成した後に手動で、またはイベントベースのデプロイ メカニズム (Azure Event Grid や Azure Functions など) を使用したゾーンの作成の検出時に自動で、作成することができます。 初期デプロイの間にクラスターの障害を回避するため、プライベート DNS ゾーンのリソース ID を使ってクラスターをデプロイできます。 これは、リソースの種類 Microsoft.ContainerService/managedCluster と API バージョン 2022-07-01 でのみ機能します。 ARM テンプレートまたは Bicep リソース定義での古いバージョンの使用はサポートされていません。

Note

条件付き転送では、サブドメインはサポートされていません。

Note

kubernet で独自のルート テーブルを使用し、プライベート クラスターで独自の DNS を使用する場合、クラスターの作成は失敗します。 作成を成功させるためには、クラスターの作成に失敗した後、ノード リソース グループの RouteTable をサブネットに関連付ける必要があります。

プライベート エンドポイント接続を使用する

プライベート エンドポイントを設定して、VNet がプライベート クラスターと通信するためにピアリングする必要がないようにすることができます。 プライベート エンドポイントを使用するには、仮想ネットワークに新しいプライベート エンドポイントを作成してから、仮想ネットワークと新しいプライベート DNS ゾーンの間にリンクを作成します。

重要

仮想ネットワークがカスタム DNS サーバーで構成されている場合は、環境に適切なプライベート DNS を設定する必要があります。 詳細については、仮想ネットワークの名前解決のドキュメントを参照してください。

プライベート エンドポイントの作成のリソース

VNet にプライベート エンドポイント リソースを作成します。

  1. お使いのブラウザーで Azure portal に移動します。
  2. Azure portal メニューから [リソースの作成] を選択します。
  3. [プライベート エンドポイント] を検索して、[作成] > [プライベート エンドポイント] を選択します。
  4. [作成] を選択します。
  5. [基本] タブで、次のオプションを設定します。
    • プロジェクトの詳細:
      • Azure のサブスクリプションを選択します
      • 仮想ネットワークがある Azure リソース グループを選択します。
    • インスタンスの詳細:
      • プライベート エンドポイントの [名前] (myPrivateEndpoint など) を入力します。
      • プライベート エンドポイントの [リージョン] を選択します。

重要

選択するリージョンは、接続元にする仮想ネットワークと同じであることを確認します。そうしないと、[構成] タブに仮想ネットワークが表示されません。

  1. [次へ: リソース] を選択し、次のオプションを設定します。
    • 接続方法: [マイ ディレクトリ内の Azure リソースに接続する] を選択します。
    • サブスクリプション: プライベート クラスターがあるサブスクリプションを選択します。
    • リソースの種類: Microsoft.ContainerService/managedClusters を選択します。
    • リソース: プライベート クラスターを選択します。
    • ターゲット サブリソース: [管理] を選択します。
  2. [次へ: Virtual Network] を選択し、次のオプションを設定します。
    • ネットワーク:
      • 仮想ネットワーク:仮想ネットワークを選択します。
      • サブネット: サブネットを選択します。
  3. [次へ: DNS]>[次へ: タグ] を選択し、(オプションで) 必要に応じて Key-Value を設定します。
  4. [次: 確認および作成]>[作成] を選択します。

リソースが作成されたら、将来使用するためにプライベート エンドポイントのプライベート IP アドレスを記録します。

プライベート DNS ゾーンの作成

プライベート エンドポイントが作成されたら、プライベート クラスターによって作成されたプライベート DNS ゾーンと同じ名前で、新しいプライベート DNS ゾーンを作成します。

  1. Azure portal でノード リソース グループに移動します。
  2. プライベート DNS ゾーンを作成して、記録します。
    • プライベート DNS ゾーンの名前。*.privatelink.<region>.azmk8s.io のパターンに従います。
    • A レコードの名前 (プライベート DNS 名を除く)。
    • 有効期限 (TTL)。
  3. Azure portal から [リソースの作成] を選択します。
  4. プライベート DNS ゾーンを検索し、[作成] > [プライベート DNS ゾーン] を選択します。
  5. [基本] タブで、次のオプションを設定します。
    • プロジェクトの詳細:
      • サブスクリプションを選択します。
      • プライベート エンドポイントを作成したリソース グループを選択します。
    • インスタンスの詳細:
      • 前の手順で取得した DNS ゾーンの名前を入力します。
      • リージョンの既定値は、リソース グループの場所です。
  6. [確認と作成]>[作成] の順に選択します。

A レコードを作成する

プライベート DNS ゾーンが作成されたら、プライベート エンドポイントをプライベート クラスターに関連付ける A レコードを作成します。

  1. 前の手順で作成したプライベート DNS ゾーンに移動します。
  2. [概要] ページで、[レコード セット] を選択します。
  3. [レコード セットの追加] タブで、次のオプションを設定します。
    • 名前: プライベート クラスターの DNS ゾーンの A レコードから取得した名前を入力します。
    • 種類: [A - アドレス レコード]を選択します。
    • TTL: プライベート クラスターの DNS ゾーンの A レコードの番号を入力します。
    • TTL ユニット: プライベート クラスターの DNS ゾーンの A レコードと一致するようにドロップダウン値を変更します。
    • IP アドレス: 作成したプライベート エンドポイントの IP アドレスを入力します。

重要

A レコードを作成する際は、完全修飾ドメイン名 (FQDN) ではなく、名前のみを使用します。

A レコードが作成されたら、プライベート DNS ゾーンを、プライベート クラスターにアクセスする仮想ネットワークにリンクします。

  1. 前の手順で作成したプライベート DNS ゾーンに移動します。
  2. 左側のウィンドウから、[仮想ネットワーク リンク] を選択します。
  3. [追加] を選択し、次のオプションを設定します。
    • リンク名: 仮想ネットワークの名前を入力します。
    • サブスクリプション: プライベート クラスターがあるサブスクリプションを選択します。
    • 仮想ネットワーク: プライベート クラスターの仮想ネットワークを選択します。
  4. [OK] を選択して、リンクを作成します。

この操作が完了するまで数分かかる場合があります。 仮想ネットワーク リンクが作成されたら、手順 2 で使用した [仮想ネットワーク リンク] タブからアクセスできます。

警告

プライベート クラスターが停止して再起動されると、プライベート クラスターの元のプライベート リンク サービスが削除され、再作成されるため、プライベート エンドポイントとプライベート クラスター間の接続が切断されます。 この問題を解決するには、プライベート クラスターにリンクされているユーザーが作成したプライベート エンドポイントを削除して、再作成します。 再作成されたプライベート エンドポイントに新しい IP アドレスが含まれる場合は、DNS レコードも更新する必要があります。

次の手順

関連付けられているベスト プラクティスについては、AKS でのネットワーク接続とセキュリティに関するベスト プラクティスに関するページを参照してください。