Citrix ADC Ingress Controller

Stellen Sie den Citrix Ingress Controller für Citrix ADC mit Admin-Partitionen bereit

Citrix Ingress Controller wird verwendet, um einen oder mehrere Citrix ADC basierend auf der Ingress-Ressourcenkonfiguration automatisch zu konfigurieren. Die Citrix ADC Appliance (MPX oder VPX) kann in logische Entitäten partitioniert werden, die als Admin-Partitionen bezeichnet werden, wobei jede Partition konfiguriert und als separate Citrix ADC Appliance verwendet werden kann. Weitere Informationen finden Sie unter Admin-Partition. Citrix Ingress Controller kann auch zur Konfiguration von Citrix ADC mit Admin-Partitionen bereitgestellt werden.

Für Citrix ADC mit Admin-Partitionen müssen Sie für jede Partition eine einzelne Instanz des Citrix Ingress Controller bereitstellen. Und die Partition muss einem Partitionsbenutzer zugeordnet sein, der für die Citrix Ingress Controller-Instanz spezifisch ist.

Voraussetzungen

Stellen Sie Folgendes sicher:

  • Admin-Partitionen sind auf der Citrix ADC Appliance konfiguriert. Anweisungen finden Sie unter Konfigurieren von Admin-Partitionen.
  • Erstellen Sie einen Partitionsbenutzer speziell für den Citrix Ingress Controller. Der Citrix Ingress Controller konfiguriert den Citrix ADC mithilfe dieses Partitionsbenutzerkontos. Stellen Sie sicher, dass Sie diesen Partitionsbenutzer nicht anderen Partitionen in der Citrix ADC Appliance zuordnen.

    Hinweis:

    Stellen Sie für SSL-bezogene Anwendungsfälle in der Admin-Partition sicher, dass Sie Citrix ADC Version 12.0—56.8 und höher verwenden.

So stellen Sie den Citrix Ingress Controller für Citrix ADC mit Admin-Partitionen bereit

  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 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 des Partitionsbenutzers, den Sie für den Citrix Ingress Controller erstellt haben. Weitere Einzelheiten finden Sie unter Voraussetzungen.
    NS_VIP Mandatory Citrix Ingress Controller verwendet die in dieser Umgebungsvariable angegebene IP-Adresse, um eine virtuelle IP-Adresse für den Citrix ADC zu konfigurieren, der den Ingress-Datenverkehr empfängt. Hinweis: NS_VIP fungiert als Fallback, wenn die Frontend-IP-Annotation nicht in Ingress yaml bereitgestellt wird. Wird nur für Ingress unterstützt.
    NS_SNIPS Optional Gibt die SNIP-Adressen auf der Citrix ADC Appliance oder die SNIP-Adressen auf einer bestimmten Administratorpartition auf der Citrix ADC Appliance an.
    NS_ENABLE_MONITORING Mandatory Stellen Sie den Wert Yes für die Überwachung von Citrix ADC ein. Hinweis: Stellen Sie sicher, dass Sie die Citrix ADC-Überwachung für Citrix ADC mit Admin-Partitionen deaktivieren. Stellen Sie den Wert auf ein No.
    EULA Mandatory 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 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 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
  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
    

Anwendungsfall: So stellen Sie sicher Multitenant-Microservice-basierte Anwendungen mithilfe von Citrix ADC-Adminpartitionen bereit

Sie können den eingehenden Datenverkehr zwischen verschiedenen Microservice-basierten Anwendungen mit der Citrix ADC-Adminpartition mithilfe des Citrix Ingress Controller isolieren. Die Citrix ADC-Adminpartition ermöglicht Mehrmandantenfähigkeit auf Softwareebene in einer einzigen Citrix ADC-Instanz. Jede Partition hat ihre eigene Steuerebene und Netzwerkebene.

Sie können eine Instanz von Citrix Ingress Controller in jedem Namespace in einem Cluster bereitstellen.

