すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:既存クラスターの API サーバーへの内部ドメイン名アクセスの有効化

最終更新日:Jan 09, 2026

既存の ACK Pro cluster の内部ドメイン名の名前解決を有効にすると、kubelet や kube-proxy などのノードコンポーネントは、内部ドメイン名を介してエンドポイントを動的に解決することで、API サーバーに直接アクセスできるようになります。この方法は、Server Load Balancer (SLB) の固定 IP アドレスを介して API サーバーにアクセスする方法に比べて最適化されています。これにより、大規模クラスターにおけるノードコンポーネントから API サーバーへのアクセスのパフォーマンスと可用性が向上します。

適用範囲

  • この機能は、Kubernetes バージョン 1.30 以降を実行している ACK Pro cluster でのみ利用できます。

  • この機能は、ハイブリッドクラウドノードプールでは有効にできません。

  • 以下のクラスターでは、API サーバーの内部ドメイン名がデフォルトで有効になっています。手動で有効にする必要はありません。

    • 2024 年 11 月以降に作成され、Kubernetes バージョン 1.20 以降を実行しているクラスター。

    • DescribeClusterDetail 操作を呼び出す際に internal_dns_config.enabled パラメーターが true に設定されている場合、この機能は有効になっています。

変更点と影響

  • ネットワークパスの変更とセキュリティグループへの影響:

    この機能を有効にすると、ノードが API サーバーにアクセスするための通信パスが、API サーバーの SLB の固定 IP アドレスから、内部ドメイン名による直接接続に切り替わります。

    • 変更前 (SLB 転送):ノード -> SLB IP -> API サーバー

    • 変更後 (内部ドメイン名による直接接続):ノード -> (内部ドメイン名の名前解決) -> API サーバーの Elastic Network Interface (ENI)

    これは、トラフィックが SLB をバイパスし、API サーバーの ENI に直接アクセスすることを意味します。したがって、ノードのセキュリティグループが ENI のセキュリティグループとの間のトラフィックを許可していることを確認してください。

  • パブリックネットワークアクセスの依存関係:この機能を有効にすると、API サーバーのデフォルトのアウトバウンドルートがクラスターの VPC に変更されます。クラスターに OIDC Issuer URL またはパブリック IP アドレスに依存する外部 Webhook が設定されている場合は、クラスターの VPC がパブリックネットワークアクセスを持っていることを確認してください。そうしないと、API サーバーは外部サービスに接続できません。

  • 設定の適用範囲:

    • この機能を有効にすると、kubelet と kube-proxy が API サーバーにアクセスするためのパスが、SLB の固定 IP アドレスから API サーバーの ENI への直接接続に切り替わります。

    • `default` 名前空間の kubernetes サービスのエンドポイントは、API サーバーの SLB の IP アドレスを指す状態から、API サーバーの ENI の IP アドレスを指す状態に切り替わります。これにより、クラスター内の Operator などのアプリケーションが直接接続できるようになります。

前提条件

開始する前に、以下のチェックを実行してください。そうしないと、ノードが API サーバーに接続できなくなります。

1. セキュリティグループ設定の確認

  • 直接接続を有効にすると、トラフィックは API サーバーの ENI に直接送信されます。ENI のセキュリティグループのセキュリティグループルールが直接接続を許可していることを確認してください。詳細については、「セキュリティグループの管理」をご参照ください。

    セキュリティグループのタイプ

    確認項目

    推奨される操作

    エンタープライズセキュリティグループ

    インバウンドルール

    トラフィックを明示的に許可する必要があります。クラスターの VPC CIDR ブロックおよびすべてのセカンダリ CIDR ブロックからの TCP ポート 6443 へのアクセスを許可するルールを手動で追加してください。

    標準セキュリティグループ

    グループ内接続

    • ノードまたはコンテナーが API サーバーと同じセキュリティグループにある場合、デフォルトで通信できます。

    • 異なるセキュリティグループにある場合は、それらの間でトラフィックを許可するようにセキュリティグループを設定するか、対応する CIDR ブロックからポート 6443 へのアクセスを許可してください。

  • ノードおよびノードの ENI のセキュリティグループのアウトバウンドルールを確認し、ポート 6443 へのアクセスが拒否されていないことを確認してください。

