Citrix ADC Ingress Controller

Citrix Ingress Controller mit YAML bereitstellen

Sie können Citrix Ingress Controller in den folgenden Modi in Ihren Bare-Metal - und Cloud-Bereitstellungen bereitstellen:

  • Als eigenständiger Pod im Kubernetes-Cluster. Verwenden Sie diesen Modus, wenn Sie Citrix ADCs (Citrix ADC MPX oder Citrix ADC VPX) außerhalb des Clusters steuern. Zum Beispiel mit Dual-Tier-Topologien oder einstufiger Topologie, bei der die einzelne Ebene ein Citrix ADC MPX oder VPX ist.

  • Als Beiwagen (im selben Pod) mit Citrix ADC CPX im Kubernetes-Cluster. Der Sidecar-Controller ist nur für den zugehörigen Citrix ADC CPX innerhalb desselben Pods verantwortlich. Dieser Modus wird in Dual-Tier- oder Cloud-Topologien verwendet.

Stellen Sie Citrix Ingress Controller als eigenständigen Pod im Kubernetes-Cluster für Citrix ADC, MPX- oder VPX-Appliances bereit

Verwenden Sie die citrix-k8s-ingress-controller.yaml-Datei, um den Citrix Ingress Controller als eigenständigen Pod in Ihrem Kubernetes-Cluster auszuführen.

Hinweis:

Der Citrix ADC MPX oder VPX kann im eigenständigen, hochverfügbarenoder geclusterten Modus bereitgestellt werden.

Voraussetzungen

  • Ermitteln Sie die NS_IP-IP-Adresse, die der Controller für die Kommunikation mit der Appliance benötigt. Die IP-Adresse kann je nach Art der Citrix ADC-Bereitstellung eine der folgenden sein:
    • (Eigenständige Appliances) NSIP — Die Verwaltungs-IP-Adresse einer eigenständigen Citrix ADC Appliance. Weitere Informationen finden Sie unter IP-Adressierung in Citrix ADC
    • (Appliances im Hochverfügbarkeitsmodus) SNIP — Die Subnetz-IP-Adresse. Weitere Informationen finden Sie unter IP-Adressierung in Citrix ADC
    • (Appliances im Clustermodus) CLIP — Die Clusterverwaltungs-IP-Adresse (CLIP) für eine geclusterte Citrix ADC-Bereitstellung. Weitere Informationen finden Sie unter IP-Adressierung für einen Cluster
  • Der Benutzername und das Kennwort der Citrix ADC VPX- oder MPX-Appliance, die als Ingress-Gerät verwendet wird. Die Citrix ADC Appliance muss über ein Systembenutzerkonto (nicht standardmäßig) mit bestimmten Berechtigungen verfügen, damit der Citrix Ingress Controller die Citrix ADC VPX- oder MPX-Appliance konfigurieren kann. Anweisungen zum Erstellen des Systembenutzerkontos auf Citrix ADC finden Sie unter Erstellen eines Systembenutzerkontos für den Citrix Ingress Controller in Citrix ADC

    Sie können den Benutzernamen und das Kennwort direkt als Umgebungsvariablen an den Controller übergeben oder Kubernetes-Secrets verwenden (empfohlen). Wenn Sie Kubernetes-Schlüssel verwenden möchten, erstellen Sie mit dem folgenden Befehl ein Geheimnis für den Benutzernamen und das Kennwort:

     kubectl create secret  generic nslogin --from-literal=username='cic' --from-literal=password='mypassword'
    

Erstellen eines Systembenutzerkontos für Citrix Ingress Controller in Citrix ADC

Citrix Ingress Controller konfiguriert die Citrix ADC Appliance (MPX oder VPX) mit einem Systembenutzerkonto des Citrix ADC. Das Systembenutzerkonto sollte über bestimmte Berechtigungen verfügen, damit der Citrix Ingress Controller die Berechtigung hat, Folgendes auf dem Citrix ADC zu konfigurieren:

  • Virtuellen Content Switching (CS) -Server hinzufügen, löschen oder anzeigen
  • Konfigurieren von CS-Richtlinien und -Aktionen
  • Konfigurieren des virtuellen Lastenausgleichs (LB)
  • Konfigurieren von Dienstgruppen
  • Konfigurieren von SSL-Zertifikaten
  • Routen konfigurieren
  • Konfigurieren von Benutzermonitoren
  • Systemdatei hinzufügen (zum Hochladen von SSL-Zertifikaten von Kubernetes)
  • Konfigurieren der virtuellen IP-Adresse (VIP)
  • Überprüfen Sie den Status der Citrix ADC Appliance

