MongoDB向け単一階層NetScaler® Ingressソリューション

最終公開日 : Oct 02, 2026
MongoDBは、大量の非構造化データを処理および保存するように設計された、最も人気のあるNoSQLデータベースの1つです。クラウドネイティブアプリケーションは、KubernetesプラットフォームでNoSQLデータベースとしてMongoDBを広く使用しています。
Kubernetes環境では、アプリケーション展開の規模が大きいため、パフォーマンスの問題を特定してトラブルシューティングすることは課題です。MongoDBのようなデータベース展開では、高可用性と高性能の要件が満たされていることを確認するために、監視はデータベース管理の重要な要素です。
NetScalerは、NetScalerの高度な負荷分散およびパフォーマンス監視機能を使用して、Kubernetesプラットフォーム上のMongoDBデータベースの負荷分散と監視のためのIngressソリューションを提供します。MongoDB向けNetScaler Ingressソリューションは、MongoDBトランザクションへのより深い可視性を提供し、パフォーマンスの問題が発生したときに迅速に特定して対処するのに役立ちます。NetScaler Observability Exporterを使用して、MongoDBトランザクションをElasticsearchにエクスポートし、Kibanaダッシュボードを使用して視覚化することで、より深い洞察を得ることができます。
次の図は、NetScalerの単一階層展開を使用したMongoDB向けNetScaler Ingressソリューションについて説明しています。
MongoDB向けNetScaler Ingressソリューション
このソリューションでは、NetScaler VPXはKubernetesクラスターの外部(Tier-1)に展開され、NetScaler Observability ExporterはKubernetesクラスターの内部に展開されます。
Tier-1 NetScaler VPXは、MongoDBクライアントからのトラフィック(南北)をKubernetesクラスター内のMongoDBクエリールーター(Mongos)にルーティングします。NetScaler Observability ExporterはKubernetesクラスターの内部に展開されます。
この展開の一部として、NetScaler VPX(Tier-1 Ingress)用のIngressリソースが作成されます。Tier-1 Ingressリソースは、NetScaler VPX上のMongoDBトラフィックの負荷分散を有効にするためのルールを定義し、Mongoのポートを指定します。MongoDBトラフィックがNetScaler VPX上の指定されたポートに到着すると、このトラフィックはIngressルールで言及されているMongoサービスインスタンスの1つにルーティングされます。MongoサービスはMongoDB管理者によって公開され、同じサービスインスタンスがIngressで指定されます。
NetScaler Observability Exporterインスタンスは、NetScaler VPXからのトランザクションを集約し、Elasticsearchサーバーにアップロードします。Kibanaダッシュボードを設定して、必要なデータ(たとえば、クエリ応答時間、最もクエリされたコレクション名)を視覚化し、それらを分析して意味のある洞察を得ることができます。挿入、更新、削除、検索、および応答操作のみが解析され、メトリックはNetScaler Observability Exporterに送信されます。

前提条件

MongoDB向けNetScaler Ingressソリューションを展開する前に、次の手順を完了する必要があります。
  • クラウドまたはオンプレミスでKubernetesクラスターをセットアップする
  • 展開モードをsharded replica setとして、KubernetesクラスターにMongoDBを展開します。MongoDBの他の展開モードはサポートされていません。
  • Elasticsearchがインストールされ、構成されていることを確認してください。Elasticsearchを展開するには、elasticsearch.yamlファイルを使用します。
  • トランザクションデータを視覚化するためにKibanaがインストールされていることを確認してください。Kibanaをデプロイするには、kibana.yamlファイルを使用します。
  • Kubernetesクラスターの外部にNetScaler VPXインスタンスをデプロイします。NetScaler VPXのデプロイ方法については、NetScaler VPXインスタンスのデプロイを参照してください。
NetScaler VPXをデプロイした後、以下を実行します。
  1. KubernetesクラスターのサブネットからIPアドレスをNetScalerのSNIPとして構成します。NetScalerでのSNIPの構成については、サブネットIPアドレス(SNIP)の構成を参照してください。
  2. Kubernetesクラスターと同じサブネットであるSNIPの管理アクセスを有効にします。NetScaler Ingress ControllerがTier-1 NetScalerを構成できるように、SNIPはNetScaler Ingress Controller YAMLファイルでNS_IP変数として使用する必要があります。
    注:
    SNIPをNS_IPとして使用することは必須ではありません。NetScalerの管理IPアドレスがNetScaler Ingress Controllerから到達可能な場合、管理IPアドレスをNS_IPとして使用できます。
  3. NetScaler Ingress Controller専用のNetScalerシステムユーザーアカウントを作成します。NetScaler Ingress Controllerは、システムユーザーアカウントを使用してTier-1 NetScalerを自動的に構成します。
  4. NetScaler VPXを構成して、DNSクエリをKubernetesクラスター内のCoreDNSポッドIPアドレスに転送します。
    add dns nameServer <core-dns-pod-ip-address>
    たとえば、ポッドIPアドレスが192.244.0.2と192.244.0.3の場合、NetScaler VPXでネームサーバーを次のように構成します。
    add dns nameServer 192.244.0.3
    add dns nameServer 192.244.0.2

MongoDB向けNetScaler Ingressソリューションのデプロイ

MongoDB向けNetScaler Ingressソリューションをデプロイすると、Kubernetesクラスターに以下のコンポーネントがデプロイされます。
  • NetScaler VPX用のスタンドアロンNetScaler Ingress Controller
  • NetScaler VPX用のIngressリソース
  • NetScaler 可観測性エクスポーター
MongoDB 用 NetScaler Ingress ソリューションを展開するには、次の手順を実行します。
  1. NetScaler 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. 次の手順を使用して、NetScaler Ingress Controller をポッドとして展開します。
    1. NetScaler Ingress Controller マニフェストファイルをダウンロードします。次のコマンドを使用します。
      wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/dual-tier/manifest/tier-1-vpx-cic.yaml
    2. NetScaler Ingress Controller マニフェストファイルを編集し、次の環境変数の値を入力します。
      環境変数 必須またはオプション 説明
      NS_IP 必須 NetScaler アプライアンスの IP アドレス。詳細については、前提条件 を参照してください。
      NS_USER と NS_PASSWORD 必須 Ingress デバイスとして使用される NetScaler VPX または MPX アプライアンスのユーザー名とパスワード。
      EULA 必須 エンドユーザーライセンス契約。値をYesとして指定します。
      LOGLEVEL オプション NetScaler Ingress Controllerによって生成されるログを制御するためのログレベル。デフォルトでは、値はDEBUGに設定されています。サポートされている値は、CRITICAL、ERROR、WARNING、INFO、DEBUGです。
      NS_PROTOCOL および NS_PORT オプション NetScaler Ingress ControllerがNetScalerと通信するために使用する必要があるプロトコルとポートを定義します。デフォルトでは、NetScaler Ingress Controllerはポート443でHTTPSを使用します。ポート80でHTTPを使用することもできます。
      イングレスクラス オプション 複数のIngressロードバランサーが異なるIngressリソースの負荷分散に使用される場合。この環境変数を使用して、特定のIngressクラスに関連付けられたNetScalerを構成するようにNetScaler Ingress Controllerを指定できます。Ingressクラスの詳細については、Ingressクラスのサポートを参照してください。
      NS_VIP オプション NetScaler Ingress Controllerは、この環境変数で提供されるIPアドレスを使用して、Ingressトラフィックを受信するNetScalerに仮想IPアドレスを構成します。
    3. NetScaler Ingress Controller YAMLファイルで、以下の引数を指定または変更します。
      args:
       - --configmap
          default/cic-configmap
       - --ingress-classes
          tier-1-vpx
    4. 以下のコマンドを使用して、更新されたNetScaler Ingress Controllerマニフェストファイルをデプロイします。
      kubectl create -f tier-1-vpx-cic.yaml
  4. tier-1-vpx-ingress.yamlファイルを使用して、Tier-1 NetScalerのIngressオブジェクトを作成します。
    kubectl apply -f tier-1-vpx-ingress.yaml
    tier-1-vpx-ingress.yamlファイルの内容は次のとおりです。このIngressリソースで指定されたルールに従い、NetScaler Ingress ControllerはNetScaler VPXを構成して、ポート27017でMongoDBトラフィックをリッスンします。この例に示すように、NetScaler VPXがトラフィックをルーティングできるように、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
      name: vpx-ingress
    spec:
      ingressClassName: tier-1-vpx
      defaultBackend:
          service:
            name: mongodb-mongos
            port:
              number: 27017
  5. coe-es-mongo.yamlファイルを使用して、ElasticsearchをエンドポイントとしてNetScaler Observability Exporterをデプロイします。
    kubectl apply -f coe-es-mongo.yaml
    注:
    ELKServer環境変数に、IPアドレスまたはDNS名に基づいて、ポート情報とともにElasticsearchサーバーの詳細を設定する必要があります。
以下は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"
            }
        }
    }

NetScaler Ingressソリューションのデプロイを検証する

以下の例に示すコマンドを使用して、すべてのアプリケーションがデプロイされていることを確認し、すべてのサービスとポートを一覧表示できます。
MongoDBサービスのサンプル出力
以下の例に示すkubectl get ingressコマンドを使用して、デプロイされたIngressオブジェクトに関する情報を取得できます。
   # kubectl get ingress

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

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

このトピックでは、NetScaler Ingressソリューションを使用してMongoDBトランザクションの可視性を得る方法について説明し、Kibanaダッシュボードを使用してデータベースのパフォーマンス統計を視覚化します。
このトピックの手順を実行する前に、以下を確認してください。
  • KubernetesクラスターにシャードレプリカセットとしてMongoDBをデプロイ済みであること。
  • MongoDB用のNetScaler Ingressソリューションがデプロイされていること。
  • MongoDBにトラフィックを送信するためのMongoDBクライアントアプリケーションがインストールされていること。
  • 可視化のためにKibanaがインストールされていること。
MongoDBトラフィックの可観測性を検証するには、以下の手順を実行します。
  1. MongoDB用のクライアントアプリケーションを、Tier-1 NetScaler VPXの仮想IPアドレスを指すように構成します。
    例:
    mongodb://<vip-of-vpx>:27017/
  2. MongoDBクライアントアプリケーションを使用して、複数のリクエスト(挿入、更新、削除など)をMongoDBデータベースに送信します。トランザクションはElasticsearchサーバーにアップロードされます。
  3. MongoDBトランザクションを可視化するためにKibanaダッシュボードを設定します。以下のサンプルKibanaダッシュボードを使用できます。
MongoDB用Kibanaダッシュボード(/en-us/netscaler-k8s-ingress-controller/media/mongodb-kibana.png)
このダッシュボードでは、さまざまな種類のクエリやクエリ応答時間を含む、MongoDBデプロイのパフォーマンス統計を確認できます。このデータを分析することで、トランザクションの遅延などの異常を発見し、即座に対処することができます。

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

Kubernetesデプロイの場合、Prometheusサーバーが同じKubernetesクラスターにデプロイされている場合、PrometheusがNetScaler Observability Exporterをスクレイプターゲットとして自動的に追加できるようにアノテーションを構成できます。
以下は、これらのアノテーションを含むNetScaler Observability Exporter YAMLファイル(coe-es-mongodb.yaml)の抜粋です。
template:
  metadata:
    name: coe-es
    labels:
      app: coe-es
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/port: "5563"
または、Prometheusサーバー構成ファイルでNetScaler Observability Exporterをスクレイプターゲットとして手動で追加することもできます。
また、次の YAML ファイルに示すように、cic-configmap.yaml ファイルで Prometheus のメトリクスが有効になっていることを確認してください。
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
この YAML ファイルでは、次の構成により Prometheus のメトリクスが有効になります。
metrics:
   enable: 'true'
   mode: 'prometheus'