Citrix ADC ingress controller

MongoDB用の単一層Citrix Ingressソリューション

MongoDB は、膨大な量の非構造化データを処理および保存するために設計された、最も人気のある NoSQL データベースの 1 つです。クラウドネイティブアプリケーションでは、Kubernetes プラットフォームの NoSQL データベースとして MongoDB が広く使用されています。

Kubernetes 環境では、アプリケーションのデプロイメント規模が非常に大きいため、パフォーマンスの問題を特定してトラブルシューティングすることは困難です。MongoDB のようなデータベースデプロイメントでは、高可用性と高パフォーマンスの要件を確実に満たすために、モニタリングはデータベース管理の重要な要素です。

Citrix は、Citrix ADC の高度な負荷分散およびパフォーマンス監視機能を使用して、Kubernetes プラットフォーム上の MongoDB データベースを負荷分散および監視するためのイングレスソリューションを提供しています。MongoDB向けCitrix Ingressソリューションは、MongoDBトランザクションをより深く可視化し、パフォーマンス上の問題が発生したときはいつでも迅速に特定して対処するのに役立ちます。 Citrix ADC オブザーバビリティエクスポーターを使用すると、MongoDB トランザクションを Elasticsearch にエクスポートし、 Kibana ダッシュボードを使用して視覚化して、より深いインサイトを得ることができます。

次の図は、Citrix ADCの単一層展開を使用したMongoDB用のCitrix Ingressソリューションを示しています。

MongoDB 向けCitrix・イングレス・ソリューション

このソリューションでは、Citrix ADC VPXがKubernetesクラスタ(Tier-1)の外部に展開され、Citrix ADC 可観測性エクスポーターがKubernetesクラスタ内に展開されます。

Tier-1 Citrix ADC VPXは、MongoDBクライアントからのトラフィック(南北)をKubernetesクラスター内のMongo DBクエリルーター(Mongos)にルーティングします。Citrix 可観測性エクスポーターは Kubernetes クラスター内にデプロイされます。

この展開の一環として、Citrix ADC VPX(Tier-1 Ingress)用のIngressリソースが作成されます。Tier-1 Ingressリソースは、Citrix ADC VPXでMongoDBトラフィックの負荷分散を有効にするルールを定義し、Mongoのポートを指定します。MongoDBトラフィックがCitrix ADC VPX 指定されたポートに到着するたびに、このトラフィックはIngressルールに記載されているMongoサービスインスタンスのいずれかにルーティングされます。Mongo サービスは MongoDB 管理者によって公開され、同じサービスインスタンスが Ingress で指定されます。

Citrix 可観測性エクスポーターインスタンスは、Citrix ADC VPX からのトランザクションを集約し、Elasticsearch サーバーにアップロードします。Kibana ダッシュボードを設定して、必要なデータ (クエリの応答時間、最も多くクエリされたコレクション名など) を視覚化し、分析して有意義なインサイトを得ることができます。挿入、更新、削除、検索、および返信の操作のみが解析され、メトリックがCitrix Observability Exporterに送信されます。

前提条件

MongoDB に Citrix Ingress ソリューションを展開する前に、次の手順を完了する必要があります。

Citrix ADC VPXを展開したら、次の手順を実行します。

  1. Citrix ADCでKubernetesクラスターのサブネットからIPアドレスをSNIPとして構成します。Citrix ADCでSNIPを構成する方法については、サブネットIPアドレス(SNIP)の構成を参照してください

  2. Kubernetes クラスターの同じサブネットである SNIP の管理アクセスを有効にします。 CitrixイングレスコントローラーがTier-1 Citrix ADCを構成できるようにするには、Citrix ingress controller YAMLファイルでSNIPをNS_IP変数として使用する必要があります

    注:

    SNIPをNS_IPとして使用することは必須ではありません。Citrix ADCの管理IPアドレスにCitrix ingress controller から到達可能な場合は、管理IPアドレスをNS_IPとして使用できます 。

  3. Citrix イングレスコントローラーに固有のCitrix ADCシステムユーザーアカウントを作成します 。Citrix ingress controller はシステムユーザーアカウントを使用して、Tier-1 Citrix ADCを自動的に構成します。

  4. DNSクエリをKubernetesクラスター内のCoreDNSポッドのIPアドレスに転送するようにCitrix ADC VPXを構成します。

    add dns nameServer <core-dns-pod-ip-address>
    

    たとえば、ポッドのIPアドレスが192.244.0.2および192.244.0.3の場合、Citrix ADC VPX ネームサーバーを次のように構成します。

    add dns nameServer 192.244.0.3
    add dns nameServer 192.244.0.2
    

MongoDB用のCitrix Ingressソリューションを展開する