Gehen Sie wie folgt vor, um das Systembenutzerkonto zu erstellen:

  1. Melden Sie sich bei der Citrix ADC-Appliance an. Führen Sie folgende Schritte aus:
    1. Verwenden Sie einen SSH-Client wie PuTTY, um eine SSH-Verbindung zur Citrix ADC Appliance zu öffnen.

    2. Melden Sie sich mit den Administratoranmeldeinformationen bei der Appliance an.

  2. Erstellen Sie das Systembenutzerkonto mit dem folgenden Befehl:

    add system user <username> <password>
    

    Beispiel:

    add system user cic mypassword
    
  3. Erstellen Sie eine Richtlinie, um die erforderlichen Berechtigungen für das Systembenutzerkonto bereitzustellen. Verwenden Sie den folgenden Befehl:

    add cmdpolicy cic-policy ALLOW '^(\?!shell)(\?!sftp)(\?!scp)(\?!batch)(\?!source)(\?!.*superuser)(\?!.*nsroot)(\?!install)(\?!show\s+system\s+(user|cmdPolicy|file))(\?!(set|add|rm|create|export|kill)\s+system)(\?!(unbind|bind)\s+system\s+(user|group))(\?!diff\s+ns\s+config)(\?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)^(\?!shell)(\?!sftp)(\?!scp)(\?!batch)(\?!source)(\?!.*superuser)(\?!.*nsroot)(\?!install)(\?!show\s+system\s+(user|cmdPolicy|file))(\?!(set|add|rm|create|export|kill)\s+system)(\?!(unbind|bind)\s+system\s+(user|group))(\?!diff\s+ns\s+config)(\?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)'
    

    Hinweis:

    Das Systembenutzerkonto verfügt über Berechtigungen, die auf der von Ihnen definierten Befehlsrichtlinie basieren.

    Die in Schritt 3 erwähnte Befehlsrichtlinie ähnelt der integrierten Befehlsrichtlinie sysAdmin mit zusätzlicher Berechtigung zum Hochladen von Dateien.

    In der bereitgestellten Befehlsrichtlinienspezifikation werden Sonderzeichen, die maskiert werden müssen, bereits weggelassen, um sie einfach in die Citrix ADC-Befehlszeile zu kopieren.

    Verwenden Sie zum Konfigurieren der Befehlsrichtlinie über den Citrix ADC-Konfigurationsassistenten (GUI) die folgende Befehlsrichtlinienspezifikation.

    ^(?!shell)(?!sftp)(?!scp)(?!batch)(?!source)(?!.*superuser)(?!.*nsroot)(?!install)(?!show\s+system\s+(user|cmdPolicy|file))(?!(set|add|rm|create|export|kill)\s+system)(?!(unbind|bind)\s+system\s+(user|group))(?!diff\s+ns\s+config)(?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)^(?!shell)(?!sftp)(?!scp)(?!batch)(?!source)(?!.*superuser)(?!.*nsroot)(?!install)(?!show\s+system\s+(user|cmdPolicy|file))(?!(set|add|rm|create|export|kill)\s+system)(?!(unbind|bind)\s+system\s+(user|group))(?!diff\s+ns\s+config)(?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)
    
  4. Binden Sie die Richtlinie mit dem folgenden Befehl an das Systembenutzerkonto:

    bind system user cic cic-policy 0
    

Citrix Ingress Controller als Pod bereitstellen

