Citrix ADC Ingress Controller

Listener-CRD-Unterstützung für Ingress durch Annotation

Ingress ist eine Kubernetes-Standardressource, die die HTTP-Routing-Funktion zum Back-End von Kubernetes-Diensten angibt. Citrix Ingress Controller bietet verschiedene Anmerkungen zur Feinabstimmung der Ingress-Parameter für Front-End- und Back-End-Konfigurationen. Mit der Anmerkung ingress.citrix.com/frontend-ip können Sie beispielsweise die Front-End-Listener-IP-Adresse angeben, die in Citrix ADC vom Citrix Ingress Controller konfiguriert wurde. In ähnlicher Weise gibt es andere Front-End-Anmerkungen zur Feinabstimmung der HTTP- und SSL-Parameter. Wenn mehrere Ingress-Ressourcen vorhanden sind und diese Front-End-IP und Port gemeinsam nutzen, ist es schwierig, diese Anmerkungen in jeder Ingress-Ressource anzugeben.

Manchmal gibt es eine Trennung der Verantwortung zwischen Netzwerkbetriebsexperten (NetOps) und Entwicklern. NetOps ist dafür verantwortlich, Front-End-Konfigurationen wie Front-End-IP, Zertifikate und SSL-Parameter zu entwickeln. Entwickler sind für das HTTP-Routing und die Back-End-Konfigurationen verantwortlich. Citrix Ingress Controller bietet bereits CRDs für das Inhaltsrouting wie Listener-CRD für Front-End-Konfigurationen und HTTProute für Back-End-Routing-Logik. Jetzt kann Listener-CRD mithilfe einer von Citrix bereitgestellten Anmerkung auf Ingress-Ressourcen angewendet werden.

Mit dieser Funktion können Sie die Listener-CRD für Ihre Ingress-Ressource verwenden und die Erstellung der Front-End-Konfiguration von der Ingress-Definition trennen. Daher kann NetOps die Listener-Ressource separat definieren, um Front-End-IP, Zertifikate und andere Front-End-Parameter (TCP, HTTP und SSL) zu konfigurieren. Alle Konfigurationsänderungen können auf die Listener-Ressourcen angewendet werden, ohne jede Ingress-Ressource zu ändern. In Citrix ADC entspricht eine Listener-Ressource virtuellen Servern zum Content Switching, virtuellen SSL-Servern, Certkeys und Front-End-HTTP-, SSL- und TCP-Profilen.

Hinweis:

Bei der Verwendung dieser Funktion müssen Sie sicherstellen, dass sich alle Ingresses mit derselben Front-End-IP und demselben Port auf dieselbe Listener-Ressource beziehen. Für Ingresses, die dieselben Front-End-IP- und Port-Kombinationen verwenden, wird ein Ingress, der sich auf eine Listener-Ressource bezieht, und ein anderer Ingress, der sich auf die Annotation ingress.citrix.com/frontend-ip bezieht, nicht unterstützt.

Einschränkungen

Wenn Listener für die Front-End-Konfigurationen verwendet wird, werden die folgenden Anmerkungen ignoriert und es gibt möglicherweise keine Auswirkungen:

  • ingress.citrix.com/frontend-ip
  • Ingress.citrix.com/frontend-ipset-name
  • ingress.citrix.com/secure-port
  • ingress.citrix.com/insecure-port
  • ingress.citrix.com/insecure-termination
  • ingress.citrix.com/secure-service-type
  • ingress.citrix.com/insecure-service-type
  • ingress.citrix.com/csvserver
  • ingress.citrix.com/frontend-tcpprofile
  • ingress.citrix.com/frontend-sslprofile
  • ingress.citrix.com/frontend-httpprofile

Bereitstellen einer Listener-CRD-Ressource für Ingress

Mit der Annotation ingress.citrix.com/listener können Sie den Namen und den Namespace der Listener-Ressource für den Ingress in Form von namespace/name angeben. Der Namespace ist nicht erforderlich, wenn sich die Listener-Ressource im selben Namespace wie der von Ingress befindet.

Es folgt ein Beispiel für die Anmerkung:

ingress.citrix.com/listener: default/listener1

Hier ist default der Namespace der Listener-Ressource und listener1 der Name der Listener-Ressource, die die Front-End-Parameter angibt.