MongoDB 用の Citrix Ingress ソリューションをデプロイする場合、Kubernetes クラスターに次のコンポーネントをデプロイします。

  • Citrix ADC VPX用のスタンドアロンCitrixイングレスコントローラー
  • Citrix ADC VPX用のイングレスリソース
  • Citrix ADC オブザーバビリティエクスポーター

MongoDB 用の Citrix Ingress ソリューションを展開するには、次の手順を実行します。

  1. Citrix ADC VPX ユーザー名とパスワードを使用してKubernetesシークレットを作成します。

    kubectl create secret  generic nslogin --from-literal=username='username' --from-literal=password='mypassword'
    
  2. cic-configmap.yaml ファイルをダウンロードし、次のコマンドを使用してデプロイします。

    kubectl create -f cic-configmap.yaml
    
  3. 以下の手順に従って、Citrix ingress controller をポッドとしてデプロイします。

    1. Citrix ingress controller マニフェストファイルをダウンロードします。次のコマンドを使用します:

      wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/dual-tier/manifest/tier-1-vpx-cic.yaml
      
    2. Citrix ingress controller マニフェストファイルを編集し、次の環境変数の値を入力します。

      環境変数 必須または任意 説明
      NS_IP 固定 Citrix ADCアプライアンスのIPアドレス。詳細については、「 前提条件」を参照してください。
      NS_USER と NS_PASSWOR 固定 Ingressデバイスとして使用されるCitrix ADC VPXまたはMPXアプライアンスのユーザー名とパスワード。
      EULA 固定 エンドユーザー使用許諾契約書。値をYesとして指定します。
      LOGLEVEL オプション Citrix Ingress Controllerによって生成されるログを制御するログレベル。デフォルトでは、この値は DEBUG に設定されています。サポートされる値は、クリティカル、エラー、警告、情報、デバッグです。
      NS_PROTOCOLとNS_PORT オプション Citrix ADCと通信するためにCitrix ingress controller が使用する必要があるプロトコルとポートを定義します。デフォルトでは、Citrix ingress controller はポート443でHTTPSを使用します。HTTP はポート 80 でも使用できます。
      ingress-classes オプション 複数の Ingress ロードバランサを使用して異なる Ingress リソースの負荷分散を行う場合。この環境変数を使用して、Citrix イングレスコントローラーを指定して、特定のIngressクラスに関連付けられたCitrix ADCを構成できます。Ingress クラスの詳細については、 Ingress クラスのサポートを参照してください
      NS_VIP オプション Citrix ingress controller は、この環境変数で指定されたIPアドレスを使用して、Ingressトラフィックを受信するCitrix ADCへの仮想IPアドレスを構成します。注: NS_VIP は frontend-ip アノテーションよりも優先されます。
    3. Citrix ingress controller の YAML ファイルで次の引数を指定または変更します。

      args:
       - --configmap
          default/cic-configmap
       - --ingress-classes
          tier-1-vpx                  
      
    4. 次のコマンドを使用して、更新したCitrix ingress controller マニフェストファイルを展開します。

      kubectl create -f tier-1-vpx-cic.yaml
      
  4. Tier-1-vpx-ingress.yaml ファイルを使用して、Tier-1 Citrix ADC 用のイングレスオブジェクトを作成します。

    kubectl apply -f tier-1-vpx-ingress.yaml
    

    tier-1-vpx-ingress.yamlファイルの内容を次に示します。このIngressリソースで指定されたルールに従って、Citrix ingress controller はポート27017でMongoDBトラフィックをリッスンするようにCitrix ADC VPXを構成します。この例に示すように、Citrix ADC VPXがトラフィックをMongoDBクエリルーターにルーティングできるように、MongoDBクエリルーター用に作成したサービス(例:serviceName: mongodb-mongos)を指定する必要があります。ここでmongodb-mongosは、 MongoDB クエリルーター用のサービスです。

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
          ingress.citrix.com/analyticsprofile: '{"tcpinsight": {"tcpBurstReporting":"DISABLED"}}'
          ingress.citrix.com/insecure-port: "27017"
          ingress.citrix.com/insecure-service-type: mongo
          ingress.citrix.com/insecure-termination: allow
          kubernetes.io/ingress.class: tier-1-vpx
        name: vpx-ingress
      spec:
        defaultBackend:
            service:
              name: mongodb-mongos
              port:
                number: 27017
    
  5. coe-es-mongo.yaml ファイルを使用して、Elasticsearch をエンドポイントとして Citrix ADC オブザーバビリティエクスポーターを展開します。

    kubectl apply -f coe-es-mongo.yaml
    

    注:

    Elasticsearch サーバーの詳細は、ポート情報とともに IP アドレスまたは DNS 名に基づいて ElkServer 環境変数に設定する必要があります。