2. Webhook と OIDC のパブリックネットワーク依存関係の確認

  • パブリック URL に依存する Webhook を確認します。

    kubectl get validatingwebhookconfiguration -o yaml -A | grep url
    kubectl get mutatingwebhookconfiguration -o yaml -A | grep url
  • ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Add-ons をクリックします。API サーバーを見つけ、その設定で OIDC 関連のパラメーターを確認し、パブリックアドレスが使用されているかどうかを確認します。

上記で述べたパブリックネットワークアクセスの依存関係が API サーバーにあり、クラスターの VPC にパブリックネットワークの出口がない場合は、まずNAT Gateway を設定して、インターネットトラフィックに統一された出口を提供する必要があります。

3. DNS 名前解決設定の確認

API サーバーのドメイン名の名前解決は、VPC のデフォルトの内部 DNS サーバー (100.100.2.136 および 100.100.2.138) に依存します。

  • デフォルト設定:ノードがデフォルトの DNS 設定を使用している場合、追加の操作は必要ありません。

  • カスタム DNS:ノードまたはコンテナーでカスタム DNS サーバーを設定する場合、その DNS サーバーが *.aliyuncs.com または API サーバーのドメイン名のリクエストを、名前解決のために上記の Alibaba Cloud 内部 DNS サーバーに転送できることを確認してください。

ステップ 1: API サーバーの内部ドメインの名前解決を有効にする

ModifyCluster OpenAPI 操作を呼び出して、クラスターの VPC に内部 DNS レコードを作成します。このセクションの手順は、ご利用のノードがデフォルトの Alibaba Cloud 内部 DNS を使用していることを前提としています。

ご利用のノードまたはコンテナーがカスタム DNS サーバーを使用している場合は、「カスタム DNS の設定」をご参照ください。
  1. ModifyCluster 操作を呼び出し、以下のパラメーターを指定します。

    {
        "control_plane_endpoints_config": {
            "internal_dns_config": {
                "enabled": true
            }
        }
    }
  2. 更新中、API サーバーは自動的に再起動します。再起動が完了したら、DescribeClusterDetail 操作を呼び出し、internal_dns_config.enabled パラメーターが true に設定されていることを確認して、設定が有効になったことを確認します。

ステップ 2:kube-proxy 設定の変更

API サーバーのドメイン名が有効になった後、kube-proxy の接続アドレスを IP アドレスからドメイン名に切り替えます。

  1. ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Configurations > ConfigMaps を選択します。

  2. 名前空間を kube-system に設定し、kube-proxy-worker と kube-proxy-worker-windows を見つけます。

  3. kubeconfig フィールドで、server パラメーターを以下のフォーマットに一致するように更新します。

    https://apiserver.{cluster_id}.{region_id}.cs.aliyuncs.com:6443
    • {cluster_id}:クラスター ID。

    • {region_id}:cn-hangzhou など、クラスターのリージョン ID。

ステップ 3:内部ドメイン名が有効であることの確認

既存のノードを変更する前に、新しいノードまたは Pod を作成して、新しいリソースでドメイン名の名前解決が機能することを確認します。

  • ノードプールまたはLingjun ノードプール内のノード:

    クラスターで新しいノードをスケールアウトします。新しいノード上の kubelet と kube-proxy は自動的に内部ドメイン名を使用します。

    ノードが準備完了になったら、ノードにログインし、以下のコマンドを実行して、kubelet 設定ファイル内の server アドレスが内部ドメイン名であることを確認します。

    cat /etc/kubernetes/kubelet.conf
  • 仮想ノード

    ACK Virtual Node コンポーネントはバージョン v2.14.0 以降である必要があります。

    内部ドメイン名を有効にすると、新しい ECI Pod と ACS Pod はデフォルトで内部ドメイン名を介して API サーバーと対話します。

    この時点で、新しい Pod を追加すると、Ready 状態になるはずです。

ステップ 4:変更を適用するための既存の kube-proxy Pod の再作成

kube-proxy の設定が更新された後、既存の Pod を再作成して新しい設定を読み込みます。

  1. ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Workloads > Daemon Sets を選択します。

  2. 名前空間を kube-system に設定します。`kube-proxy-worker` と `kube-proxy-worker-windows` を見つけてクリックします。[Pod] タブで、それらの Pod を 1 つずつ削除します。この操作により Pod が再作成され、新しい設定が読み込まれます。

    重要

    サービスの安定性を確保するため、Pod は段階的にバッチで削除してください。次のバッチを削除する前に、Pod が正常に再作成されたことを確認してください。

