Calico を使用した Pod 間通信の構成

最終公開日 : Oct 02, 2026
Kubernetes でネットワークを構成することは困難です。クラスターシステム内の多数のノードと Pod を処理する必要があります。ネットワークを構成する際に、対処すべき4つの問題があります。
  • コンテナ間 (集合的にサービスを提供する) 通信
  • Pod 間通信
  • Pod からサービスへの通信
  • 外部からサービスへの通信

Pod 間通信

デフォルトでは、Docker はホストマシン上に docker0 と呼ばれる仮想ブリッジを作成し、それにプライベートネットワーク範囲を割り当てます。作成される各コンテナには、このブリッジに仮想イーサネットデバイスが接続されます。仮想イーサネットデバイスは、ネットワーク範囲からの IP を使用して、コンテナ内の eth0 にマッピングされます。このプロセスは、Docker を実行している各ホストで発生します。これらのホスト間には連携がないため、ネットワーク範囲が衝突する可能性があります。
このため、コンテナは接続されているコンテナとのみ通信できます。 同じ仮想ブリッジに。他のホスト上の他のコンテナと通信するには、ポートマッピングに依存する必要があります。つまり、ホストマシン上のポートを各コンテナに割り当て、そのポート上のすべてのトラフィックをそのコンテナに転送する必要があります。
アプリケーションのローカル IP アドレスはホストマシン上のホスト IP アドレスとポートに変換されるため、Kubernetes はすべてのノードが NAT なしで相互に通信できると想定しています。また、コンテナが自身に対して認識する IP アドレスは、他のコンテナがそのコンテナに対して認識する IP アドレスと同じであると想定しています。このアプローチにより、仮想マシンからコンテナへのアプリケーションの移植も容易になります。
Calico は、Kubernetes にこれらの機能を提供する多くの異なるネットワークオプションの1つです。

カリコ

Calico は、クラウドネットワークを簡素化、スケーリング、および保護するように設計されています。このオープンソースフレームワークは クラウド全体のクラスター向けに Kubernetes ネットワークとネットワークポリシーを可能にします。Kubernetes エコシステム内で、Calico は最も人気のあるネットワークフレームワークまたはプラグインの1つとして台頭し始めており、多くの企業が大規模に利用しています。
Calico は純粋な IP ネットワークファブリックを使用して高性能な Kubernetes ネットワークを提供し、そのポリシーエンジンは高レベルのネットワークポリシー管理のための開発者の意図を強制します。Calico はレイヤー3ネットワーク機能を提供し、各ノードに仮想ルーターを関連付けます。これにより、ホスト間および Pod 間ネットワークが可能になります。Calico は、BGP を介したゾーン境界の確立、または IP over IP または VXLAN メソッドを介したカプセル化を可能にします。

Kubernetes と Calico の統合

Calicoは、完全に分散されたレイヤー3アーキテクチャ上に構築されたCNIプラグインを介してKubernetesと統合されます。そのため、単一のラップトップから大規模なエンタープライズまでスムーズに拡張できます。IPレイヤーに依存しており、既存のツールでデバッグするのが比較的簡単です。

Calicoでネットワークを構成する

まず、以下のコマンドを使用してCalicoでKubernetesクラスターを起動します。
> kubeadm init --pod-network-cidr=192.168.0.0/16
> export KUBECONFIG=/etc/kubernetes/admin.conf
> kubectl apply -f calico.yaml
CalicoをCNIとして使用してマスターノードが作成されます。マスターノードが起動して実行されたら、joinコマンドを使用して他のノードをマスターに参加させることができます。
Kubernetesマスターノードの一部であるCalicoプロセスは次のとおりです。
  • カリコ etcd
    kube-system calico-etcd-j4rwc 1/1 現在、正常に稼働しています
  • Calicoコントローラー
    kube-system calico-kube-controllers-679568f47c-vz69g 1/1 現在、正常に稼働しています
  • Calicoノード
    kube-system calico-node-ct6c9 2/2 実行中
注:
ノードをKubernetesクラスターに参加させると、新しいCalicoノードがKubernetesノードで初期化されます。

Ingress NetScalerでBGPピアを構成する

