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

Container Service for Kubernetes:Service quick start

最終更新日:Feb 25, 2026

Kubernetes において、サービス (Service) は、一連の Pod 上で実行されるアプリケーションをネットワークサービスとして公開する抽象化オブジェクトです。サービスはこれらの Pod に対して統一された DNS 名を提供し、Pod 間でのロードバランシングを可能にします。本トピックでは、Kubernetes サービスの仕組み、重要な検討事項、およびサービスタイプの選択に関する推奨事項について説明します。

利用規約

サービス

Pod が作成された直後に直接アクセスすると、以下の問題が発生します:

  • デプロイメントなどのコントローラーは、任意のタイミングで Pod を削除・再作成する可能性があり、アクセス結果が予測不能になります。

  • Pod の IP アドレスは起動時に動的に割り当てられるため、事前に把握できません。

  • アプリケーションは通常、同一のプログラムイメージを実行する複数の Pod から構成されます。各 Pod を個別にアクセスするのは非現実的です。

これらの課題に対処するため、Kubernetes では Service オブジェクトが提供されています。Service オブジェクトは、Pod に対して安定したネットワークインターフェースおよび永続的な IP アドレスを提供します。Service はラベルセレクターを使用して対象となる Pod のグループを識別し、ロードバランシングによりトラフィックをすべての Pod に均等に分散します。このアプローチにより、Pod への直接アクセスに伴う問題が解消され、アプリケーションの高可用性および運用効率が確保されます。

エンドポイント (Endpoint)

Kubernetes において、エンドポイント (Endpoint) は、サービスディスカバリーのために Service が利用する重要なリソースです。エンドポイントは、Service のセレクターに一致する Pod の変更をリアルタイムで追跡します。Pod が削除または再作成されると、その IP アドレスが変更されます。エンドポイントは、即座に格納されている Pod の IP アドレスおよびポート情報を更新し、Service が最新の Pod にトラフィックをルーティングできるように保証します。

IPVS

IPVS は、Linux カーネルの LVS 機能に基づくロードバランサです。仮想 IP アドレスを作成し、トラフィックをバックエンドの Pod に分散することで、Service トラフィックを処理します。

Kubernetes では、Service を作成すると、kube-proxy が IPVS テーブルにルールを設定します。これらのルールは、Kubernetes ノード上の仮想 IP アドレスからバックエンドの Pod へのトラフィック転送方法を定義します。クラスターノード上で現在の IPVS ルーティングテーブルおよびルールを確認するには、ipvsadm コマンドを使用します。

重要

ipvsadm ツールがインストールされていない場合は、sudo yum install ipvsadm コマンドを実行してインストールできます。

iptables

iptables は、設定可能なテーブルおよびチェーンのセットを介して動作します。各チェーンには、パケットフローを制御する一連のルールが含まれます。

Kubernetes では、Service を作成すると、kube-proxy が iptables に該当するルールを追加します。これらのルールは、Service のラベルセレクターに基づいてパケットを適切な Pod に転送します。クラスターノード上で現在の iptables 転送テーブルおよびルールを確認するには、iptables -t nat -L コマンドを使用します。

サービスタイプ

重要

Cloud Controller Manager のバージョンが v2.5.0 以降の場合、コンソールから Classic Load Balancer (CLB) インスタンスを作成する機能はホワイトリスト制限付きとなります。この機能は従量課金方式のみをサポートします。コンソールから CLB タイプの Service を作成するには、クォータプラットフォームにて申請を行ってください。

名称

説明

シナリオ

課金

ClusterIP

デフォルトのサービスタイプです。ClusterIP サービスは、クラスター内からのみアクセス可能な仮想 IP アドレスを割り当てます。

サービスがクラスター内でのみ通信を行い、外部に公開する必要がない場合に使用します。

たとえば、クラスター内でデプロイされたフロントエンドアプリケーションの Pod が、同じクラスター内でデプロイされたバックエンドデータベースにアクセスする必要がある場合、バックエンドデータベースは ClusterIP サービスとして実行できます。

無料です。

NodePort

NodePort サービスは、クラスター内の各ノードでポートを開きます。これにより、<NodeIP>:<NodePort> の形式で外部からサービスにアクセスできます。このメカニズムは、OSI モデルのレイヤー 4(トランスポート層)で動作します。

一時的または低トラフィックのアプリケーションの場合、外部ネットワークにポートを公開できます。

たとえば、テスト中に Web アプリケーションをデプロイおよびデバッグする際に NodePort サービスを使用できます。LoadBalancer サービスとは異なり、NodePort サービスはノード間のロードバランシングを提供しません。トラフィックは単一のノードに送信されるため、リソースのボトルネックを引き起こしやすくなります。

このサービスタイプは無料です。パブリックネットワークへのアクセスを有効にするには、ノードに EIP をバインドできます。EIP の課金については、「課金の概要」をご参照ください。

