Citrix ADC ingress controller

Calico を使用してポッド間通信を構成する

Kubernetes でネットワークを構成するのは難しい作業です。そのためには、クラスタシステム内の多数のノードと Pod を処理する必要があります。ネットワークを構成する際には、次の 4 つの問題に対処する必要があります。

  • コンテナからコンテナへ (サービスをまとめて提供する) 通信
  • Pod から Pod への通信
  • Pod からサービスへの通信
  • サービス通信の外部から

Pod から Pod への通信

デフォルトでは、dockerはホストマシンにdocker0という仮想ブリッジを作成し、プライベートネットワーク範囲を割り当てます。作成されるコンテナごとに、仮想イーサネットデバイスがこのブリッジに接続されます。仮想イーサネットデバイスは、ネットワーク範囲の IP を使用して、コンテナ内のeth0にマッピングされます。このプロセスは docker を実行しているホストごとに発生します。これらのホスト間には調整がないため、ネットワーク範囲が衝突する可能性があります。

このため、 コンテナは同じ仮想ブリッジに接続されたコンテナとのみ通信できます。他のホスト上の他のコンテナと通信するには、ポートマッピングに依存する必要があります。つまり、ホストマシン上のポートを各コンテナに割り当て、そのポート上のすべてのトラフィックをそのコンテナに転送する必要があります。

アプリケーションのローカル IP アドレスはホストマシン上のホスト IP アドレスとポートに変換されるため、Kubernetes はすべてのノードが NAT なしで相互に通信できると想定します。また、コンテナ自体が認識する IP アドレスは、他のコンテナが認識するコンテナの IP アドレスと同じ IP アドレスであると想定しています。また、このアプローチにより、アプリケーションを仮想マシンからコンテナに容易に移植できます。

Calico は、Kubernetes にこれらの機能を提供するさまざまなネットワークオプションの 1 つです。

Calico

Calico は、クラウドネットワークの簡素化、拡張、保護を目的として設計されています。 オープンソースフレームワークにより、クラウド全体のクラスタに対して Kubernetes ネットワークとネットワークポリシーが可能になります。Kubernetesエコシステムの中で、Calicoは最も広く使用されているネットワークフレームワークまたはプラグインの1つとして登場し始めており、多くの企業がCalicoを大規模に使用しています。

Calico は、純粋な IP ネットワーキングファブリックを使用してハイパフォーマンスな Kubernetes ネットワーキングを提供し、そのポリシーエンジンは、高レベルのネットワークポリシー管理に対する開発者の意図を強制します。Calico はレイヤ 3 ネットワーキング機能を提供し、仮想ルータを各ノードに関連付けます。これにより、ホスト間およびポッドからポッドへのネットワークが可能になります。Calico では、BGP によるゾーン境界の確立、または IP on IP または VXLAN 方式によるカプセル化が可能です。

Kubernetes とカリコの統合

Calico は、完全に分散されたレイヤー 3 アーキテクチャ上に構築された CNI プラグインを通じて Kubernetes と統合します。したがって、1台のラップトップから大企業までスムーズに拡張できます。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 プロセスは次のとおりです。

  • キャリコなど

    kube-system calico-etcd-j4rwc 1/1 Running

  • Calico コントローラー

    kube-system calico-kube-controllers-679568f47c-vz69g 1/1 Running

  • Calico ノード

    kube-system calico-node-ct6c9 2/2 Running

注:

ノードを Kubernetes クラスタに参加させると、Kubernetes ノードで新しい Calico ノードが開始されます。

イングレスCitrix ADCでBGPピアを構成する

クラスターに Calico ネットワークを確立した後にアプリケーションをデプロイするたびに、Kubernetes は Calico の IP アドレスプールから IP アドレスをアプリケーションに関連付けられたサービスに割り当てます。

ボーダーゲートウェイプロトコル (BGP) は、 [自律システム番号 (AS 番号)](https://en.wikipedia.org/wiki/Autonomous_system_(Internet)を使用してリモートノードを識別します。AS 番号は、一意のルーティングポリシーを使用する単一のネットワーク管理下でネットワークを識別するために、主に BGP で使用される IANA によって割り当てられる特別な番号です。

イングレスCitrix ADCを使用してKubernetesでBGPを構成する

YAML ファイルを使用すると、 kubectl create コマンドを使用してリモートノードの BGP 設定を適用できます。YAML ファイルで、ピア IP アドレスと AS 番号を追加する必要があります。ピアIPアドレスはイングレスCitrix ADC IPアドレスで、AS番号はイングレスCitrix ADCで使用される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 Citrix ADC
    asNumber: 500  # AS number configured on the Ingress Citrix ADC
<!--NeedCopy-->

以下のコマンドを使用して、定義ファイルをデプロイします。

> kubectl create -f bgp.yml

イングレス Citrix ADC に BGP 構成を追加する

以下の手順に従います。

  1. Citrix ADC コマンドラインインターフェイスにログオンします。

  2. 次のコマンドを実行して、BGP機能を有効にします:

    > en feature bgp
      Done
    
  3. vtysh と入力して Enterキーを押します。

    > vtysh
    ns#
    
  4. conf tコマンドを使用して config ターミナルに変更します。

    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. 次のコマンドを使用して、Citrix ADC ルーティングテーブルへの BGP ルートをインストールします。

    ns(config)# ns route-install bgp
    ns(config)# 
    exit
    ns#exit
     Done
    
  9. 次のコマンドを使用して、ルートを確認し、ルーティングテーブルに追加します。

    Sh ルート

ルートがインストールされると、Citrix ADCはKubernetesクラスターに存在するサービスと通信できるようになります。

概要

トラブルシューティング

calicoctl スクリプトを使用して、Kubernetes クラスタのマスターノードの 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 |
+---------------+-----------+-------+----------+-------------+
Calico を使用してポッド間通信を構成する