HAProxy-Konfiguration

In diesem Abschnitt wird erläutert, wie der HAProxy für ein regionenübergreifendes Failover konfiguriert wird.

Erforderliche Komponenten für diese Task:
  • Zwei Red Hat® OpenShift® -Cluster, die in einer Hybridarchitektur ausgeführt werden.
  • Zwei WebGUI -Implementierungen.
  • zwei HAProxys
Die WebGUI -und HAproxy-Implementierungen müssen mit Zugriff auf Netcool® Operations Insight® über den zugehörigen HAproxy kolokiert werden. Der HAproxy leitet den Datenverkehr an die momentan aktive Netcool Operations Insight -Anwendung weiter. Die Anwendung authentifiziert den Benutzer über die WebGUI , die dem HAproxy zugeordnet ist.
Beispielwerte:
  • https://webgui.east.example.com URL für WebGUI, auf die Benutzer im Osten normalerweise zugreifen.
  • https://webgui.west.example.com URL für WebGUI, auf die normalerweise Benutzer im Westen zugreifen.
  • https://netcool.east.example.com URL für HAproxy, das mit WebGUI verbunden ist, auf die Benutzer normalerweise im Osten zugreifen.
  • https://netcool.west.example.com URL für HAproxy, das mit WebGUI verbunden ist, auf die normalerweise Benutzer im Westen zugreifen.
  • https://netcool.primary.example.com URL für Netcool Operations Insight, die im primären Red Hat OpenShift ausgeführt wird.
  • https://netcool.secondary.example.com URL für Netcool Operations Insight, die im sekundären Red Hat OpenShift ausgeführt wird.
Hinweis: netcool.primary.example.com und netcool.secondary.example.com müssen in die IP-Adressen der jeweiligen Red Hat OpenShift -Ingress-Router aufgelöst werden. netcool.east.example.com und netcool.west.example.com werden jedoch in die IP-Adressen von HAProxys aufgelöst, die für die Weiterleitung von Anforderungen an die derzeit aktive Red Hat OpenShiftkonfiguriert sind.

WebGUI -Konfiguration

  1. Stellen Sie sicher, dass jede WebGUI für die Verwendung eines gültigen TLS-Zertifikats mit dem richtigen DNS-Namen in der Erweiterung des alternativen Subjektnamens konfiguriert ist. Stellen Sie außerdem sicher, dass der Web-Browser keine Zertifikatsfehler anzeigt.
  2. Rufen Sie eine Kopie des CA-Stammzertifikats ab, das zum Signieren der einzelnen WebGUI -Zertifikate verwendet wird. Sie können diesen Schritt überspringen, wenn alle Zertifikate von einer bekannten öffentlichen Zertifizierungsstelle signiert wurden.
  3. Aktualisieren Sie jazz/profile/config/cells/JazzSMNode01Cell/oauth20/base.clients.xml , indem Sie ein Element <client> für jeden Client erstellen. Sie benötigen eine andere Client-ID für jeden HAproxy und auch für jeden Red Hat OpenShift -Cluster, wenn Benutzer direkt unter Red Hat OpenShiftauf Netcool Operations Insight zugreifen können. Weitere Informationen finden Sie unter OAuth. Die folgende Tabelle zeigt die Eigenschaften der einzelnen Elemente gemäß dem Beispiel.
    Tabelle 1. Beispiel für Eigenschaften für die WebGUI -Konfiguration.
    ID Geheimer Schlüssel Weiterleitung
    east secret1 https://netcool.east.example.com/
    west secret2 https://netcool.west.example.com/
    primary secret3 https://netcool.primary.example.com/
    secondary secret4 https://netcool.secondary.example.com/
  4. Stoppen Sie den Server und starten Sie ihn neu.

HAproxy-Konfigurationsschritte

Führen Sie den Befehl yum install haproxy aus, um HAproxy zu installieren. Installieren Sie Version 2.3 oder höher. Eine Version von HAproxy wird auf dem Proxy-Host installiert und die Datei haproxy.cfg wird zum Verzeichnis /etc/haproxy hinzugefügt. Wiederholen Sie diesen Schritt, um HAproxy auf jedem Proxy-Host zu installieren.

Die HAproxy-Konfigurationsdatei hat normalerweise den Namen /usr/local/etc/haproxy/haproxy.cfg und befindet sich in der Regel in einem Verzeichnis wie /usr/local/etc/haproxy. Die Konfigurationsdatei enthält eine Back-End-Definition, in der die Änderungen an Anforderungen und Antworten erläutert sind, die der HAProxy vornehmen muss. Weitere Informationen zum Einrichten mehrerer Back-Ends mit Regeln für Überwachung und Wechsel finden Sie unter HAproxy Externes Symbol in der HAproxy-Dokumentation.

