アプリケーション開発とサービス提供において、Kubernetesはもはや欠かせないプラットフォームになりつつあります。アプリケーションデリバリーの観点から密接な関係を持つADC(Application Delivery Controller)も、外部へサービス公開する為の重要なコンポーネントとなります。

しかしながら、実際の商用環境においてADCを活用するにはまだポイントがおさえきれず判断に迷うケースもあるのではないでしょうか?Citrixでは、このKubernetes環境においてADCを活用するためのオンラインセミナーを実施いたします。実際にご活用頂いているお客様にもご登壇いただき、最新の情報をお届けいたします。

2020年06月24日(水) 13:00スタートとなりますので、是非お早めにお申し込み下さい!https://citrix.omniattend.com/seminar/networkjune24

皆様のご聴講をお待ちしております。


さて前回、Citrix ADCでのIstio連携についてご紹介しました。

https://citrixblogs.wpengine.com/2020/03/25/citrix-adc-and-istio-jp/

今回は更に一歩踏み込んだ内容につき、USでのブログを日本語化してお届けします。

Istio Ingress GatewayとしてのCitrix ADC:パート1 – 展開

https://citrixblogs.wpengine.com/2019/11/13/citrix-adc-as-an-istio-ingress-gateway-part-1-deployment/

従来はKubernetes環境のIngressリソースがクラスターへの外部トラフィック取り込みを担い、また基本的なL7機能を提供していました。IstioはVirtualServiceと共にさまざまなL4からL7までの機能を提供する、より優れたゲートウェイリソースを備えています。Istio GatewayリソースはTLS認証、ホストとポートのExpose、使用するプロトコルのタイプ、SNIコンフィグレーションなどのL4からL6までの機能のコンフィグレーションに使用されます。VirtualServiceリソースはサービスメッシュ内のルーティング設定に使用されます。ゲートウェイリソースはVirtualServiceと関連付け、Istioにメッシュ内と同一の機能セットをサービスメッシュのエッジ部でも提供させることができます。

Istio GatewayとIstio Ingress Gatewayはそれぞれ別物であることにご注意ください。Istio Ingress Gatewayは(Citrix ADCのような)ロードバランサーであり、Istioサービスメッシュへのフロントエンドのプロキシとして機能します。Istio GatewayはIstio Ingress Gatewayを設定するためのリソースです。

Ingress GatewayとしてのCitrix ADCの展開

Citrix ADCには、ハードウェアベース(MPX)、仮想化(VPX)、およびコンテナベース(CPX)を含む形態が用意されています。ハードウェアベースと仮想化されたデバイスの展開には従来の手段を利用できますが、コンテナ化されたソリューションの展開はやや異なります。このそれぞれについて以下に説明します。

Citrix ADC MPXまたはVPXIstio Ingress Gatewayとして展開

Citrix ADC MPX/VPXをIngress Gatewayとして展開する場合、それに先立ってCitrix ADCとKubernetesクラスターノードとの間に接続を確立する必要があります。これはCitrix ADCでのルートベースのコンフィグレーションか、あるいはCitrix K8s Node Controller(CNC)を使用して行えます。この接続はADCがKubernetesクラスター内のアプリケーションポッドにパケットを送信するため必要とされます。Citrix ADCは正しく動作しているポッドに要求が送られるよう、アプリケーションポッドの状況も監視します。

Citrix ADC MPX/VPXがIngress Gatewayデバイスとして展開される場合、Istio-adaptorコンテナは主にIngress Gateway展開により管理されるポッド内で実行されます。Istio-adaptorについては以下に後述しています。

Citrix ADC CPXIstio Ingress Gatewayとして展開

Citrix ADC CPXをIstio Ingress Gatewayとして展開する場合、CPXとIstio-adaptorはどちらも上図に示すとおりIngress Gateway Pod内のコンテナとして実行されます。

Ingress Gateway Service