Stellen Sie sich zum Beispiel vor, Sie haben zwei Namespaces in einem Kubernetes-Cluster und möchten diese Namespaces unter zwei verschiedenen Administratoren voneinander isolieren. Sie können die Admin-Partitionsfunktion verwenden, um diese beiden Namespaces zu trennen. Erstellen Sie Namespace 1 und Namespace 2 und stellen Sie Citrix Ingress Controller separat in diesen beiden Namespaces bereit.

Citrix Ingress Controller-Instanzen bieten Konfigurationsanweisungen für die jeweiligen Citrix ADC-Partitionen mit dem im YAML-Manifest angegebenen Systembenutzerkontos.

Citrix ADC verwaltet Kubernetes-Cluster-Arbeitslast mithilfe von Admin-Partitionen

In diesem Beispiel werden Apache- und Gästebuch-Beispielanwendungen in zwei verschiedenen Namespaces (Namespace 1 bzw. Namespace 2) in einem Kubernetes-Cluster bereitgestellt. Sowohl das Apache- als auch das Gastbuch-Anwendungsteam möchten ihre Arbeitslast unabhängig verwalten und keine Ressourcen teilen. Die Citrix ADC-Adminpartition hilft dabei, Mehrmandantenfähigkeit zu erreichen. In diesem Beispiel werden zwei Partitionen (Standard, Partition1) verwendet, um beide Anwendungsarbeitslasten getrennt zu verwalten.

Es gelten die folgenden Voraussetzungen:

  • Stellen Sie sicher, dass Sie Administratorpartitionen auf der Citrix ADC Appliance konfiguriert haben. Anweisungen finden Sie unter Konfigurieren von Admin-Partitionen.

  • Stellen Sie sicher, dass Sie ein Partitionsbenutzerkonto speziell für den Citrix Ingress Controller erstellen. Der Citrix Ingress Controller konfiguriert den Citrix ADC mithilfe dieses Partitionsbenutzerkontos. Stellen Sie sicher, dass Sie diesen Partitionsbenutzer nicht anderen Partitionen in der Citrix ADC Appliance zuordnen.

Beispiel

Das folgende Beispielszenario zeigt, wie verschiedene Anwendungen in verschiedenen Namespaces in einem Kubernetes-Cluster bereitgestellt werden und wie die Anforderung mithilfe der Admin-Partition vom ADC isoliert werden kann.

In diesem Beispiel werden zwei Beispielanwendungen in zwei verschiedenen Namespaces in einem Kubernetes-Cluster bereitgestellt. In diesem Beispiel wird eine Standardpartition in Citrix ADC für die Anwendung apache und die Admin-Partition p1 für die Anwendung guestbook verwendet.

Erstellen von Namensräumen

Erstellen Sie zwei Namensräume ns1 und ns2 mit den folgenden Befehlen:

    kubectl create namespace ns1
    kubectl create namespace ns2

Konfigurationen im Namespace ns1

  1. Stellen Sie die Anwendung apache in ns1 bereit.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns1
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: apache-ns1
      name: apache-ns1
      namespace: ns1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: apache-ns1
      template:
        metadata:
          labels:
            app: apache-ns1
        spec:
          containers:
          - image: httpd
            name: httpd
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        app: apache-ns1
      name: apache-ns1
      namespace: ns1
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: apache-ns1
    
  2. Stellen Sie den Citrix Ingress Controller in bereit ns1.

    Sie können die YAML-Datei verwenden, um den Citrix Ingress Controller bereitzustellen, oder das Helm-Diagramm verwenden.

    Stellen Sie sicher, dass Sie die Benutzeranmeldeinformationen verwenden, die an die Standardpartition gebunden sind.

    helm install cic-def-part-ns1 citrix/citrix-ingress-controller --set nsIP=<nsIP of ADC>,license.accept=yes,adcCredentialSecret=nslogin,ingressClass[0]=citrix-def-part-ns1 --namespace ns1
    
  3. Stellen Sie die Ingress-Ressource bereit.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-apache-ns1
      namespace: ns1
      annotations:
        kubernetes.io/ingress.class: "citrix-def-part-ns1"
        ingress.citrix.com/frontend-ip: "< ADC VIP IP >"
    spec:
      rules:
      - host: apache-ns1.com
        http:
          paths:
          - backend:
              service:
                name: apache-ns1
                port:
                  number: 80
            pathType: Prefix
            path: /index.html
    
  4. Citrix Ingress Controller in ns1 konfiguriert die ADC-Entitäten in der Standardpartition.