ConfigMap ファイルのサンプルを次に示します。


apiVersion: v1
kind: ConfigMap
metadata:
  name: coe-config-es
data:
  lstreamd_default.conf: |
    {
        "Endpoints": {
            "ES": {
                "ServerUrl": "elasticsearch.default.svc.cluster.local:9200",
                "IndexPrefix":"adc_coe",
                "IndexInterval": "daily",
                "RecordType": {
                    "HTTP": "all",
                    "TCP": "all",
                    "SWG": "all",
                    "VPN": "all",
                    "NGS": "all",
                    "ICA": "all",
                    "APPFW": "none",
                    "BOT": "none",
                    "VIDEOOPT": "none",
                    "BURST_CQA": "none",
                    "SLA": "none",
                    "MONGO": "all"
                },
                "ProcessAlways": "no",
                "ProcessYieldTimeOut": "500",
                "MaxConnections": "512",
                "ElkMaxSendBuffersPerSec": "64",
                "JsonFileDump": "no"
            }
        }
    }
<!--NeedCopy-->

Citrix Ingress ソリューションの展開を確認する

次の例に示すコマンドを使用して、すべてのアプリケーションがデプロイされたことを確認し、すべてのサービスとポートを一覧表示できます。

sample-output-mongo-db-services

次の例に示すkubectl get ingressコマンドを使用して、デプロイされた Ingress オブジェクトに関する情報を取得できます。

   # kubectl get ingress

    NAME               HOSTS   ADDRESS   PORTS   AGE
    vpx-ingress        *                 80      22d

MongoDB トラフィックの可観測性の検証

このトピックでは、Citrix Ingress ソリューションを使用して MongoDB トランザクションを可視化する方法と、Kibana ダッシュボードを使用してデータベースのパフォーマンス統計を視覚化する方法について説明します。

このトピックの手順を実行する前に、次のことを確認してください。

  • MongoDB を Kubernetes クラスターにシャードレプリカセットとしてデプロイしている
  • MongoDB用のCitrix Ingressソリューションを導入
  • MongoDB のクライアントアプリケーションがインストールされ、トラフィックを MongoDB に送信します。
  • Kibana は視覚化のためにインストールされています

MongoDB トラフィックの可観測性を検証するには、次の手順を実行します。

  1. Tier-1 Citrix ADC VPX 仮想IPアドレスを指すように、MongoDB用にクライアントアプリケーションを構成します。

    次に例を示します:

    mongodb://<vip-of-vpx>:27017/
    
  2. MongoDB クライアントアプリケーションを使用して、複数のリクエスト (挿入、更新、削除など) を MongoDB データベースに送信します。トランザクションが Elasticsearch サーバーにアップロードされます。

  3. Kibana ダッシュボードをセットアップして MongoDB トランザクションを視覚化します。次のサンプル Kibana ダッシュボードを使用できます。

MongoDB 用の Kibana ダッシュボード

このダッシュボードでは、さまざまなタイプのクエリやクエリの応答時間など、MongoDB デプロイメントのパフォーマンス統計を確認できます。このデータを分析することで、トランザクションのレイテンシーなどの異常を検出し、すぐに対処できます。

テレメトリデータを Prometheus にエクスポートする

Kubernetes デプロイメントでは、Prometheus サーバーを同じ Kubernetes クラスターにデプロイしている場合、Prometheus が Citrix ADC 可観測性エクスポーターをスクレイプターゲットとして自動的に追加できるようにアノテーションを構成できます。

以下は、これらのアノテーションを含む Citrix ADC 可観測性エクスポーター YAML ファイル(coe-es-mongodb.yaml)のスニペットです。

template:
  metadata:
    name: coe-es
    labels:
      app: coe-es
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/port: "5563"

または、 Prometheusサーバー構成ファイルのスクレイプターゲットとしてCitrixADCオブザーバビリティエクスポーターを手動で追加することもできます。

また、次の YAML ファイルに示すように、Prometheus のメトリクスがcic-configmap.yamlファイル内で有効になっていることを確認します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: cic-configmap
  namespace: default
data:
   NS_ANALYTICS_CONFIG: |
     distributed_tracing:
       enable: 'false'
       samplingrate: 0
     endpoint:
       server: 'coe-es.default.svc.cluster.local'
     timeseries:
       port: 5563
       metrics:
         enable: 'true'
         mode: 'prometheus'
       auditlogs:
         enable: 'false'
       events:
         enable: 'false'
     transactions:
       enable: 'true'
       port: 5557
<!--NeedCopy-->

この YAML ファイルでは、以下の設定により Prometheus のメトリクスが有効になります。

 metrics:
    enable: 'true'
    mode: 'prometheus'
MongoDB用の単一層Citrix Ingressソリューション