Führen Sie die folgenden Schritte aus, um eine Listener-Ressource für den Ingress bereitzustellen:

  1. Erstellen Sie wie folgt eine Listener-Ressource (listener.yaml):

    apiVersion: citrix.com/v1
    kind: Listener
    metadata:
      name: my-listener
      namespace: default
    spec:
      ingressClass: citrix
      vip: '192.168.0.1' # Virtual IP address to be used, not required when CPX is used as ingress device
      port: 443
      protocol: https
      redirectPort: 80
      secondaryVips:
      - "10.0.0.1"
      - "1.1.1.1"
      policies:
        httpprofile:
          config:
            websocket: "ENABLED"
        tcpprofile:
          config:
            sack: "ENABLED"
        sslprofile:
          config:
            ssl3: "ENABLED"
        sslciphers:
        - SECURE
        - MEDIUM
        analyticsprofile:
          config:
          - type: webinsight
            parameters:
              allhttpheaders: "ENABLED"
        csvserverConfig:
          rhistate: 'ACTIVE'
    

    Hier gibt die Listener-Ressource my-listener im Standard-Namespace die Front-End-Konfiguration wie VIP, sekundäre VIPs, HTTP-Profil, TCP-Profil, SSL-Profil und SSL-Verschlüsselungen an. Es erstellt einen virtuellen Content Switching-Server in Citrix ADC auf Port 443 für HTTPS-Verkehr, und der gesamte HTTP-Verkehr auf Port 80 wird auf HTTPS umgeleitet.

    Hinweis:

    Das Feld vip in der Listener-Ressource ist nicht erforderlich, wenn Citrix ADC CPX als Eingangsgerät verwendet wird. Für Citrix ADC VPX entspricht VIP der Pod-IP-Adresse, die automatisch vom Citrix Ingress Controller konfiguriert wird.

  2. Wenden Sie die Listener-Ressource an.

    kubectl apply -f listener.yaml
    
  3. Erstellen Sie eine Ingress-Ressource (ingress.yaml), indem Sie auf die Listener-Ressource verweisen.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
      namespace: default
      annotations:
        ingress.citrix.com/listener: my-listener
        kubernetes.io/ingress.class: "citrix"
    spec:
      tls:
      - secretName: my-secret
        hosts:
        - example.com
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: kuard
                port:
                  number: 80
    

    Hier bezieht sich die Ingressressource my-ingress auf die Listener-Ressource my-listener im Standard-Namespace für Front-End-Konfigurationen.

  4. Wenden Sie die Eingangsressource an.

    kubectl apply -f ingress.yaml
    

Zertifikatverwaltung

Es gibt zwei Möglichkeiten, wie Sie die Zertifikate für Ingress-Ressourcen angeben können. Sie können die Zertifikate als Teil der Ingress-Ressource angeben oder die Zertifikate als Teil der Listener-Ressource bereitstellen.

Zertifikatsverwaltung durch Ingress-Ressource

Bei diesem Ansatz werden alle Zertifikate wie folgt als Teil der regulären Eingangsressource angegeben. Die Listener-Ressource gibt keine Zertifikate an. In diesem Modus müssen Sie Zertifikate als Teil der Ingress-Ressource angeben.

  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: my-ingress
    namespace: default
    annotations:
      ingress.citrix.com/listener: my-listener
      kubernetes.io/ingress.class: "citrix"
  spec:
    tls:
    - secretName: my-secret
      hosts:
      - example.com
    rules:
    - host: example.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: kuard
              port:
                number: 80

Zertifikatsverwaltung über Listener-Ressource

Bei diesem Ansatz werden Zertifikate als Teil der Listener-Ressource bereitgestellt. Sie müssen keine Zertifikate als Teil der Ingress-Ressource angeben.

Das folgende Listener-Ressourcenbeispiel zeigt Zertifikate.

apiVersion: citrix.com/v1
kind: Listener
metadata:
  name: my-listener
  namespace: default
spec:
  ingressClass: citrix
  certificates:
  - secret:
      name: my-secret
    # Secret named 'my-secret' in current namespace bound as default certificate
    default: true
  - secret:
      # Secret 'other-secret' in demo namespace bound as SNI certificate
      name: other-secret
      namespace: demo
  vip: '192.168.0.1' # Virtual IP address to be used, not required when CPX is used as ingress device
  port: 443
  protocol: https
  redirectPort: 80

In der Ingress-Ressource werden keine geheimen Schlüssel angegeben, wie im folgenden Beispiel gezeigt.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default
  annotations:
    ingress.citrix.com/listener: my-listener
    kubernetes.io/ingress.class: "citrix"
spec:
  tls:
  # TLS field is empty as the certs are specified in Listener
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kuard
            port:
              number: 80
Listener-CRD-Unterstützung für Ingress durch Annotation