1.4. Pod の通信方法


Pod は、IP アドレスを使用して通信し、Dynamic Name System (DNS) を使用して Pod またはサービスの IP アドレスを検出します。クラスターは、どの通信を許可するかを制御するさまざまなポリシータイプを使用します。Pod は、Pod 間およびサービスと Pod 間の 2 つの方法で通信します。

1.4.1. Pod 間通信

Pod 間通信とは、クラスター内で Pod が相互に通信する機能です。これは、マイクロサービスと分散アプリケーションが動作するために不可欠な機能です。

クラスター内の各 Pod には、他の Pod と直接通信するために使用する一意の IP アドレスが割り当てられます。Pod 間通信は、Pod がデータを交換したり、共同でタスクを実行したりする必要があるクラスター内通信に役立ちます。たとえば、Pod A は Pod B の IP アドレスを使用して Pod B に要求を直接送信できます。Pod は、ネットワークアドレス変換 (NAT) なしでフラットネットワーク経由で通信できます。これにより、ノードをまたいだ Pod 間のシームレスな通信が可能になります。

1.4.1.1. 例: Pod 間通信の制御

複数の Pod を持つマイクロサービスベースのアプリケーションでは、フロントエンド Pod はバックエンド Pod と通信してデータを取得する必要があります。直接またはサービスを介して Pod 間通信を使用することで、これらの Pod は効率的に情報を交換できます。

Pod 間の通信を制御し、保護するために、ネットワーク制御を定義できます。そのような制御は、Pod が相互に対話する方法をラベルおよびセレクターに基づき指定することで、セキュリティーとコンプライアンスの要件を適用します。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-some-pods
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: app
  ingress:
    - from:
        - podSelector:
            matchLabels:
              role: backend
      ports:
        - protocol: TCP
          port: 80
Copy to Clipboard Toggle word wrap

1.4.2. サービスと Pod 間の通信

サービスと Pod 間の通信により、サービスがトラフィックを適切な Pod に確実にルーティングできるようになります。サービスは、Pod の論理セットを定義し、IP アドレスや DNS 名などの安定したエンドポイントを提供するオブジェクトです。Pod の IP アドレスは変更される可能性があります。サービスは Pod の IP アドレスを抽象化して、IP アドレスが変更された場合でもアプリケーションコンポーネントに一貫してアクセスできるようにします。

サービスと Pod 間の通信の主な概念は次のとおりです。

  • エンドポイント: エンドポイントは、サービスに関連付けられている Pod の IP アドレスとポートを定義します。
  • セレクター: セレクターは、キーと値のペアなどのラベルを使用して、サービスがターゲットとするオブジェクトセットを選択するための条件を定義します。
  • サービス: サービスは、Pod セットに対して安定した IP アドレスと DNS 名を提供します。この抽象化により、他のコンポーネントは個々の Pod ではなくサービスと通信できるようになります。
  • サービスディスカバリー: DNS によりサービスが検出可能になります。サービスが作成されると、DNS 名が割り当てられます。他の Pod はこの DNS 名を検出し、それを使用してサービスと通信します。
  • サービスタイプ: サービスタイプは、クラスター内外でサービスがどのように公開されるかを制御します。

    • ClusterIP は、内部クラスター IP 上でサービスを公開します。これはデフォルトのサービスタイプであり、クラスター内からのみサービスにアクセスできるようになります。
    • NodePort は、各ノードの IP のサービスを静的ポートで公開することにより、外部トラフィックがサービスにアクセスできるようにします。
    • LoadBalancer は、クラウドプロバイダーのロードバランサーを使用してサービスを外部に公開します。

サービスはセレクターを使用して、トラフィックを受信する Pod を識別します。セレクターは Pod のラベルを照合して、どの Pod がサービスの一部であるかを決定します。例: セレクター app: myapp を持つサービスは、ラベル app: myapp を持つすべての Pod にトラフィックをルーティングします。

エンドポイントは、サービスセレクターに一致する Pod の現在の IP アドレスを反映するように動的に更新されます。OpenShift Container Platform はこれらのエンドポイントを維持し、サービスがトラフィックを正しい Pod にルーティングするようにします。

通信フローとは、Kubernetes のサービスがトラフィックを適切な Pod にルーティングするときに発生する一連の手順とインタラクションを指します。サービスと Pod 間の通信の一般的な通信フローは次のとおりです。

  • サービスの作成: サービスの作成時に、サービスタイプ、サービスがリッスンするポート、およびセレクターラベルを定義します。

      apiVersion: v1
      kind: Service
      metadata:
        name: my-service
      spec:
        selector:
          app: myapp
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
    Copy to Clipboard Toggle word wrap
  • DNS 解決: 各 Pod には、他の Pod がサービスと通信するために使用できる DNS 名があります。たとえば、my-app namespace 内の my-service という名前のサービスの DNS 名は my-service.my-app.svc.cluster.local になります。
  • トラフィックルーティング: Pod がサービスの DNS 名に要求を送信すると、OpenShift Container Platform はその名前をサービスの ClusterIP に解決します。次に、サービスはエンドポイントを使用して、セレクターに一致する Pod の 1 つにトラフィックをルーティングします。
  • 負荷分散: サービスは基本的な負荷分散も提供します。着信トラフィックを、セレクターに一致するすべての Pod に分散します。これにより、1 つの Pod にトラフィックが過剰に集中して負荷がかかることがなくなります。

1.4.2.1. 例: サービスと Pod 間の通信を制御する

クラスターは、フロントエンドおよびバックエンドの 2 つのコンポーネントを持つマイクロサービスベースのアプリケーションを実行しています。フロントエンドは、データを取得するためにバックエンドと通信する必要があります。

手順

  1. バックエンドサービスを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: backend
    spec:
      selector:
        app: backend
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
    Copy to Clipboard Toggle word wrap
  2. バックエンド Pod を設定します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: backend-pod
      labels:
        app: backend
    spec:
      containers:
        - name: backend-container
          image: my-backend-image
          ports:
            - containerPort: 8080
    Copy to Clipboard Toggle word wrap
  3. フロントエンド通信を確立します。

    これでフロントエンド Pod は、DNS 名 backend.default.svc.cluster.local を使用してバックエンドサービスと通信できるようになりました。このサービスは、トラフィックが確実にバックエンド Pod の 1 つにルーティングされるようにします。

サービスと Pod 間の通信により、Pod IP の管理の複雑さが抽象化され、クラスター内で信頼性が高く効率的な通信が確保されます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat