Citrix ADC Ingress Controller

Einstufige Citrix Ingress-Lösung für MongoDB

MongoDB ist eine der beliebtesten NoSQL-Datenbanken, die für die Verarbeitung und Speicherung großer Mengen unstrukturierter Daten entwickelt wurde. Cloud-native Anwendungen verwenden MongoDB häufig als NoSQL-Datenbank in der Kubernetes-Plattform.

Das Identifizieren und Beheben von Leistungsproblemen ist in einer Kubernetes-Umgebung aufgrund des enormen Umfangs der Anwendungsbereitstellungen eine Herausforderung. Für Datenbankbereitstellungen wie MongoDB ist die Überwachung eine wichtige Komponente der Datenbankverwaltung, um sicherzustellen, dass die Anforderungen an Hochverfügbarkeit und hohe Leistung erfüllt werden.

Citrix bietet eine Ingress-Lösung für den Lastausgleich und die Überwachung von MongoDB-Datenbanken auf einer Kubernetes-Plattform mit den erweiterten Lastausgleich- und Leistungsüberwachungsfunktionen von Citrix ADCs. Die Citrix Ingress-Lösung für MongoDB bietet Ihnen einen tieferen Einblick in MongoDB-Transaktionen und hilft Ihnen, Leistungsprobleme bei jedem Auftreten schnell zu identifizieren und zu beheben. Mit dem Citrix ADC Observability Exporterkönnen Sie die MongoDB-Transaktionen nach Elasticsearch exportieren und sie mithilfe von Kibana-Dashboards visualisieren, um tiefere Einblicke zu erhalten.

Das folgende Diagramm erklärt die Citrix Ingress-Lösung für MongoDB mithilfe einer einstufigen Bereitstellung von Citrix ADC.

Citrix Ingress-Lösung für MongoDB

In dieser Lösung wird ein Citrix ADC VPX außerhalb des Kubernetes-Clusters (Tier-1) bereitgestellt, und das Citrix ADC Observability Exporteur wird innerhalb des Kubernetes-Clusters bereitgestellt.

Der Tier-1-Citrix ADC VPX leitet den Datenverkehr (Nord-Süd) von MongoDB-Clients zu Mongo-DB-Abfrageroutern (Mongos) im Kubernetes-Cluster weiter. Der Citrix Observability Exporter wird innerhalb des Kubernetes-Clusters bereitgestellt.

Im Rahmen dieser Bereitstellung wird eine Ingress-Ressource für Citrix ADC VPX (Tier-1-Ingress) erstellt. Die Tier-1-Ingress-Ressource definiert Regeln zum Aktivieren des Lastenausgleichs für MongoDB-Datenverkehr auf Citrix ADC VPX und gibt den Port für Mongo an. Immer wenn MongoDB-Datenverkehr auf dem angegebenen Port auf einem Citrix ADC VPX ankommt, leitet er diesen Datenverkehr an eine der Mongo-Dienstinstanzen weiter, die in der Ingress-Regel erwähnt werden. Der Mongo-Dienst wird vom MongoDB-Administrator bereitgestellt, und dieselbe Dienstinstanz wird im Ingress angegeben.

Die Citrix Observability Exporter-Instanz aggregiert Transaktionen von Citrix ADC VPX und lädt sie auf den Elasticsearch-Server hoch. Sie können Kibana-Dashboards einrichten, um die erforderlichen Daten zu visualisieren (z. B. die Reaktionszeit von Abfragen, die am häufigsten abgefragten Sammlungsnamen) und sie analysieren, um aussagekräftige Erkenntnisse zu erhalten. Nur Einfüge-, Aktualisierungs-, Lösch-, Such- und Antwortvorgänge werden analysiert und Metriken werden an den Citrix Observability Exporter gesendet.

Voraussetzungen

Sie müssen die folgenden Schritte ausführen, bevor Sie die Citrix Ingress-Lösung für MongoDB bereitstellen.

  • Richten Sie einen Kubernetes-Cluster in der Cloud oder on-premises ein
  • Stellen Sie MongoDB im Kubernetes-Cluster mit Bereitstellungsmodus als gemeinsam genutzter Replikatsatzbereit. Andere Bereitstellungsmodi für MongoDB werden nicht unterstützt.

  • Stellen Sie sicher, dass Sie Elasticsearch installiert und konfiguriert haben. Verwenden Sie die Datei elasticsearch.yaml für die Bereitstellung von Elasticsearch.
  • Stellen Sie sicher, dass Sie Kibana installiert haben, um Ihre Transaktionsdaten zu visualisieren. Verwenden Sie die kibana.yaml-Datei für die Bereitstellung von Kibana.
  • Stellen Sie eine Citrix ADC VPX-Instanz außerhalb des Kubernetes-Clusters bereit. Anweisungen zum Bereitstellen von Citrix ADC VPX finden Sie unter Bereitstellen einer Citrix ADC VPX-Instanz.

Führen Sie Folgendes aus, nachdem Sie Citrix ADC VPX bereitgestellt haben:

  1. Konfigurieren Sie eine IP-Adresse aus dem Subnetz des Kubernetes-Clusters als SNIP auf dem Citrix ADC. Informationen zum Konfigurieren von SNIPs in Citrix ADC finden Sie unter Konfigurieren von Subnet-IP-Adressen (SNIPs).

  2. Aktivieren Sie den Verwaltungszugriff für das SNIP, das dasselbe Subnetz des Kubernetes-Clusters ist. Das SNIP sollte als NS_IP Variable in der YAML-Datei des Citrix Ingress Controller verwendet werden, damit der Citrix Ingress Controller den Tier-1-Citrix ADC konfigurieren kann.

    Hinweis:

    Es ist nicht zwingend erforderlich, SNIP als zu verwenden NS_IP. Wenn die Verwaltungs-IP-Adresse des Citrix ADC über den Citrix Ingress Controller erreichbar ist, können Sie die Verwaltungs-IP-Adresse als verwenden NS_IP.

  3. Erstellen Sie ein Citrix ADC-Systembenutzerkonto, das für den Citrix Ingress Controller spezifisch ist. Der Citrix Ingress Controller verwendet das Systembenutzerkonto, um den Tier-1-Citrix ADC automatisch zu konfigurieren.

  4. Konfigurieren Sie Citrix ADC VPX, um DNS-Abfragen an CoreDNS-Pod-IP-Adressen im Kubernetes-Cluster weiterzuleiten.

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

    Wenn die Pod-IP-Adressen beispielsweise 192.244.0.2 und 192.244.0.3 lauten, konfigurieren Sie die Nameserver auf Citrix ADC VPX als:

    add dns nameServer 192.244.0.3
    add dns nameServer 192.244.0.2
    

Bereitstellen der Citrix Ingress-Lösung für MongoDB

Wenn Sie die Citrix Ingress-Lösung für MongoDB bereitstellen, stellen Sie die folgenden Komponenten im Kubernetes-Cluster bereit:

  • Ein eigenständiger Citrix Ingress Controller für Citrix ADC VPX
  • Eine Ingress-Ressource für Citrix ADC VPX
  • Citrix ADC Observability Exporteur

Führen Sie die folgenden Schritte aus, um die Citrix Ingress-Lösung für MongoDB bereitzustellen.

  1. Erstellen Sie ein Kubernetes-Geheimnis mit dem Benutzernamen und dem Kennwort für Citrix ADC VPX.

    kubectl create secret  generic nslogin --from-literal=username='username' --from-literal=password='mypassword'
    
  2. Laden Sie die Datei cic-configmap.yaml herunter und stellen Sie sie dann mit dem folgenden Befehl bereit.

    kubectl create -f cic-configmap.yaml
    
  3. Stellen Sie den Citrix Ingress Controller mithilfe der folgenden Schritte als Pod bereit.

    1. Laden Sie die Citrix Ingress Controller-Manifestdatei herunter. Verwenden Sie den folgenden Befehl:

      wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/dual-tier/manifest/tier-1-vpx-cic.yaml
      
    2. Bearbeiten Sie die Citrix Ingress Controller-Manifestdatei und geben Sie die Werte für die folgenden Umgebungsvariablen ein:

      Umgebungs-Variable Erforderlich oder optional Beschreibung
      NS_IP Mandatory Die IP-Adresse der Citrix ADC Appliance. Weitere Einzelheiten finden Sie unter Voraussetzungen.
      NS_USER und NS_PASSWORD Mandatory Der Benutzername und das Kennwort der Citrix ADC VPX- oder MPX-Appliance, die als Ingress-Gerät verwendet wird.
      EULA Mandatory Die Endbenutzer-Lizenzvereinbarung. Geben Sie den Wert als an Yes.
      LOGLEVEL Optional Die Protokollebenen zur Steuerung der vom Citrix Ingress Controller generierten Protokolle. Standardmäßig ist der Wert auf DEBUG festgelegt. Die unterstützten Werte sind: CRITICAL, ERROR, WARNING, INFO und DEBUG.
      NS_PROTOCOL und NS_PORT Optional Definiert das Protokoll und den Port, die vom Citrix Ingress Controller für die Kommunikation mit Citrix ADC verwendet werden müssen. Standardmäßig verwendet der Citrix Ingress Controller HTTPS auf Port 443. Sie können auch HTTP auf Port 80 verwenden.
      ingress-Klassen Optional Wenn mehrere Ingress-Load-Balancer zum Lastenausgleich verschiedener Ingress-Ressourcen verwendet werden. Sie können diese Umgebungsvariable verwenden, um den Citrix Ingress Controller anzugeben, um Citrix ADC zu konfigurieren, das einer bestimmten Ingress-Klasse zugeordnet ist. Informationen zu Ingress-Klassen finden Sie unter Unterstützung für Ingress-Klassen
      NS_VIP Optional Citrix Ingress Controller verwendet die in dieser Umgebungsvariable angegebene IP-Adresse, um eine virtuelle IP-Adresse für den Citrix ADC zu konfigurieren, der Ingress-Datenverkehr empfängt. Hinweis: NS_VIP hat Vorrang vor der Frontend-IP-Annotation .
    3. Geben Sie die folgenden Argumente in der YAML-Datei des Citrix Ingress Controller an oder ändern Sie sie

      args:
       - --configmap
          default/cic-configmap
       - --ingress-classes
          tier-1-vpx                  
      
    4. Stellen Sie die aktualisierte Citrix Ingress Controller-Manifestdatei mit dem folgenden Befehl bereit:

      kubectl create -f tier-1-vpx-cic.yaml
      
  4. Erstellen Sie mit der Datei tier-1-vpx-ingress.yaml ein Ingress-Objekt für Tier-1-Citrix ADC.

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

    Es folgt der Inhalt für die Datei tier-1-vpx-ingress.yaml. Gemäß den in dieser Ingress-Ressource angegebenen Regeln konfiguriert der Citrix Ingress Controller den Citrix ADC VPX so, dass er Port 27017 auf MongoDB-Datenverkehr abhört. Wie in diesem Beispiel gezeigt, müssen Sie den Dienst angeben, den Sie für MongoDB-Abfragerouter erstellt haben (z. B.:serviceName: mongodb-mongos), damit der Citrix ADC VPX den Datenverkehr dorthin weiterleiten kann. Hier ist mongodb-mongos der Dienst für MongoDB-Abfragerouter.

      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. Stellen Sie den Citrix ADC Observability Exporter mit Elasticsearch als Endpunkt mithilfe der Datei coe-es-mongo.yaml bereit.

    kubectl apply -f coe-es-mongo.yaml
    

    Hinweis:

    Sie müssen die Elasticsearch-Serverdetails in der ElkServer-Umgebungsvariablen entweder basierend auf einer IP-Adresse oder dem DNS-Namen zusammen mit den Portinformationen festlegen.

