Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

AWS EKS の VPC から CN2 への通信

概要 ジュニパークラウドネイティブのContrail Networking(CN2)リリース23.1は、AWS仮想プライベートクラウド(VPC)ネットワーク、外部ネットワーク、およびCN2クラスター間の通信をサポートしています。この機能は、CNIとしてCN2を使用するAWS EKS環境にのみ適用されます。この記事では、CN2がこの機能を実装する方法に関する情報を提供します。

Kubernetes と VPC ネットワークについて

通常、VPCからAmazon Elastic Kubernetes Service(EKS)で実行されているオーバーレイネットワークのKubernetesワークロードにはアクセスできません。AWS VPC から Kubernetes への通信を実現するには、Kubernetes クラスターのホスト ネットワークを VPC に公開する必要があります。一部のパブリッククラウドのKubernetesディストリビューションでは、この機能をサポートするソリューションを提供していますが、これらのソリューションはKubernetesワークロードではなく、従来のVMワークロードに合わせて調整されています。その結果、これらのソリューションには次の欠点があります。

  • ノードインターフェイスでは、ポッドIPをセカンダリIPアドレスとして設定する必要があります。これにより、ノードにリソース制約が課され、サポートできるポッドの数が減少します。

  • サービスはパブリックロードバランサを通じて公開されます。サービスが作成されるたびに、ロードバランサーがインスタンス化プロセスを開始し、サービスが公開されるまでの時間が長くなる可能性があります。

CN2リリース23.1は、ゲートウェイサービスインスタンス(GSI)を導入することでこの問題に対処します。GSIは、Amazon Web Service(AWS)とKubernetesのリソースの集合体で、CN2とVPCおよび外部ネットワークをシームレスに相互接続します。GSIマニフェストを適用すると、CN2はAmazon EKSクラスター内のポッドとサービス間、および同じVPC内のワークロード間の通信を促進します。

前提 条件

VPCからCN2への通信を有効にするには、以下が必要です。

  • cRPD のライセンス。ライセンスを購入するには、 https://www.juniper.net/us/en/products/routers/containerized-routing-protocol-daemon-crpd.html

    • 名前空間内でライセンスをEKSクラスターにインストールするSecretcontrail-gsi必要があります。

    • シークレットには、 の crpd ライセンス キーに基づく base64 エンコード バージョンのライセンスが含まれている必要があります。データ。

    • ライセンスを参照する例 Secret を以下に示します。

  • CN2リリース23.1以降を実行するEKSクラスター

  • AWS アイデンティティおよびアクセス管理(IAM)ロールへのアクセス。IAM ロールを引き受けるサービス アカウントを構成する方法については、次のリンク参照してください。

  • EKS クラスター内のノードには、 のラベル core.juniper.net/crpd-node: ""が必要です。

    • コントローラは、以下のキー core.juniper.net/crpd-nodeを持つノード上のcRPDコンテナのみをスケジュールします。このラベルをノードに追加すると、CN2コントローラ(vRouterを含む)は、このノードでは実行しません。これにより、適切な数のノードが cRPD コンテナ用に予約されます。

ゲートウェイ サービス インスタンス コンポーネント

ゲートウェイ サービス インスタンス(GSI)マニフェストの例を次に示します。

awsRegioniamRoleARN、および vpcID フィールドはユーザー定義であることに注意してください。このiamRoleARN機能の前提条件の一部として作成する IAM ロールの値は Amazon リソース名 (ARN) です。

GSIマニフェストを適用すると、以下を作成および管理するカスタムコントローラが作成されます。

AWS リソース:

  • トランジット ゲートウェイ:トランジット ゲートウェイは、VPC を相互接続できるネットワーク トランジット ハブです。トランジット ゲートウェイは、1 つ以上の VPC を持 Attachments つことができます。

  • 接続アタッチメント:トランジットゲートウェイ接続アタッチメントは、VPCで実行されているトランジットゲートウェイとサードパーティの仮想アプライアンス(JCNR)との間に接続を確立します。接続添付ファイルを作成した後、1つ以上の GRE(汎用ルーティングカプセル化)トンネル、または Transit Gateway Connect ピアを Connect 添付ファイルに作成して、トランジットゲートウェイとサードパーティー製アプライアンスを接続できます。Transit Gateway Connect ピアは、ルーティングの冗長性を提供する GRE トンネル上の 2 つの BGP ピアリング セッションで構成されています。トランジットゲートウェイリソースをインストールすると、CN2はこのプロセスを自動的に実行します。

  • VPC アタッチメント: VPC Attachment をトランジット ゲートウェイにアタッチします。VPC をトランジットゲートウェイにアタッチすると、そのゲートウェイにリソースとルーティングルールが適用されます。

Kubernetes リソース:

  • 接続されたピア:トランジット ゲートウェイの接続ピアは、トランジット ゲートウェイとサードパーティー製アプライアンスまたは JCNR 間の通信を容易にする GRE トンネルです。

CN2 GSIリソース:

  • ジュニパークラウドネイティブルーター(JCNR):JCNRは、EC2インスタンスと他のAWSリソースとCN2を実行するEKSクラスター間のゲートウェイとして機能するCN2の拡張です。