Konfigurationen im Namespace ns2

  1. Anwendung guestbook in ns2 bereitstellen.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns2
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-master
      namespace: ns2
      labels:
        app: redis
        tier: backend
        role: master
    spec:
      ports:
      - port: 6379
        targetPort: 6379
      selector:
        app: redis
        tier: backend
        role: master
    ---
    apiVersion: apps/v1 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
    kind: Deployment
    metadata:
      name: redis-master
      namespace: ns2
    spec:
      selector:
        matchLabels:
          app: redis
          role: master
          tier: backend
      replicas: 1
      template:
        metadata:
          labels:
            app: redis
            role: master
            tier: backend
        spec:
          containers:
          - name: master
            image: k8s.gcr.io/redis:e2e  # or just image: redis
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            ports:
            - containerPort: 6379
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-slave
      namespace: ns2
      labels:
        app: redis
        tier: backend
        role: slave
    spec:
      ports:
      - port: 6379
      selector:
        app: redis
        tier: backend
        role: slave
    ---
    apiVersion: apps/v1 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
    kind: Deployment
    metadata:
      name: redis-slave
      namespace: ns2
    spec:
      selector:
        matchLabels:
          app: redis
          role: slave
          tier: backend
      replicas: 2
      template:
        metadata:
          labels:
            app: redis
            role: slave
            tier: backend
        spec:
          containers:
          - name: slave
            image: gcr.io/google_samples/gb-redisslave:v1
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            env:
            - name: GET_HOSTS_FROM
              value: dns
              # If your cluster config does not include a dns service, then to
              # instead access an environment variable to find the master
              # service's host, comment out the 'value: dns' line above, and
              # uncomment the line below:
              # value: env
            ports:
            - containerPort: 6379
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: frontend
      namespace: ns2
      labels:
        app: guestbook
        tier: frontend
    spec:
      # if your cluster supports it, uncomment the following to automatically create
      # an external load-balanced IP for the frontend service.
      # type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: guestbook
        tier: frontend
    ---
    apiVersion: apps/v1 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
    kind: Deployment
    metadata:
      name: frontend
      namespace: ns2
    spec:
      selector:
        matchLabels:
          app: guestbook
          tier: frontend
      replicas: 3
      template:
        metadata:
          labels:
            app: guestbook
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: gcr.io/google-samples/gb-frontend:v4
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            env:
            - name: GET_HOSTS_FROM
              value: dns
              # If your cluster config does not include a dns service, then to
              # instead access environment variables to find service host
              # info, comment out the 'value: dns' line above, and uncomment the
              # line below:
              # value: env
            ports:
            - containerPort: 80
    
  2. Stellen Sie den Citrix Ingress Controller im Namespace ns2 bereit.

    Stellen Sie sicher, dass Sie die Benutzeranmeldeinformationen verwenden, die an die Partition p1 gebunden sind.

    helm install cic-adm-part-p1 citrix/citrix-ingress-controller --set nsIP=<nsIP of ADC>,nsSNIPS='[<SNIPs in partition p1>]',license.accept=yes,adcCredentialSecret=admin-part-user-p1,ingressClass[0]=citrix-adm-part-ns2 --namespace ns2
    
  3. Stellen Sie Ingress für die Anwendung guestbook bereit.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
      kubernetes.io/ingress.class: citrix-adm-part-ns2
      ingress.citrix.com/frontend-ip: "<VIP in partition 1>"
      name: guestbook-ingress
      namespace: ns2
    spec:
      rules:
      - host: www.guestbook.com
        http:
          paths:
          - backend:
              service:
                name: frontend
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  4. Citrix Ingress Controller in ns2 konfiguriert die ADC-Entitäten in der Partition p1.

Stellen Sie den Citrix Ingress Controller für Citrix ADC mit Admin-Partitionen bereit