Ingress Controller de Citrix ADC

Mejoras para el servicio de Kubernetes de soporte de tipo LoadBalancer en el Citrix Ingress Controller

La compatibilidad con el servicio de Kubernetes de tipo LoadBalancer en el Citrix Ingress Controller se ha mejorado con las siguientes funciones:

  • Soporte de inyección de salud en ruta (RHI) BGP
  • Anunciar o recuperar direcciones IP (VIP) de equilibradores de carga en función de la disponibilidad de los pods del servicio en un conjunto de nodos (zonas) definidos por las etiquetas del nodo

Compatibilidad con la configuración automática de BGP RHI en Citrix ADC

La inyección de estado de ruta (RHI) permite que Citrix ADC anuncie la disponibilidad de una VIP como ruta de host en toda la red mediante BGP. Sin embargo, tenía que realizar la configuración manualmente en Citrix ADC para admitir RHI. Con los controladores de entrada de Citrix implementados en un entorno de Kubernetes, puede automatizar la configuración en Citrix ADC para anunciar VIP.

Cuando LoadBalancer se crea un servicio de tipo, el Citrix Ingress Controller configura un VIP en Citrix ADC para el servicio. Si la compatibilidad con RHI de BGP está habilitada para el Citrix Ingress Controller, configura automáticamente Citrix ADC para anunciar el VIP a la red BGP.

Anunciar y retirar VIP en función de la disponibilidad de los pods

En la topología, como se muestra en el siguiente diagrama, los nodos de un clúster de Kubernetes se distribuyen físicamente en tres racks diferentes. Se agrupan lógicamente en tres zonas. Cada zona tiene un Citrix ADC MPX como ADC de nivel 1 y un Citrix Ingress Controller en el mismo clúster de Kubernetes. Los controladores de entrada de Citrix en todas las zonas escuchan el mismo servidor de API de Kubernetes. Por lo tanto, cada vez que LoadBalancer se crea un servicio de tipo, todos los ADC de Citrix del clúster anuncian la misma dirección IP a la estructura BGP. Incluso, si no hay carga de trabajo en una zona, el Citrix ADC de esa zona sigue anunciando la dirección IP.

Topología de ejemplo

Citrix proporciona una solución para anunciar o retirar el VIP en función de la disponibilidad de los pods en una zona. Debe etiquetar los nodos en cada zona para que el Citrix Ingress Controller pueda identificar los nodos que pertenecen a la misma zona. El Citrix Ingress Controller en cada zona comprueba si hay pods en los nodos de la zona. Si hay pods en los nodos de la zona, anuncia el VIP. De lo contrario, revoca el anuncio de VIP de Citrix ADC en la zona.

Configuración de RHI de BGP en Citrix ADC mediante el Citrix Ingress Controller

En este tema se proporciona información sobre cómo configurar RHI de BGP en Citrix ADC mediante el Citrix Ingress Controller en función de una topología de ejemplo. En esta topología, los nodos de un clúster de Kubernetes se implementan en dos zonas. Cada zona tiene un Citrix ADC VPX o MPX como ADC de nivel 1 y un Citrix Ingress Controller para configurar ADC en el clúster de Kubernetes. Los ADC se conectan mediante BGP con el enrutador ascendente.

Topología de ejemplo de configuración de BGP RHI

Requisitos previos

  • Debe configurar Citrix ADC MPX o VPX como par BGP con los enrutadores ascendentes.

Realice los siguientes pasos para configurar la compatibilidad con RHI de BGP en función de la topología de muestra.

  1. Etiquete los nodos de cada zona con el siguiente comando:

    Para la zona 1:

    kubectl label nodes node1 rack=rack-1
    kubectl label nodes node2 rack=rack-1
    

    Para la zona 2:

    kubectl label nodes node3 rack=rack-2
    kubectl label nodes node4 rack=rack-2
    
  2. Configure las siguientes variables de entorno en los archivos YAML de configuración Citrix Ingress Controller de la siguiente manera:

    Para la zona 1:

    - name: "NODE_LABELS"
      value: "rack-1"
    - name: "BGP_ADVERTISEMENT"
      value: "True"
    

    Para la zona 2:

     - name: "NODE_LABELS"
       value: "rack-2"
     - name: "BGP_ADVERTISEMENT"
       value: "True"
    

    A continuación se proporciona un archivo cic.yaml de ejemplo para implementar el Citrix Ingress Controller en la zona 1:

    apiVersion: v1
    kind: Pod
    metadata:
      name: cic-k8s-ingress-controller-1
      labels:
        app: cic-k8s-ingress-controller-1
    spec:
      serviceAccountName: cic-k8s-role
      containers:
      - name: cic-k8s-ingress-controller
        image: "quay.io/citrix/citrix-k8s-ingress-controller:1.26.7"
    
        env:
        # Set NetScaler NSIP/SNIP, SNIP in case of HA (mgmt has to be enabled)
        - name: "NS_IP"
          value: "10.217.212.24"
       # Set username for Nitro
        - name: "NS_USER"
          valueFrom:
            secretKeyRef:
              name: nslogin
              key: username
       # Set user password for Nitro
        - name: "NS_PASSWORD"
          valueFrom:
            secretKeyRef:
            name: nslogin
            key: password        
        - name: "EULA"
          value: "yes"
        - name: "NODE_LABELS"
          value: "rack=rack-1"
        - name: "BGP_ADVERTISEMENT"
          value: "True"
    args:
      - --ipam 
        citrix-ipam-controller
    imagePullPolicy: Always
    
  3. Implemente el Citrix Ingress Controller mediante el siguiente comando.

    Nota:

    Debe implementar el Citrix Ingress Controller en ambos bastidores (por zona).

    Kubectl create -f cic.yaml
    
  4. Implemente una aplicación de ejemplo con el archivo web-frontend-lb.yaml.

    Kubectl crea -f web-frontend-lb.yaml

    El contenido de web-frontend-lb.yaml es el siguiente:

    apiVersion: v1
    kind: Deployment
    metadata:
      name: web-frontend
    spec:
      selector:
        matchLabels:
          app: web-frontend
      replicas: 4
      template:
        metadata:
          labels:
            app: web-frontend
        spec:
          containers:
          - name: web-frontend
            image: 10.217.6.101:5000/web-test:latest
            ports:
              - containerPort: 80
            imagePullPolicy: Always
    
  5. Cree un servicio de tipo LoadBalancer para exponer la aplicación.

    Kubectl create -f web-frontend-lb-service.yaml
    

    El contenido de web-frontend-lb-service.yaml es el siguiente:

    apiVersion: v1
    kind: Service
    metadata:
      name: web-frontend
      labels:
        app: web-frontend
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        protocol: TCP
        name: http
      selector:
        app: web-frontend
    
  6. Compruebe la creación del grupo de servicios en Citrix ADC mediante el siguiente comando.

    show servicegroup <service-group-name>
    

    A continuación se muestra un ejemplo de salida del comando.

    #  show servicegroup k8s-web-frontend_default_80_svc_k8s-web-frontend_default_80_svc
       
    k8s-web-frontend_default_80_svc_k8s-web-frontend_default_80_svc - TCP
    State: ENABLED Effective State: UP Monitor Threshold : 0
    Max Conn: 0 Max Req: 0 Max Bandwidth: 0 kbits
    Use Source IP: NO
    Client Keepalive(CKA): NO
    TCP Buffering(TCPB): NO
    HTTP Compression(CMP): NO
    Idle timeout: Client: 9000 sec Server: 9000 sec
    Client IP: DISABLED 
    Cacheable: NO
    SC: OFF
    SP: OFF
    Down state flush: ENABLED
    Monitor Connection Close : NONE
    Appflow logging: ENABLED
    ContentInspection profile name: ???
    Process Local: DISABLED
    Traffic Domain: 0
    
    
    1)   10.217.212.23:30126 State: UP Server Name: 10.217.212.23 Server ID: None Weight: 1
      Last state change was at Wed Jan 22 23:35:11 2020 
      Time since last state change: 5 days, 00:45:09.760
    
      Monitor Name: tcp-default  State: UP Passive: 0
      Probes: 86941 Failed [Total: 0 Current: 0]
      Last response: Success - TCP syn+ack received.
      Response Time: 0 millisec
    
    2)   10.217.212.22:30126 State: UP Server Name: 10.217.212.22 Server ID: None Weight: 1
      Last state change was at Wed Jan 22 23:35:11 2020 
      Time since last state change: 5 days, 00:45:09.790
    
      Monitor Name: tcp-default State: UP Passive: 0
      Probes: 86941 Failed [Total: 0 Current: 0]
      Last response: Success - TCP syn+ack received.
    
  7. Verifique el anuncio VIP en el enrutador BGP mediante el siguiente comando.

     >VTYSH
    # show ip route bgp
      B       172.29.46.78/32   [200/0] via 2.2.2.100, vlan20, 1d00h35m
                                [200/0] via 2.2.2.101, vlan20, 1d00h35m
      Gateway of last resort is not set
    
Mejoras para el servicio de Kubernetes de soporte de tipo LoadBalancer en el Citrix Ingress Controller