Führen Sie folgende Schritte aus:

  1. Laden Sie die citrix-k8s-ingress-controller.yaml mit dem folgenden Befehl herunter:

    wget  https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/baremetal/citrix-k8s-ingress-controller.yaml
    
  2. Bearbeiten Sie die citrix-k8s-ingress-controller.yaml-Datei und geben Sie die Werte für die folgenden Umgebungsvariablen ein:

    Umgebungsvariable Erforderlich oder optional Beschreibung
    NS_IP Obligatorisch Die IP-Adresse der Citrix ADC Appliance. Weitere Einzelheiten finden Sie unter Voraussetzungen.
    NS_USER und NS_PASSWORD Obligatorisch Der Benutzername und das Kennwort der Citrix ADC VPX- oder MPX-Appliance, die als Ingress-Gerät verwendet wird. Weitere Einzelheiten finden Sie unter Voraussetzungen.
    EULA Obligatorisch Die Endbenutzer-Lizenzvereinbarung. Geben Sie den Wert als an Yes.
    kubernetes_URL Optional Die kube-apiserver-URL, die Citrix Ingress Controller verwendet, um die Ereignisse zu registrieren. Wenn der Wert nicht angegeben wird, verwendet der Citrix Ingress Controller die interne kube-apiserver-IP-Adresse.
    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. Weitere Informationen finden Sie unter Protokollebenen
    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. Standardmäßig verwendet Citrix Ingress Controller HTTP auf Port 80. Sie können auch HTTPS auf Port 443 verwenden.
    ingress-Klassen Optional Wenn mehrere Ingress-Load-Balancer zum Lastenausgleich verschiedener Eingangsressourcen verwendet werden. Sie können diese Umgebungsvariable verwenden, um den Citrix Ingress Controller anzugeben, um Citrix ADC zu konfigurieren, das einer bestimmten Eingangsklasse 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 fungiert als Fallback, wenn die Frontend-IP-Annotation nicht in Ingress yaml bereitgestellt wird. Für den Type Loadbalancer-Dienst nicht unterstützt.
    NS_APPS_NAME_PREFIX Optional Standardmäßig fügt der Citrix Ingress Controller “k8s” als Präfix zu den Citrix ADC-Entitäten hinzu, z. B. dem virtuellen Server für Content Switching (CS), dem virtuellen Lastenausgleichsserver (LB) usw. Sie können das Präfix jetzt mit der Umgebungsvariablen NS_APPS_NAME_PREFIX in der YAML-Datei der Citrix Ingress Controller-Bereitstellung anpassen. Sie können alphanumerische Zeichen für das Präfix verwenden und die Präfixlänge sollte 8 Zeichen nicht überschreiten.
    NAMESPACE Optional Beim Ausführen eines Citrix Ingress Controller mit rollenbasiertem RBAC müssen Sie den Namespace angeben, den Sie abhören oder Ereignisse abrufen möchten. Dieser Namespace muss mit dem Namespace übereinstimmen, der zum Erstellen des Dienstkontos verwendet wurde. Mit dem Dienstkonto kann der Citrix Ingress Controller einen Namespace abhören. Sie können die NAMESPACE Umgebungsvariable verwenden, um den Namespace anzugeben. Weitere Informationen finden Sie unter Bereitstellen des Citrix Ingress Controller für einen Namespace.
    POD_IPS_FOR_SERVICEGROUP_MEMBERS Optional Beim Konfigurieren von Diensten vom Typ LoadBalancer und NodePort auf einem externen Citrix ADC der Stufe 1 fügt der Citrix Ingress Controller standardmäßig NodeIP und NodePort als Dienstgruppenmitglieder hinzu. Wenn diese Variable als festgelegt ist True, werden die Pod-IP-Adresse und der Port anstelle von NodeIP und NodePort als Dienstgruppenmitglieder hinzugefügt.
    IGNORE_NODE_EXTERNAL_IP Optional Beim Hinzufügen von NodeIP für Dienste vom Typ LoadBalancer oder NodePort auf einem externen Citrix ADC der Stufe 1 priorisiert der Citrix Ingress Controller eine externe IP-Adresse vor einer internen IP-Adresse. Wenn Sie eine interne IP-Adresse einer externen IP-Adresse für NodeIP vorziehen möchten, können Sie diese Variable auf festlegen True.
    NS_DNS_NAMESERVER Optional Aktiviert das Hinzufügen von DNS-Nameservern auf Citrix ADC VPX.
    NS_CONFIG_DNS_REC Optional Aktiviert das Hinzufügen von DNS-Einträgen auf Citrix ADC for Ingress-Ressourcen. Diese Variable ist zum Boot-Zeitpunkt konfiguriert und kann zur Laufzeit nicht geändert werden. Mögliche Werte sind wahr oder falsch. Der Standardwert ist false und Sie müssen ihn als true festlegen, um die DNS-Serverkonfiguration zu aktivieren. Wenn Sie den Wert auf “true” festlegen, wird der entsprechende Befehl add dns addrec <abc.com 1.1.1.1> auf Citrix ADC ausgeführt und ein Adressdatensatz (Zuordnung des Domainnamens zur IP-Adresse) wird erstellt. Weitere Informationen finden Sie unter Erstellen von Adressdatensätzen für einen Domainnamen.
    NS_SVC_LB_DNS_REC Optional Aktiviert das Hinzufügen von DNS-Einträgen auf Citrix ADC für Dienste vom Typ LoadBalancer. Diese Variable ist zum Boot-Zeitpunkt konfiguriert und kann zur Laufzeit nicht geändert werden. Mögliche Werte sind wahr oder falsch. Der Standardwert ist false und Sie müssen ihn als true festlegen, um die DNS-Serverkonfiguration zu aktivieren.
  3. Nachdem Sie die Umgebungsvariablen aktualisiert haben, speichern Sie die YAML-Datei und stellen Sie sie mit dem folgenden Befehl bereit:

    kubectl create -f citrix-k8s-ingress-controller.yaml
    
  4. Überprüfen Sie mit dem folgenden Befehl, ob der Citrix Ingress Controller erfolgreich bereitgestellt wurde:

    kubectl get pods --all-namespaces
    

