Ingress Controller de Citrix ADC

Exponer servicio de tipo NodePort mediante Ingress

En una implementación de un solo nivel, el Citrix ADC de entrada (VPX o MPX) fuera del clúster de Kubernetes recibe todo el tráfico de Ingress a los microservicios implementados en el clúster de Kubernetes. Para que el tráfico de entrada llegue a los microservicios, debe establecer la conectividad de red entre la instancia de Citrix ADC de entrada y los pods.

Como los pods se ejecutan en una red superpuesta, las direcciones IP del pod son direcciones IP privadas y la instancia de Citrix ADC de Ingress no puede alcanzar los microservicios que se ejecutan en los pods. Para que el servicio sea accesible desde fuera del clúster, puede crear el servicio de tipo NodePort. La carga de la instancia de Citrix ADC equilibra el tráfico de entrada a los nodos que contienen los pods.

Para crear el servicio de tipo NodePort, en el archivo de definición de servicio, especifique spec.type:NodePort y, opcionalmente, especifique un puerto en el intervalo de 30000 a 32767.

Implementación ejemplo

Considere un caso en el que utiliza un servicio basado en NodePort, por ejemplo, una apache aplicación, y quiere exponer la aplicación al tráfico Norte-Sur mediante un Ingress. En este caso, debe crear la implementación de la apache aplicación, definir el servicio de tipo NodePorty crear una definición de Ingress para configurar Citrix ADC de entrada para enviar el tráfico Norte-Sur al puerto de nodos de la apache aplicación.

En este ejemplo, crea una implementación llamada apachey la implementa en su clúster de Kubernetes.

  1. Crea un manifiesto para la implementación llamada apache-deployment.yaml.

    # If using this on GKE
    # Make sure you have cluster-admin role for your account
    # kubectl create clusterrolebinding citrix-cluster-admin --clusterrole=cluster-admin --user=<username of your google account>
    #
    
    #For illustration a basic apache web server is used as a application
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: apache
      labels:
          name: apache
    spec:
      selector:
        matchLabels:
          app: apache
      replicas: 4
      template:
        metadata:
          labels:
            app: apache
        spec:
          containers:
          - name: apache
            image: httpd:latest
            ports:
            - name: http
              containerPort: 80
            imagePullPolicy: IfNotPresent
    <!--NeedCopy-->
    

    Los contenedores de esta implementación escuchan en el puerto 80.

  2. Cree la implementación con el siguiente comando:

    kubectl create -f apache-deployment.yaml
    
  3. Verifica que se ejecuten cuatro pods con lo siguiente:

    kubectl get pods
    
  4. Una vez que verifiques que los pods están en funcionamiento, crea un servicio de tipo NodePort. A continuación se muestra un manifiesto del servicio:

    #Expose the apache web server as a Service
    apiVersion: v1
    kind: Service
    metadata:
      name: apache
      labels:
        name: apache
    spec:
      type: NodePort
      ports:
      - name: http
        port: 80
        targetPort: http
      selector:
        app: apache
    <!--NeedCopy-->
    
  5. Copie el manifiesto en un archivo llamado apache-service.yaml y cree el servicio con el siguiente comando:

    kubectl create -f apache-service.yaml
    

    El ejemplo implementa y expone el servidor web Apache como un servicio. Puede acceder al servicio a través de la dirección <NodeIP>:<NodePort>.

  6. Después de implementar el servicio, cree un recurso Ingress para configurar el Citrix ADC de entrada para enviar el tráfico de norte a sur al puerto de nodos de la aplicación apache. A continuación se muestra un manifiesto de la definición de Ingress denominada vpx-ingress.yaml.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        ingress.citrix.com/frontend-ip: xx.xxx.xxx.xx
      name: vpx-ingress
    spec:
      defaultBackend:
        service:
          name: apache
          port:
            number: 80
    <!--NeedCopy-->
    
  7. Implemente el objeto Ingress.

    kubectl create -f vpx-ingress.yaml
    
Exponer servicio de tipo NodePort mediante Ingress

En este artículo