Konfigurieren Sie die Datei haproxy.cfg und aktualisieren Sie sie, um Dashboard-Switching für Failover und Failback des IBM® Netcool Operations Insight im Red Hat OpenShift -Dashboard durchzuführen. Konfigurieren Sie die Datei haproxy.cfg auf jedem Proxy-Host, wie im folgenden Beispiel gezeigt.
Hinweis: Ersetzen Sie example.com -Domänennamen durch die Domänennamen für Ihre Umgebung.
global
    log stdout local0
    # The following is the location for valid certificates for HA Proxy endpoint and the value is given by the PROXY_HOST.
    ca-base <path_to_certs_dir>
    # For example: ca-base /usr/local/etc/ca-certs 

    # PROXY_HOST – will only work with port 443
    # This file configures the east HAProxy 
    presetenv PROXY_HOST "<primary_proxy_host>"
    # Use the following line on the west HAProxy 
    #presetenv PROXY_HOST "netcool.west.example.com"


    # This is the NOI OCP route endpoint for the PRIMARY Deployment
    setenv NETCOOL_OCP_HOST_PRIMARY "<primary_route_name>"

    # This is the NOI OCP route endpoint for the BACKUP Deployment
    setenv NETCOOL_OCP_HOST_BACKUP "<backup_route_name>"
    
defaults
    mode http
    log global
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    option httplog

frontend http-in
# This is the server certificate for the proxy frontend hostname, PROXY_HOST. This is usually generated by the Corporation Signing Certificate authority (CA). proxy.pem is the file we created in step 7
    bind *:443 ssl crt <path_to_certs_dir>/proxy1.pem
    # For example: bind *:443 ssl crt /usr/local/etc/keys/proxy.pem
    use_backend http-out-primary  if { srv_is_up(http-out-primary/noi-primary) }
    use_backend http-out-backup  if { srv_is_up(http-out-backup/noi-backup) }

backend http-out-primary
    option httpchk
    http-check send meth GET uri /coordinator/operationalState hdr Host <primary_route_name> hdr Authorization  'Basic YXBpX3VzZXJuYW1lOmFwaV9wYXNzd29yZA=='
#    default-server inter 3s fall 3 rise 2
    # The ca-file refers to the signing certificate of the NETCOOL_OCP_HOST_PRIMARY route endpoint. 
    server noi-primary "${NETCOOL_OCP_HOST_PRIMARY}":443 ssl verify none check 
    http-request set-header X-NOI-HAProxy-Host %[req.hdr(Host)]
    http-request set-header x-noi-haproxy-host %[req.hdr(Host)]

    acl auth1 res.hdr(Location) -m beg https://<proxy_hostname>/users/api/authprovider/v1/authorize
    # If redirecting to NOI, change base to point to the proxy
    http-request set-header Host "${NETCOOL_OCP_HOST_PRIMARY}"

    http-response replace-value location ^([^:]*://)"${NETCOOL_OCP_HOST_PRIMARY}"(.*)$ \1"${PROXY_HOST}"\2
    # If redirect has a return URI within NOI, change that as well
    http-response replace-value location ^(.*redirect_uri=[^&]*)"${NETCOOL_OCP_HOST_PRIMARY}"(.*)$ \1"${PROXY_HOST}"\2 

backend http-out-backup
    option httpchk
    http-check send meth GET uri /coordinator/operationalState hdr Host <backup_route_name> hdr Authorization  'Basic <dr_coordinator_username:password>'
#    default-server inter 3s fall 3 rise 2
    server noi-backup "${NETCOOL_OCP_HOST_BACKUP}":443 ssl verify none check
#    server noi-backup "${NETCOOL_OCP_HOST_BACKUP}" addr "${NETCOOL_OCP_HOST_BACKUP}" port 443 ssl verify none check
    acl auth1 res.hdr(Location) -m beg https://<primary_proxy_host>/users/api/authprovider/v1/authorize

    http-request set-header X-NOI-HAProxy-Host %[req.hdr(Host)]
    http-request set-header Host "${NETCOOL_OCP_HOST_BACKUP}"

    # If redirecting to NOI, change base to point to the proxy
    http-response replace-value location ^([^:]*://)"${NETCOOL_OCP_HOST_BACKUP}"(.*)$ \1"${PROXY_HOST}"\2
    # If redirect has a return URI within NOI, change that as well
    http-response replace-value location ^(.*redirect_uri=[^&]*[^\.])"${NETCOOL_OCP_HOST_BACKUP}"(.*)$ \1"${PROXY_HOST}"\2
Dabei gilt Folgendes:
  • < Pfad_zu_Zertifikatsverzeichnis> ist der Pfad zu dem Verzeichnis, das die erforderlichen Zertifikate enthält, die auf dem Proxy-Server-Host generiert werden.
  • < primary_proxy_host> ist der vollständige DNS oder der Proxy-Host-Server, z. B. proxy1.test.xyz.com. Wenn Sie einen HAproxy in Ihrer Sicherung konfigurieren, stellen Sie sicher, dass hier auf den Backup-Proxy-Host verwiesen wird.
  • < primary_route_name> Der vollständige Name der Netcool-Route auf dem primären Server, z. B. netcool-east.apps.east.cp.xyz.com.
  • < backup_route_name> Der vollständige Name der Netcool-Route auf dem Sicherungsserver, z. B. netcool-west.apps.west.cp.xyz.com.
Dabei gilt Folgendes:
  • < dr_coordinator_username:password> ist die base64 -codierte Ausgabe des folgenden API-Benutzernamens-und Kennwortbefehls:
    echo -n api_username:api_password |base64
  • http-request set-header X-NOI-HAProxy-Host
    Dieser Befehl wird von Netcool Operations Insight verwendet, um den HAproxy zu identifizieren, den die Anforderung durchlaufen hat. Dieser Befehl wird verwendet, um die richtige WebGUIzu identifizieren.
  • http-request set-header Host
    Mit diesem Befehl wird der Host-Header aktualisiert, sodass der Red Hat OpenShift -Ingress-Router die Anforderung an den richtigen Pod weiterleiten kann.
  • http-response replace-value location
    Dieser Befehl aktualisiert alle Umleitungsantworten, sodass der Client weiterhin den HAproxy verwendet und nicht zum Red Hat OpenShift -Router umgeleitet wird.
Starten Sie die HAproxy-Instanz. Im Beispiel wird podman verwendet, um HAproxy Version 2.3auszuführen. Es ist auch möglich, den HAproxy außerhalb von Podman auszuführen.
podman run --name <unique_container_name> -p 443:443/tcp -v /root/new_certs:/root/new_certs -v /etc/haproxy:/usr/local/etc/haproxy:ro haproxy:2.3
Dabei ist /root/new_certs das Verzeichnis, in dem Sie die Zertifikate gespeichert haben, z. B. /usr/local/etc/ca-certs, wie durch < Pfad_zu_Zertifikatsverzeichnis>angegeben.

Netcool Operations Insight -Hybridkonfiguration

  1. Verwenden Sie den folgenden Befehl auf Basis des Beispiels in Tabelle 1, um einen geheimen <RELEASE>-was-oauth-cnea-secrets -Schlüssel zu erstellen, der die erforderlichen Werte für Client-ID und geheimen Schlüssel enthält.
    kubectl create secret generic <RELEASE>-was-oauth-cnea-secrets \
        --from-literal=client-id=primary \
        --from-literal=client-secret=secret3 \
        --from-literal=netcool.east.example.com.id=east \
        --from-literal=netcool.east.example.com.secret=secret1 \
        --from-literal=netcool.west.example.com.id=west \
        --from-literal=netcool.west.example.com.secret=secret2

    Dabei ist < RELEASE> der Name der Netcool Operations Insight -Hybridbereitstellung.

    Hinweis: Die Werte für client-id und client-secret müssen die Werte für die lokale Instanz enthalten. Wenn Sie diesen Befehl für die sekundäre Instanz Ihrer Netcool Operations Insight -Hybridbereitstellung ausführen, ändern sich die Werte in secondary und secret4. Die übrigen Werte geben den vollständig qualifizierten Domänennamen der HAProxys an. Geben Sie keine Portnummern an, auch wenn nicht die Standardports verwendet werden. Jeder Proxy hat einen Wert für .id und einen Wert für .secret .
    Hinweis: Sie können den geheimen Schlüssel entweder vor der Hybridinstallation erstellen oder den geheimen Schlüssel nach der Hybridinstallation patchen. Weitere Informationen finden Sie unter Install kubectl Externes Symbol and kubectl CLI Externes Symbol in der kubectl-Dokumentation.
  2. Wenn Sie Ihre Hybridbereitstellung erstellen, schließen Sie die folgenden Parameter in die YAML-Datei noihybrid ein. Weitere Informationen hierzu finden Sie unter Cloudnative Komponenten unter Hybrid installieren.
    • dash.url als URL der WebGUI.
    • dash.username als Benutzername für die Verbindung zur lokalen WebGUI.
    • dash.trustedCAConfigMapName als Name einer Konfigurationszuordnung mit den CA-Zertifikaten, die zum Signieren aller WebGUI -Zertifikate verwendet werden. Wenn alle Zertifikate von bekannten öffentlichen Zertifizierungsstellen signiert sind, kann dieser Wert weggelassen werden.
    • dash.crossRegionUrls als Array der HAproxy-und WebGUI -Paare im folgenden Format. Denken Sie daran, Portnummern einzuschließen, wenn sie nicht die Standardportnummer (443) sind.
    dash:
    
      ....
    
      crossRegionUrls:
      - proxy: https://netcool.east.example.com
        dash: https://webgui.east.example.com
      - proxy: https://netcool.west.example.com
        dash: https://webgui.west.example.com