Bereitstellen Citrix Ingress Controller als Beiwagen mit Citrix ADC CPX

Verwenden Sie die Datei citrix-k8s-cpx-ingress.yaml, um einen Citrix ADC CPX mit dem Citrix Ingress Controller als Beiwagen bereitzustellen. Die YAML-Datei stellt eine Citrix ADC CPX-Instanz bereit, die für den Lastausgleich des Nord-Süd-Datenverkehrs zu den Microservices in Ihrem Kubernetes-Cluster verwendet wird.

Führen Sie folgende Schritte aus:

  1. Laden Sie die citrix-k8s-cpx-ingress.yaml mit dem folgenden Befehl herunter:

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/baremetal/citrix-k8s-cpx-ingress.yml
    
  2. Stellen Sie die Datei citrix-k8s-cpx-ingress.yaml mit dem folgenden Befehl bereit:

    kubectl create -f citrix-k8s-cpx-ingress.yaml
    
  3. Überprüfen Sie mit dem folgenden Befehl, ob der Citrix Ingress Controller erfolgreich bereitgestellt wurde:

    kubectl get pods --all-namespaces
    

Stellen Sie Citrix ADC CPX mit dem Citrix Ingress Controller als Sidecar ohne die Standardanmeldeinformationen bereit

Wenn Sie zuvor Citrix ADC CPX mit dem Citrix Ingress Controller als Sidecar bereitstellen, ohne die Anmeldeinformationen anzugeben, wird vom Citrix Ingress Controller nsroot/nsroot als Standardanmeldeinformationen betrachtet.

Mit den neuesten Citrix ADC CPX-Versionen (Citrix ADC CPX 13.0.64.35 und höher) werden die Standardanmeldeinformationen entfernt. Wenn Sie also den Citrix Ingress Controller als Beiwagen mit den neuesten Versionen von Citrix ADC CPX bereitstellen, kann der Citrix Ingress Controller die Anmeldeinformationen von Citrix ADC CPX über die Datei /var/deviceinfo/random_id im Citrix ADC CPX abrufen. Diese Datei kann zwischen dem Citrix ADC CPX und dem Citrix Ingress Controller über das Volume-Mount gemeinsam genutzt werden.

Je nachdem, ob Sie die neueste Citrix ADC CPX-Version oder eine ältere Version verwenden, müssen Sie eine der folgenden YAML-Bereitstellungsdateien auswählen. Für ältere Versionen von Citrix ADC CPX müssen Sie die Anmeldeinformationen in der YAML-Datei angeben.

  • Verwenden Sie für Citrix ADC CPX 13.0.64.35 und höhere Versionen die folgende YAML:

citrix-k8s-cpx-ingress.yml