この展開の一環として、Ingress GatewayのためのKubernetesサービスを作成する必要があります。このサービスはHTTP(80)やHTTPS(443)など必要なすべてのポートに加え、アプリケーションがExposeされる他のすべてのポートからのアクセスに備えて待機する必要があります。

MPX/VPXやCPXをIngress Gateway Serviceとして展開するためのYAMLファイルがUSサイトに記載されていますので参照ください。

Ingress Gatewayの展開

Ingress Gatewayの展開はCitrix ADC Ingress Gatewayの最も重要な要素です。Citrix ADCのコンフィグレーションはすべてポッド内で行われ、これはKubernetes展開により管理されます。これまでの図に示されたIngress Gateway Podは、シトリックスによりGolangで開発されたオープンソースのソフトウェアである、Citrix Istio Adaptorと呼ばれるコンテナから構成されています。これはIstioサービスメッシュに展開されるCitrix ADCのコンフィグレーションを自動的に行います。以下にその仕組みについて説明します。

Istio-adaptor

IstioコントロールプレーンはIstio Pilot、Citadel、Mixer、およびその他のコンポーネントから構成されます。Pilotはメッシュ内のプロキシにサービスディスカバリーを提供します。これは基本的にはgRPC xDSサーバーであり、ランタイム時のプロキシのコンフィグレーション設定も担います。

Istio-adaptorはxDSサーバーのgRPCクライアントであり、セキュリティの確保されたgRPCチャンネルを通じてクラスター、リスナー、ルート、およびエンドポイントなどのxDSリソースをxDSサーバーから受け取ります。これらのリソースを受け取った後、Istio-adaptorはそれらを対応するCitrix ADCコンフィグレーションブロックに変換し、RESTful NITRO APIコールを使って関連するCitrix ADCのコンフィグレーションを行います。

GatewayまたはVirtualServiceリソースが作成または更新された場合、Istio Pilotはその変化を検出します。Istio-Pilotはその情報をIstio-adaptorに送信し、Istio-adaptorはIngress Gatewayとして動作しているCitrix ADCデバイスのコンフィグレーション設定を行います。

アプリケーションがクラスター内で展開されている場合、その証明書と鍵はKubernetes Secret内で保管されています。これらのアプリケーション証明書はKubernetes SecretリソースからIstio-adaptorにマウントされます。Istio-adaptorはまたアプリケーションについて発行されたSSL/TLS証明書も監視し、証明書/鍵に変更が加えられたときには必要な作業を行います。これによりCitrix ADCはサービスメッシュ内で展開されているアプリケーションについて常に監視を行うと共に、安全なアクセスを提供するよう設定されている場合にはその機能も担うことができます。

Kubernetes Secretは、GatewayとIngress Gatewayの展開に先立って作成する必要があることに注意してください。またIstio-adaptor内においてCitrix ADC MPX/VPXデバイスのCredentialを作成し、マウントする必要もあります。これによりIstio-adaptorがCitrix ADCのコンフィグレーションを安全に設定できるようになります。

Istio-adaptorはCitrix ADCデバイスのURLまたはIPアドレスを受け付けます。Citrix ADC MPX/VPXの場合は、Citrix ADCデバイス上で設定された仮想サーバーIP(vserverIP)も受け付けます。サービスメッシュに向けた外部からのトラフィックはすべてこのvserverIPに送られます。

Ingress Gateway展開に使用されているYAMLファイルはUSサイトを参照ください。

次のステップ

この記事ではIstioリソース、GatewayとIngress Gatewayの違い、Citrix Istio Adaptorコンテナ、およびIstioサービスメッシュ内でさまざまな形態のCitrix ADCをどのようにIngress Gatewayとして展開するかについて説明しました。パート2ではCitrix ADCとIstioについてさらに掘り下げ、さまざまなタイプのアプリケーションについてCitrix  DCをどのように設定するかについて説明します。