Es folgt ein Beispiel für eine ConfigMap-Datei.


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-->

Überprüfen der Bereitstellung der Citrix Ingress-Lösung

Sie können den Befehl wie im folgenden Beispiel gezeigt verwenden, um zu überprüfen, ob alle Anwendungen bereitgestellt wurden, und um alle Dienste und Ports aufzulisten.

sample-output-mongo-db-services

Sie können den kubectl get ingress Befehl verwenden, wie im folgenden Beispiel gezeigt, um Informationen zu den bereitgestellten Ingress-Objekten abzurufen.

   # kubectl get ingress

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

Überprüfen der Beobachtbarkeit für MongoDB-Verkehr

Dieses Thema enthält Informationen darüber, wie Sie mithilfe der Citrix Ingress-Lösung Einblick in MongoDB-Transaktionen erhalten, und es verwendet Kibana-Dashboards, um die Statistiken zur Datenbankleistung zu visualisieren.

Bevor Sie die Schritte in diesem Thema ausführen, stellen Sie Folgendes sicher:

  • Sie haben MongoDB als gemeinsam genutzten Replikatsatz im Kubernetes-Cluster bereitgestellt.
  • Bereitstellung der Citrix Ingress-Lösung für MongoDB
  • Eine Clientanwendung für MongoDB wird installiert, um Datenverkehr an die MongoDB zu senden.
  • Kibana ist für die Visualisierung installiert

Führen Sie die folgenden Schritte aus, um die Beobachtbarkeit des MongoDB-Datenverkehrs

  1. Konfigurieren Sie Ihre Clientanwendung für MongoDB so, dass sie auf die virtuelle IP-Adresse des Tier-1-Citrix ADC VPX verweist.

    Beispiel:

    mongodb://<vip-of-vpx>:27017/
    
  2. Senden Sie mithilfe Ihrer MongoDB-Clientanwendung mehrere Anforderungen (z. B. Einfügen, Aktualisieren, Löschen) an die MongoDB-Datenbank. Die Transaktionen werden auf den Elasticsearch-Server hochgeladen.

  3. Richten Sie ein Kibana-Dashboard ein, um die MongoDB-Transaktionen zu visualisieren. Sie können das folgende Kibana-Beispiel-Dashboard verwenden.

Kibana-Dashboard für MongoDB

In diesem Dashboard sehen Sie Leistungsstatistiken für Ihre MongoDB-Bereitstellung, einschließlich der verschiedenen Arten von Abfragen und der Reaktionszeit der Abfrage. Durch die Analyse dieser Daten können Sie Anomalien wie Latenz in einer Transaktion feststellen und sofort Maßnahmen ergreifen.

Telemetriedaten nach Prometheus exportieren

Wenn Sie Ihren Prometheus-Server für Ihre Kubernetes-Bereitstellung im selben Kubernetes-Cluster bereitgestellt haben, können Sie Anmerkungen konfigurieren, damit Prometheus den Citrix ADC Observability Exporter automatisch als Scrape-Ziel hinzufügen kann.

Es folgt ein Snippet der YAML-Datei des Citrix ADC Observability Exporters (coe-es-mongodb.yaml) mit diesen Anmerkungen.

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

Alternativ können Sie den Citrix ADC Observability Exporter manuell als Scrape-Ziel in Ihrer Prometheus-Serverkonfigurationsdateihinzufügen.

Stellen Sie außerdem sicher, dass die Metriken für Prometheus in der cic-configmap.yaml Datei aktiviert sind, wie in der folgenden YAML-Datei gezeigt.

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-->

In dieser YAML-Datei ermöglicht die folgende Konfiguration Metriken für Prometheus.

 metrics:
    enable: 'true'
    mode: 'prometheus'
Einstufige Citrix Ingress-Lösung für MongoDB