ステップ 5:既存ノード上の kubelet 設定の変更

既存ノードの kubelet 設定を更新し、サービスを再起動して、内部ドメイン名アクセスへの切り替えを完了します。クラスターの安定性を確保するため、このセクションは単一ノードでの検証とバッチ操作の 2 つの部分に分かれています。

  1. 単一ノードでの検証

    1. 既存のノードを選択します。ノードにログインし、以下のコマンドを実行して、API サーバーのアドレスを IP アドレスからドメイン名に切り替え、kubelet を再起動します。

      • {clb-ip}: /etc/kubernetes/kubelet.conf ファイルに設定されている CLB の IP アドレス。

      • {cluster-id}:クラスター ID

      • {region-id}:リージョン ID

      # 以下のワンライナーコマンドは、設定を置き換えてサービスを再起動します。
      sed -i.bak 's#https://{slb-ip}:6443#https://apiserver.{cluster-id}.{region-id}.cs.aliyuncs.com:6443#g' /etc/kubernetes/kubelet.conf && systemctl restart kubelet

      例:

      sed -i.bak 's#https://10.XX.XX.1:6443#https://apiserver.c34f3cdb665954e2f8e8e40a824a*****.cn-hangzhou.cs.aliyuncs.com:6443#g' /etc/kubernetes/kubelet.conf && systemctl restart kubelet
    2. コマンドが実行された後、コンソールでノードを監視し、Ready 状態であることを確認します。

  2. 残りのノードでバッチ操作を実行します。

    単一ノードでの検証が成功した後、コンソールのバッチ操作機能を使用して、残りの既存ノードに対してバッチ操作を実行します。

    1. ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、ノード > [ノード] を選択します。

    2. 操作を実行するノードを選択します。ページの下部で [バッチ操作] をクリックし、[シェルコマンドの実行] を選択します。プロンプトに従ってコマンドを設定し、バッチタスクを送信します。

      # 以下のコマンドを入力します。
      sed -i.bak 's#https://{slb-ip}:6443#https://apiserver.{cluster-id}.{region-id}.cs.aliyuncs.com:6443#g' /etc/kubernetes/kubelet.conf && systemctl restart kubelet
    3. タスクが完了するのを待ちます。ノードのステータスが正常であることを確認した後、すべての既存ノードが更新されるまでこの操作を繰り返します。

付録

カスタム DNS の設定

ご利用のノードまたはコンテナーがカスタム DNS サーバーで設定されている場合は、このセクションを参照して API サーバーの内部ドメイン名の名前解決を有効にしてください。

API サーバーのドメイン名の名前解決は、VPC に設定されているデフォルトの内部 DNS サービスアドレス 100.100.2.136 および 100.100.2.138 に依存します。カスタム DNS サーバーがこのドメイン名を解決する必要がある場合、DNS サーバーが配置されている VPC を、内部ドメイン名の名前解決に使用されるプライベートゾーンに関連付ける必要があります。

操作手順

ModifyCluster OpenAPI 操作を呼び出して、クラスター設定を変更します。API サーバーのアクセス最適化を有効にする際に、bind_vpcs パラメーターを使用してカスタム DNS サーバーの VPC を関連付けます。

この手順は、DNS サーバーをホストする VPC とクラスターが同じアカウントにあることを前提としています。異なるアカウントに属している場合は、「アカウント間での VPC の関連付け」を参照して、内部 DNS の名前解決を一元管理してください (ステップ 1 から 5 まで)。
  1. ModifyCluster OpenAPI 操作を呼び出し、以下の内容を指定します。

    ["vpc-id"] に、DNS サーバーの VPC ID を入力します。これは配列です。複数の VPC ID はコンマ (,) で区切ります。
    {
        "control_plane_endpoints_config": {
            "internal_dns_config": {
                "enabled": true,
                "bind_vpcs": ["vpc-id"] 
            }
        }
    }
  2. 設定が有効になった後、DescribeClusterDetail 操作を呼び出して設定を確認できます。

  3. 次のステップ:

    • 初めて内部ドメイン名アクセスを有効にする場合は、ステップ 2 から ステップ 5 に進み、後続の設定更新と検証を完了してください。

    • すでに内部ドメイン名アクセスを有効にしており、関連付けられた VPC (bind_vpcs) を追加するだけの場合は、操作は完了です。

関連ドキュメント