クラスターにCalicoネットワークを確立した後でアプリケーションをデプロイするたびに、KubernetesはCalicoのIPアドレスプールからアプリケーションに関連付けられたサービスにIPアドレスを割り当てます。
Border Gateway Protocol (BGP) は、リモートノードを識別するために autonomous system number (AS number) を使用します。AS番号は、IANAによって割り当てられる特別な番号で、主にBGPで、独自のルーティングポリシーを使用する単一のネットワーク管理下にあるネットワークを識別するために使用されます。

Ingress NetScaler を使用して Kubernetes で BGP を構成する

YAMLファイルを使用して、kubectl create コマンドでリモートノードのBGP構成を適用できます。YAMLファイルには、ピアIPアドレスとAS番号を追加する必要があります。ピアIPアドレスはIngress NetScalerのIPアドレスであり、AS番号はIngress NetScalerで使用されているAS番号です。

クラスターのAS番号を取得する

次の図に示すように、calicoctl コマンドを使用して、KubernetesクラスターでCalico BGPが使用するAS番号を取得できます。
AS番号を取得

グローバルBGPピアを構成する

calicoctl ユーティリティを使用して、CalicoノードをグローバルBGPスピーカーとピアリングできます。この種のピアはグローバルピアと呼ばれます。
次の定義で、bgp.yml というYAML定義ファイルを作成します。

apiVersion: projectcalico.org/v3  # This is the version of Calico
kind: BGPPeer  # BGPPeer specifies that its Global peering.
metadata:
    name: bgppeer-global-3040  # The name of the configuration
spec:
    peerIP: 10.102.33.208  # IP address of the Ingress NetScaler
    asNumber: 500  # AS number configured on the Ingress NetScaler
次のコマンドを使用して定義ファイルをデプロイします。
> kubectl create -f bgp.yml

Ingress NetScaler にBGP構成を追加する

以下を実行します。
  1. NetScaler コマンドラインインターフェイスにログオンします。
  2. 次のコマンドを使用してBGP機能を有効にします。
    > en feature bgp
      Done
  3. vtysh と入力し、Enter を押します。
    > vtysh
    ns#
  4. conf t コマンドを使用して、config terminal に変更します。
    ns#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    ns(config)#
  5. デモンストレーション目的で、AS番号を500としてBGPルートを追加します。AS番号には任意の数字を使用できます。
    ns(config)# router bgp 500
    ns(config-router)#
  6. 次のコマンドを使用してネイバーを追加します。
    ns(config-router)# Neighbor 10.102.33.198 remote-as 64512
    ns(config-router)# Neighbor 10.102.22.202 remote-as 64512
  7. 次のコマンドを使用して実行中の設定を確認します。
    ns(config-router)#show running-config
    !
    log syslog
    log record-priority
    !
    ns route-install bgp
    !
    interface lo0
     ip adress 127.0.0.1/8
     ipv6 address fe80: :1/64
     ipv6 address : :1/128
    !
    interface vlan0
     ip address 10.102.33.208/24
     ipv6 address fe80::2cf6:beff:fe94:9f63/64
    !
    router bgp 500
     max-paths ebgp 8
     max-paths ibgp 8
     neighbor 10.102.33.198 remote-as 64512
     neighbor 10.102.33.202 remote-as 64512
    !
    end
    ns(config-router)#
    このサンプルでは、CalicoのAS番号は64512ですが、この番号は要件に応じて変更できます。
  8. 次のコマンドを使用して、NetScalerルーティングテーブルにBGPルートをインストールします。
    ns(config)# ns route-install bgp
    ns(config)#
    exit
    ns#exit
     Done
  9. 次のコマンドを使用して、ルートを確認し、ルーティングテーブルに追加します。
    ルートを表示
ルートがインストールされると、NetScalerはKubernetesクラスター内に存在するサービスと通信できるようになります。
概要

トラブルシューティング

Kubernetesクラスターのマスターノードで、calicoctl スクリプトを使用してBGP設定を確認できます。

ピアIPアドレスとAS番号の設定を表示する

次のコマンドを使用して、ピアIPアドレスとAS番号の設定を表示できます。
>./calicoctl.1 get bgpPeer
NAME                    PEERIP          NODE        ASN
bgppeer-global-3040  10.102.33.208    (global)      500

BGPノードのステータスを表示する

以下のコマンドを使用して、BGPノードのステータスを確認できます。
>calicoctl node status
IPV4 BGP status
+---------------+-----------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+---------------+-----------+-------+----------+-------------+
| 10.102.33.208 | global | up | 16:38:14 | Established |
+---------------+-----------+-------+----------+-------------+