LoadBalancer

LoadBalancer サービスタイプは、NodePort サービスタイプを基盤とし、外部ロードバランサを追加したものです。これにより、外部トラフィックをクラスター内の複数の Pod に円滑に分散できます。Service は、クライアントがサービスにアクセスするために使用できる外部 IP アドレスを自動的に提供します。レイヤー 4(トランスポート層)の TCP および UDP トラフィック、およびレイヤー 7(アプリケーション層)の HTTP および HTTPS トラフィック管理をサポートします。

パブリッククラウド上でアプリケーションを実行し、安定的かつ容易に管理可能な外部エントリポイントを必要とする場合に使用します。

たとえば、大量の外部トラフィックを処理し、高可用性を確保する必要がある本番環境向けのパブリックサービス(Web アプリケーションや API サービスなど)に、このサービスタイプを使用できます。

重要

Kubernetes クラスター内からサービスにアクセスする場合は、ClusterIP サービスの使用を推奨します。これは、最も安定的で効率的かつ設計に準拠したアプローチです。

一方、クラスター内から LoadBalancer サービスに直接アクセスすると、結果が一貫しなくなる場合があります。その可用性は、以下のような複数の要因に依存します:

  • クラウドプロバイダーによる LoadBalancer の実装。

  • クラスターで使用されるコンテナーネットワークプラグイン(CNI)(例:Flannel、Terway、Cilium)。

  • kube-proxy の動作モード(iptables または IPVS)およびバージョン。

  • サービスの externalTrafficPolicy 設定(Cluster または Local)。

したがって、クラスター内から LoadBalancer の IP アドレスにアクセスした場合の動作は、異なる環境や Kubernetes のバージョンによって大きく異なる可能性があります。場合によっては、IP アドレスに到達できない状態になることもあります。

例:Flannel + IPVS + externalTrafficPolicy=Local

Flannel を CNI プラグインとして使用するクラスターにおいて、LoadBalancer サービスが externalTrafficPolicy: Local で構成されている場合:

  • バックエンドの Pod をホストしていないクラスターノードから LoadBalancer の外部 IP アドレスにアクセスした場合:

    • Kubernetes バージョン 1.24 より前:リクエストが正しく転送されず、アクセスに失敗します。

    • Kubernetes 1.24 以降:kube-proxyCluster 動作へフォールバックすることにより、Local モードでもクラスター内からのアクセスをサポートします。リクエストは他のノード上のバックエンド Pod に正常に転送され、アクセスが成功します。

Server Load Balancer インスタンスに対して課金されます。詳細については、

CLB の課金の概要および

NLB の課金ルールをご参照ください。

ヘッドレスサービス (Headless Service)

ヘッドレスサービスには仮想 IP アドレスがありません。このサービスに対する DNS クエリを実行すると、単一のサービス IP アドレスではなく、Pod の IP アドレスの一覧が返されます。これにより、特定の Pod を直接検出および接続できます。

アプリケーションがエージェントやロードバランサを経由せず、特定のバックエンド Pod と直接通信する必要がある場合に使用します。

たとえば、ClickHouse のようなステートフルアプリケーションをデプロイする場合、ヘッドレスサービスを使用して、アプリケーションの Pod が各 ClickHouse Pod に直接アクセスできるようにできます。これにより、Pod がデータを均等に読み取ったり、選択的に書き込んだりすることが可能になり、データ処理効率が向上します。

無料です。

ExternalName

ExternalName サービスは、クラスター内の内部サービス名を外部ドメイン名にマッピングします。このマッピングにより、クラスター内の Pod がサービス名を使用して外部ドメインにアクセスできるようになります。

クラスターがパブリックドメイン名で公開されているサービスにアクセスする必要がある場合に使用します。

たとえば、アプリケーションの Pod が外部データベースのドメインにアクセスする必要がある場合、ExternalName サービスを使用して、そのドメインを内部サービス名にマッピングできます。これにより、クラスター内からサービス名を使用して直接アクセスできます。

無料です。

サービスの仕組み

ClusterIP

  • 作成および割り当て

    ACK クラスターで ClusterIP サービスを作成すると、クラスターのコントロールプレーンが、クラスター内からのみアクセス可能な仮想 IP アドレス(ClusterIP)を割り当てます。

  • トラフィック転送

    ClusterIP にアクセスすると、kube-proxy がトラフィックをキャプチャし、ラウンドロビン方式でバックエンドの Pod に転送します。

  • サービスディスカバリー

    ClusterIP サービスを作成すると、CoreDNS が DNS レコードを登録します。これにより、サービス名による名前解決を通じてアクセスできるようになります。フォーマットは service-name.namespace.svc.cluster.local:port であり、たとえば nginx.default.svc.cluster.local:80 のようになります。

  • Pod のラベルおよびエンドポイントの追跡

    各サービスは、どの Pod がそのバックエンドに属するかを決定するラベルセレクターで定義されます。

    クラスターのコントロールプレーンは、Pod の変更をリアルタイムで監視します。サービスのラベルセレクターに一致する Pod が追加、更新、または削除されると、コントロールプレーンがエンドポイントを更新します。