Wie in der YAML bereitgestellt, ist das Folgende ein Snippet der Volume-Mount-Konfiguration, die in der YAML-Datei sowohl für den Citrix Ingress Controller als auch für Citrix ADC CPX erforderlich ist:

    volumeMounts:
    - mountPath: /var/deviceinfo
    name: shared-data

Im Folgenden finden Sie ein Snippet der gemeinsam genutzten Volume-Konfiguration, die für den Citrix ADC CPX und den Citrix Ingress Controller üblich ist.

    volumes:
    - name: shared-data
    emptyDir: {}
  • Verwenden Sie für frühere Citrix ADC CPX-Versionen (Versionen vor 13.0.64.35) die folgende YAML:

    cpx-ingress-vorherig.yaml

    Im Folgenden finden Sie ein Snippet des Abschnitts mit den Anmeldeinformationen im Citrix Ingress Controller:

     - name: "NS_USER"
     valueFrom:
     secretKeyRef:
             name: nslogin
             key: username
     - name: "NS_PASSWORD"
     valueFrom:
     secretKeyRef:
             name: nslogin
             key: password
    

Bereitstellen des Citrix Ingress Controller für einen Namespace

In Kubernetes besteht eine Rolle aus Regeln, die eine Reihe von Berechtigungen definieren, die für eine Reihe von Ressourcen ausgeführt werden können. In einer RBAC-fähigen Kubernetes-Umgebung können Sie zwei Arten von Rollen basierend auf dem von Ihnen benötigten Umfang erstellen:

  • Role
  • ClusterRole

Eine Rolle kann innerhalb eines Namespace mit einer Roleoder clusterweit mit einer definiert ClusterRolewerden. Sie können eine erstellen Role, um Zugriff auf Ressourcen innerhalb eines einzelnen Namespace zu gewähren.

In Kubernetes können Sie mehrere virtuelle Cluster auf demselben physischen Cluster erstellen. Namespaces bieten eine Möglichkeit, Cluster-Ressourcen auf mehrere Benutzer aufzuteilen, und sind in Umgebungen mit vielen Benutzern, die über mehrere Teams oder Projekte verteilt sind, nützlich.

Standardmäßig überwacht der Citrix Ingress Controller Ingress-Ressourcen in allen Namespaces im Kubernetes-Cluster. Wenn mehrere Teams denselben Citrix ADC verwalten möchten, können sie einen Role-basierten Citrix Ingress Controller bereitstellen, um zu überwachen, dass nur eingehende Ressourcen zu einem bestimmten Namespace gehören. Dieser Namespace muss mit dem Namespace übereinstimmen, den Sie zum Erstellen des Dienstkontos angegeben haben. Sie müssen eine Rolle erstellen und die Rolle an das Dienstkonto für den Citrix Ingress Controller binden. In diesem Fall wartet der Citrix Ingress Controller nur auf Ereignisse aus dem angegebenen Namespace und konfiguriert dann den Citrix ADC entsprechend.

Das folgende Beispiel zeigt eine YAML-Beispieldatei, die eine Rolle und RoleBinding für die Bereitstellung eines Citrix Ingress Controller für einen bestimmten Namespace definiert.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cic-k8s-role
rules:
  - apiGroups: [""]
    resources: ["endpoints", "ingresses", "pods", "secrets", "nodes", "routes", "namespaces"]
    verbs: ["get", "list", "watch"]
  # services/status is needed to update the loadbalancer IP in service status for integrating
  # service of type LoadBalancer with external-dns
  - apiGroups: [""]
    resources: ["services/status"]
    verbs: ["patch"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list", "watch", "patch"]
  - apiGroups: ["extensions"]
    resources: ["ingresses", "ingresses/status"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "list", "watch"]

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cic-k8s-role
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cic-k8s-role

subjects:
- kind: ServiceAccount
  name: cic-k8s-role
  namespace: default

---
<!--NeedCopy-->

Einschränkungen

Wenn der Citrix Ingress Controller mit einer Rolle ausgeführt wird (Bereich mit in einem Namespace), werden die folgenden Funktionen nicht unterstützt, da sie einen globalen Geltungsbereich erfordern.

  • Konfigurieren statischer Routen
  • auf allen Namensräumen zuschauen
  • CRD
Citrix Ingress Controller mit YAML bereitstellen