Ingress Controller de Citrix ADC

Cómo usar los secretos de Kubernetes para almacenar las credenciales de Citrix ADC

En la mayoría de las organizaciones, los dispositivos Citrix ADC Ingress de nivel 1 y los clústeres de Kubernetes son administrados por equipos separados. El Citrix Ingress Controller de Citrix requiere credenciales de Citrix ADC, como el nombre de usuario y la contraseña de Citrix ADC, para configurar Citrix ADC. Por lo general, las credenciales de Citrix ADC se especifican como variables de entorno en la especificación del pod del controlador de entrada de Citrix. Sin embargo, otra opción segura es usar secretos de Kubernetes para almacenar las credenciales de Citrix ADC.

En este tema se describe cómo usar los secretos de Kubernetes para almacenar las credenciales de ADC y varias formas de proporcionar las credenciales almacenadas como datos secretos para el Citrix Ingress Controller.

Crea un secreto de Kubernetes

Realice los siguientes pasos para crear un secreto de Kubernetes.

  1. Cree un archivo adc-credential-secret.yaml que defina un YAML secreto de Kubernetes con el nombre de usuario y la contraseña de Citrix ADC en la sección data de la siguiente manera.

    apiVersion: v1
    kind: Secret
    metadata:
      name: adc-credential
    data:
      username: <ADC user name>
      password: <ADC password>
    
  2. Aplica el archivo adc-credential-secret.yaml para crear un secreto.

    kubectl apply -f adc-credential-secret.yaml
    

    Como alternativa, también puede crear el secreto de Kubernetes con la opción --from-literal del comando kubectl como se muestra a continuación:

    kubectl create secret generic adc-credentials --from-literal=username=<username> --from-literal=password=<password>
    

Una vez que haya creado un secreto de Kubernetes, puede usar una de las siguientes opciones para usar los datos secretos en la especificación del pod del Citrix Ingress Controller.

Usar datos secretos como variables de entorno en la especificación del pod del Citrix Ingress Controller

Puede usar datos secretos del secreto de Kubernetes como valores para las variables de entorno en la especificación de implementación del Citrix Ingress Controller.

A continuación se muestra un fragmento del archivo YAML.

  - name: "NS_USER"
    valueFrom:
      secretKeyRef:
        name: adc-credentials
        key: username
  # Set user password for Nitro
  - name: "NS_PASSWORD"
    valueFrom:
      secretKeyRef:
        name: adc-credentials
        key: password

A continuación, se muestra un ejemplo de la implementación del Citrix Ingress Controller con el valor de las variables de entorno originadas en el objeto secreto.


apiVersion: apps/v1
kind: Deployment
metadata:
  name: cic-k8s-ingress-controller
spec:
  selector:
    matchLabels:
      app: cic-k8s-ingress-controller
  replicas: 1
  template:
    metadata:
      name: cic-k8s-ingress-controller
      labels:
        app: cic-k8s-ingress-controller
      annotations:
    spec:
      serviceAccountName: cic-k8s-role
      containers:
      - name: cic-k8s-ingress-controller
        image: <image location>
        env:
         # Set NetScaler NSIP/SNIP, SNIP in case of HA (mgmt has to be enabled)
         - name: "NS_IP"
           value: "x.x.x.x"
         # Set username for Nitro
         - name: "NS_USER"
           valueFrom:
            secretKeyRef:
             name: adc-credentials
             key: username
         # Set user password for Nitro
         - name: "NS_PASSWORD"
           valueFrom:
            secretKeyRef:
             name: adc-credentials
             key: password
         # Set log level
         - name: "EULA"
           value: "yes"
        imagePullPolicy: Always
<!--NeedCopy-->

Usar un montaje de volumen secreto para pasar credenciales al Citrix Ingress Controller

Como alternativa, también puede usar un montaje de volumen con el objeto secreto como origen para las credenciales de Citrix ADC. El Citrix Ingress Controller espera que el secreto se monte en la ruta /etc/citrix y busca las credenciales en los archivos username y password.

Puede crear un volumen a partir del objeto secreto y, a continuación, montar el volumen mediante VolumeMounts en, /etc/citrix como se muestra en el siguiente ejemplo de implementación.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cic-k8s-ingress-controller
spec:
  selector:
    matchLabels:
      app: cic-k8s-ingress-controller
  replicas: 1
  template:
    metadata:
      name: cic-k8s-ingress-controller
      labels:
        app: cic-k8s-ingress-controller
      annotations:
    spec:
      serviceAccountName: cic-k8s-role
      containers:
      - name: cic-k8s-ingress-controller
        image: <image location>
        env:
         # Set NetScaler NSIP/SNIP, SNIP in case of HA (mgmt has to be enabled)
         - name: "NS_IP"
           value: "x.x.x.x"
         # Set log level
         - name: "EULA"
           value: "yes"
        volumeMounts:
        # name must match the volume name below
          - name: secret-volume
            mountPath: /etc/citrix
        imagePullPolicy: Always
      # The secret data is exposed to Containers in the Pod through a Volume.
      volumes:
      - name: secret-volume
        secret:
          secretName: adc-credentials
<!--NeedCopy-->

Usar las credenciales de Citrix ADC almacenadas en un servidor de Hashicorp Vault

También puede usar las credenciales de Citrix ADC almacenadas en un servidor de Hashicorp Vault para el Citrix Ingress Controller e insertar las credenciales a través de un contenedor sidecar.

Para obtener más información, consulte Usar credenciales de Citrix ADC almacenadas en un servidor de Vault.

Cómo usar los secretos de Kubernetes para almacenar las credenciales de Citrix ADC