Cómo usar secretos de Kubernetes para almacenar credenciales de NetScaler

Last published : Oct 02, 2026
En la mayoría de las organizaciones, los dispositivos NetScaler Ingress de Nivel 1 y los clústeres de Kubernetes son administrados por equipos separados. El NetScaler Ingress Controller requiere credenciales de NetScaler, como el nombre de usuario y la contraseña de NetScaler, para configurar NetScaler. Normalmente, las credenciales de NetScaler se especifican como variables de entorno en la especificación del pod del NetScaler Ingress Controller. Sin embargo, otra opción segura es usar secretos de Kubernetes para almacenar las credenciales de NetScaler.
Este tema describe cómo usar secretos de Kubernetes para almacenar las credenciales de ADC y varias formas de proporcionar las credenciales almacenadas como datos secretos para el NetScaler Ingress Controller.

Crear 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 de secreto de Kubernetes con el nombre de usuario y la contraseña de NetScaler 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. Aplique el archivo adc-credential-secret.yaml para crear un secreto.
    kubectl apply -f adc-credential-secret.yaml
    Alternativamente, también puede crear el secreto de Kubernetes usando 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 utilizar los datos secretos en la especificación del pod del NetScaler Ingress Controller.

Usar datos secretos como variables de entorno en la especificación del pod del NetScaler 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 NetScaler 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
Aquí tiene un ejemplo de la implementación del NetScaler Ingress Controller con el valor de las variables de entorno obtenidas del 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

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

Alternativamente, también puede usar un montaje de volumen utilizando el objeto secreto como fuente para las credenciales de NetScaler. El NetScaler 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 luego montar el volumen usando 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

Usar credenciales de NetScaler almacenadas en un servidor Hashicorp Vault

También puede usar las credenciales de NetScaler almacenadas en un servidor Hashicorp Vault para el NetScaler Ingress Controller y enviar las credenciales a través de un contenedor sidecar.
Para obtener más información, consulte Uso de credenciales de NetScaler almacenadas en un servidor Vault.