JCNR は、以下のことを行います。

  • マルチプロトコルBGP(MP-BGP)を介してCN2制御ノードに接続し、データプレーンでMPLSoUDPを使用します。

  • CN2 EKSノード間でアクティブ/アクティブL3およびL4ロードバランシングを提供する

JCNR とその接続ピアは、最大 4 つのインスタンスに拡張できます。この場合、トランジット ゲートウェイは JCNR 間でアクティブ/アクティブ L3 および L4 ロード バランシングを提供します。JCNR機能の例として、公開したいVNにaを追加 label すると、JCNRはそのVNのサブネットをトランジットゲートウェイにアドバタイズします。VN のサブネットとトランジットゲートウェイ間のネクストホップルートが VPC のルーティングテーブルに追加されます。その結果、VN は VPC のネットワークにルーティングされ、VPC 内のワークロードからアクセスできます。この機能は、従来の物理 SDN ゲートウェイと似ています。トランジット ゲートウェイと JCNR は、EKS クラスターと AWS 環境の残りの部分との間の物理ゲートウェイとして機能します hostNetwork。欠点はありません。

次の図は、典型的な Amazon EKS クラスターでの接続を示しています。CN2はVPCルーティングテーブルを自動的に生成します。

図 1:EKS クラスタ トラフィック フロー EKS Cluster Traffic Flow

カスタム リソースの実装

CN2は、以下のカスタムリソース(RR)を通じてこの機能を実装しています。

  • TransitGateway: AWS TransitGateway リソースを表します。

  • Route: VPC ルーティング テーブル内のエントリーを表します。A Route は、ユーザー入力を必要としない内部で作成されたオブジェクトです。

  • ConnectedPeer:トランジット ゲートウェイとの BGP セッションを確立するアプライアンス(CN2 の JCNR)を表します。A ConnectedPeer は、ユーザー入力を必要としない内部で作成されたオブジェクトです。

以下に、マニフェストの例を TransitGateway 示します。

仕様の詳細については、以下のコマンドを TransitGateway 使用します。

カスタム コントローラの実装

GSIは、クライアント/サーバープラグインを備えたカスタムKubernetesコントローラを使用して実装されます。サーバー側のカスタムコントローラは、CN2コントロールプレーンノード上で動作します。クライアントは JCNR と並行して動作します。これらのコントローラは、 および GSI オブジェクトを TransitGateway 適用すると自動的に設定されます。

トラブルシューティング

このセクションでは、さまざまな ConnectedPeer 接続の問題、カスタム コントローラの問題、ワークロードの到達可能性に関する問題のトラブルシューティングに関する情報を提供します。

カスタム コントローラに関する問題:

  • GSI マニフェストを適用した後、GSI マニフェスト(サーバー、クライアント)に関連付けられたすべてのカスタム コントローラー ポッドがアクティブであることを確認します。

    CLI出力には、通常のEKS導入で3つのアクティブコントローラーポッドが表示されます。正しいCLI出力が届かない場合は、以下のコマンドを使用して、GSIプラグインがインストールされていることを確認してください。

    ポッドのログを contrail-k8s-deployer 確認します。GSIプラグイン調整のためのフィルター結果とエラーを探します。

  • カスタムコントローラが、必要なAWSリソースに対して作成、読み取り、更新、削除(CRUD)リクエストを作成できることを確認します。

    • ポッドのログを contrail-gsi 確認します。3つのポッドのうち1つがアクティブになっている必要があり、ログメッセージが出力されます。

    • アクティブなポッドのログに、AWSへのAPI呼び出しができないというエラーが含まれていないことを確認します。これらのエラーが表示された場合は、 に contrail-gsi-serviceaccount 付与された IAM ロールが正しく構成されていることを確認します(このトピックの「 前提条件 」セクションを参照してください)。

問題の場合 TransitGateway :

  • をインストールした TransitGateways後、そのステータスが「保留中」から「使用可能」に変わります。

  • /cRPDポッドがアクティブであることを ConnectedPeer確認します。

    出力にポッドが表示されない場合は、そのポッドがスケジュールされているノードが使用可能ConnectedPeerであることを確認します。有効なポッドには、以下のラベルが含まれています。 core.juniper.net/crpd-node: ""

問題の場合 ConnectedPeer :

  • ポッドが ConnectedPeer アクティブになり、cRPDがCN2制御ノードとAWSのトランジットゲートウェイとのBGPセッションを確立できることを確認します。cRPDのCLIで次のコマンドを実行します。

    このプロセスは、以下の理由で失敗することがあります。

    • 有効でアクティブなライセンスがクラスターにインストールされていません

    • BGPのIP接続が正しいとは言えません

作業の到達可能性に関する問題の場合:

  • EC2インスタンスからEKSクラスタにアクセスできない場合:

    • ワークロードの VN が TransitGateway.

    • 公開された VN から VPC へのルートが VPC のルーティング テーブルに表示されていることを確認します。

    • EC2インスタンスにVNの CIDR にアクセスするように設定されたセキュリティグループがあることを確認します。

      • カスタム コントローラは、トランジット ゲートウェイに公開されたすべてのルートへのアクセスを許可するセキュリティ グループ(gsi-sg)を自動的に作成します。