image

NodePort

  • 作成および割り当て

    NodePort サービスを作成すると、クラスターは各ノードでポート(NodePort)を開き、外部からのアクセスを許可します。

  • トラフィック転送

    kube-proxy が NodePort をリッスンします。NodePort は、デフォルト範囲である 30000 ~ 32767 の中から自動的に選択されます。外部リクエストを ClusterIP にルーティングし、その後バックエンドの Pod に転送します。

  • 外部アクセス

    ノードの IP アドレスおよび静的な NodePort を <NodeIP>:<NodePort> の形式で外部エンドポイントとして使用して、サービスにアクセスできます。

image

LoadBalancer

  • 作成および割り当て

    LoadBalancer サービスを作成すると、クラスターのコントロールプレーンがロードバランサーサービスと自動的に連携し、トラフィック処理用のロードバランサーインスタンスを作成します。詳細については、「既存の Server Load Balancer を使用した Service によるアプリケーションの公開」および「自動作成される Server Load Balancer を使用した Service によるアプリケーションの公開」をご参照ください。

  • トラフィック転送

    外部トラフィックがロードバランサーインスタンスの外部 IP アドレスに到達すると、ノードのポートにルーティングされ、その後 kube-proxy によってバックエンドの Pod に転送されます。

  • ルーティングおよびヘルスチェックの構成

    ロードバランサーは、リスニングポートを自動的に構成し、ヘルスチェックを実行して、トラフィックが健全な Pod にのみルーティングされるように保証します。

image

外部トラフィックポリシー

LoadBalancer サービスおよび NodePort サービスは、externalTrafficPolicy 構成をサポートしており、外部トラフィックがサービスにルーティングされる方法を制御できます。この設定は、Terway を使用するクラスターと Flannel を使用するクラスターで異なる動作を示します。

説明

Container Service for Kubernetes (ACK) コンソール にログインします。クラスター ページで、対象のクラスター名をクリックします。基本情報 タブで、クラスターで使用されているコンテナーネットワークプラグインを確認できます。

Flannel ネットワークプラグイン

image

比較項目

Local

Cluster

ロードバランサーバックエンドへの添付動作

バックエンドの Pod をホストするノードのみがロードバランサーバックエンドに添付されます。

クラスター内のすべてのノードがロードバランサーバックエンドに添付されます。

ロードバランサーのクォータ使用量

このモードでは、ロードバランサーのクォータ使用量が少なくなります。詳細については、「クォータ制限」をご参照ください。

クラスター内のすべてのノードをロードバランサーバックエンドに添付すると、大量のクォータが消費されます。詳細については、「クォータ制限」をご参照ください。

クラスター内からのサービスへのアクセス

サービスのバックエンド Pod をホストするノードからのみアクセスできます。

クラスター内の任意のノードからアクセスできます。

Pod のロードバランシング

デフォルトでは、Pod のロードバランシングは行われません。

Pod 間でトラフィックを分散するには、Service に service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wrr" アノテーションを追加して、wrr スケジューラを指定できます。

デフォルトで Pod のロードバランシングが行われます。

ソース IP の保持

サポートされています。

サポートされていません。

セッションの永続化

サポートされています。

サポートされていません。

シナリオ

クライアントのソース IP アドレスの保持が必要なアプリケーション(例:ログ収集)に適しています。

高可用性が重要であり、ソース IP アドレスの保持が不要なシナリオ(例:大規模な Web アプリケーションクラスター)に適しています。

Terway ネットワークプラグイン

image

比較項目

Local

Cluster

ロードバランサーバックエンドへの添付動作

Pod が直接ロードバランサーバックエンドに添付されます。

ロードバランサーのクォータ使用量

アプリケーションの Pod のみが添付されるため、クォータの消費量が少なくなります。詳細については、「クォータ制限」をご参照ください。

クラスター内からのサービスへのアクセス

クラスター内からサービスにアクセスする場合、トラフィックはノード上の kube-proxy を経由し、externalTrafficPolicy 設定の影響を受けます。サービスのバックエンド Pod をホストするノードからのみアクセスできます。

クラスター内の任意のノードからアクセスできます。

Pod のロードバランシング

デフォルトで Pod のロードバランシングが行われます。

ソース IP の保持

サポートされています。

セッションの永続化

サポートされています。

注意事項

サービスのロードバランシング機能を使用する前に、以下の注意事項をご確認ください。詳細については、「サービスのロードバランシング構成に関する注意事項」をご参照ください。

関連ドキュメント