Contrôleur d'entrée Citrix ADC

Déployer le Citrix ingress controller à l’aide de YAML

Vous pouvez déployer le Citrix ingress controller dans les modes suivants sur vos déploiements bare metal et cloud  :

  • En tant qu’espace autonome dans le cluster Kubernetes. Utilisez ce mode si vous contrôlez Citrix ADC (Citrix ADC MPX ou Citrix ADC VPX) en dehors du cluster. Par exemple, avec des topologies à deux niveaux ou une topologie à un niveau où le niveau unique est un Citrix ADC MPX ou VPX.

  • En tant que sidecar (dans le même espace) avec Citrix ADC CPX dans le cluster Kubernetes. Le contrôleur sidecar est uniquement responsable du Citrix ADC CPX associé au sein du même espace. Ce mode est utilisé dans les topologies à deux niveaux ou dans le cloud .

Déployer le Citrix ingress controller en tant qu’espace autonome dans le cluster Kubernetes pour les appliances Citrix ADC MPX ou VPX

Utilisez le fichier citrix-k8s-ingress-controller.yaml pour exécuter le Citrix ingress controller en tant qu’espace autonome dans votre cluster Kubernetes.

Remarque :

Le Citrix ADC MPX ou VPX peut être déployé en mode autonome, haute disponibilitéou en cluster .

Conditions préalables

  • Déterminez l’adresse IP NS_IP dont le contrôleur a besoin pour communiquer avec l’appliance. L’adresse IP peut être l’une des suivantes en fonction du type de déploiement Citrix ADC :
    • (Appliances autonomes) NSIP : adresse IP de gestion d’une appliance Citrix ADC autonome. Pour plus d’informations, consultez Adressage IP dans Citrix ADC
    • (Appliances en mode Haute disponibilité) SNIP : adresse IP du sous-réseau. Pour plus d’informations, consultez Adressage IP dans Citrix ADC
    • (Appliances en mode cluster) CLIP : adresse IP de gestion de cluster (CLIP) pour un déploiement Citrix ADC en cluster. Pour plus d’informations, consultez Adressage IP pour un cluster
  • Le nom d’utilisateur et le mot de passe de l’appliance Citrix ADC VPX ou MPX utilisée comme périphérique d’entrée. L’appliance Citrix ADC doit disposer d’un compte d’utilisateur système (non défini par défaut) avec certains privilèges afin que le Citrix ingress controller puisse configurer l’appliance Citrix ADC VPX ou MPX. Pour obtenir des instructions sur la création du compte d’utilisateur système sur Citrix ADC, voir Créer un compte d’utilisateur système pour le Citrix ingress controller dans Citrix ADC

    Vous pouvez directement transmettre le nom d’utilisateur et le mot de passe en tant que variables d’environnement au contrôleur, ou utiliser des secrets Kubernetes (recommandé). Si vous souhaitez utiliser des secrets Kubernetes, créez un secret pour le nom d’utilisateur et le mot de passe à l’aide de la commande suivante :

     kubectl create secret  generic nslogin --from-literal=username='cic' --from-literal=password='mypassword'
    

Créer un compte d’utilisateur système pour le Citrix ingress controller dans Citrix ADC

Le Citrix ingress controller configure l’appliance Citrix ADC (MPX ou VPX) à l’aide d’un compte d’utilisateur système de Citrix ADC. Le compte d’utilisateur système doit disposer de certains privilèges afin que le Citrix ingress controller soit autorisé à configurer les éléments suivants sur Citrix ADC :

  • Ajouter, supprimer ou afficher un serveur virtuel de commutation de contenu (CS)
  • Configurer les stratégies et les actions du CS
  • Configurer le serveur virtuel d’équilibrage de charge (LB)
  • Configurer les groupes de services
  • Configurer les clés de certificat SSL
  • Configurer des itinéraires
  • Configurer les moniteurs utilisateur
  • Ajouter un fichier système (pour télécharger des clés de certification SSL depuis Kubernetes)
  • Configurer l’adresse IP virtuelle (VIP)
  • Vérifiez l’état de l’appliance Citrix ADC

Pour créer le compte d’utilisateur système, effectuez les opérations suivantes :

  1. Ouvrez une session sur l’appliance Citrix ADC. Procédez comme suit :
    1. Utilisez un client SSH, tel que PuTTY, pour ouvrir une connexion SSH à l’appliance Citrix ADC.

    2. Connectez-vous à l’appliance à l’aide des informations d’identification de l’administrateur.

  2. Créez le compte d’utilisateur système à l’aide de la commande suivante :

    add system user <username> <password>
    

    Par exemple :

    add system user cic mypassword
    
  3. Créez une stratégie pour fournir les autorisations requises au compte d’utilisateur du système. Utilisez la commande suivante :

    add cmdpolicy cic-policy ALLOW '^(\?!shell)(\?!sftp)(\?!scp)(\?!batch)(\?!source)(\?!.*superuser)(\?!.*nsroot)(\?!install)(\?!show\s+system\s+(user|cmdPolicy|file))(\?!(set|add|rm|create|export|kill)\s+system)(\?!(unbind|bind)\s+system\s+(user|group))(\?!diff\s+ns\s+config)(\?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)^(\?!shell)(\?!sftp)(\?!scp)(\?!batch)(\?!source)(\?!.*superuser)(\?!.*nsroot)(\?!install)(\?!show\s+system\s+(user|cmdPolicy|file))(\?!(set|add|rm|create|export|kill)\s+system)(\?!(unbind|bind)\s+system\s+(user|group))(\?!diff\s+ns\s+config)(\?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)'
    

    Remarque :

    Le compte d’utilisateur système aurait des privilèges basés sur la stratégie de commande que vous définissez.

    La stratégie de commande mentionnée à l’étape 3 est similaire à la stratégie de commande sysAdmin intégrée avec des autorisations supplémentaires pour télécharger des fichiers.

    Dans la spécification de stratégie de commande fournie, les caractères spéciaux qui doivent être échappés sont déjà omis pour faciliter le copier-coller dans la ligne de commande Citrix ADC.

    Pour configurer la stratégie de commande à partir de l’assistant de configuration Citrix ADC (GUI), utilisez la spécification de stratégie de commande suivante.

    ^(?!shell)(?!sftp)(?!scp)(?!batch)(?!source)(?!.*superuser)(?!.*nsroot)(?!install)(?!show\s+system\s+(user|cmdPolicy|file))(?!(set|add|rm|create|export|kill)\s+system)(?!(unbind|bind)\s+system\s+(user|group))(?!diff\s+ns\s+config)(?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)^(?!shell)(?!sftp)(?!scp)(?!batch)(?!source)(?!.*superuser)(?!.*nsroot)(?!install)(?!show\s+system\s+(user|cmdPolicy|file))(?!(set|add|rm|create|export|kill)\s+system)(?!(unbind|bind)\s+system\s+(user|group))(?!diff\s+ns\s+config)(?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)
    
  4. Liez la stratégie au compte d’utilisateur système à l’aide de la commande suivante :

    bind system user cic cic-policy 0
    

Déployer le Citrix ingress controller en tant qu’espace

Procédez comme suit :

  1. Téléchargez le fichier citrix-k8s-ingress-controller.yaml à l’aide de la commande suivante :

    wget  https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/baremetal/citrix-k8s-ingress-controller.yaml
    
  2. Modifiez le fichier citrix-k8s-ingress-controller.yaml et entrez les valeurs des variables environnementales suivantes :

    Variable d’environnement Obligatoire ou facultatif Description
    NS_IP Obligatoire L’adresse IP de l’appliance Citrix ADC. Pour plus de détails, consultez la section Prérequis.
    NS_USER et NS_PASSWORD Obligatoire Le nom d’utilisateur et le mot de passe de l’appliance Citrix ADC VPX ou MPX utilisée comme périphérique d’entrée. Pour plus de détails, consultez la section Prérequis.
    CONTRAT DE LICENCE Obligatoire Le contrat de licence de l’utilisateur final. Spécifiez la valeur comme Yes.
    Kubernetes_URL Facultatif L’URL du serveur kube-api que le Citrix ingress controller utilise pour enregistrer les événements. Si la valeur n’est pas spécifiée, le Citrix ingress controller utilise l’ adresse IP interne kube-apiserver.
    NIVEAU DE JOURNAL Facultatif Les niveaux de journal pour contrôler les journaux générés par le Citrix ingress controller. Par défaut, la valeur est définie sur DEBUG. Les valeurs prises en charge sont : CRITICAL, ERROR, WARNING, INFO et DEBUG. Pour plus d’informations, voir Niveaux de journalisation
    NS_PROTOCOL et NS_PORT Facultatif Définit le protocole et le port utilisés par le Citrix ingress controller pour communiquer avec Citrix ADC. Par défaut, le Citrix ingress controller utilise HTTP sur le port 80. Vous pouvez également utiliser HTTPS sur le port 443.
    classes d’entrée Facultatif Si plusieurs équilibreurs de charge d’entrée sont utilisés pour équilibrer la charge de différentes ressources d’entrée. Vous pouvez utiliser cette variable d’environnement pour spécifier le Citrix ingress controller afin de configurer Citrix ADC associé à une classe d’entrée spécifique. Pour plus d’informations sur les classes Ingress, voir Prise en charge des classes Ingress
    NS_VIP Facultatif Le Citrix ingress controller utilise l’adresse IP fournie dans cette variable d’environnement pour configurer une adresse IP virtuelle pour Citrix ADC qui reçoit le trafic entrant. Remarque : NS_VIP agit en tant que solution de secours lorsque l’annotation frontend-ip n’est pas fournie dans Ingress yaml. Non pris en charge pour le service Type LoadBalancer.
    NS_APPS_NAME_PREFIX Facultatif Par défaut, le Citrix ingress controller ajoute « k8s » comme préfixe aux entités Citrix ADC, telles que le serveur virtuel de commutation de contenu (CS), le serveur virtuel d’équilibrage de charge (LB), etc. Vous pouvez désormais personnaliser le préfixe à l’aide de la variable d’environnement NS_APPS_NAME_PREFIX dans le fichier YAML de déploiement du Citrix ingress controller. Vous pouvez utiliser des caractères alphanumériques pour le préfixe et la longueur du préfixe ne doit pas dépasser 8 caractères.
    ESPACE DE NOMS Facultatif Lors de l’exécution d’un Citrix ingress controller avec RBAC basé sur les rôles, vous devez fournir l’espace de noms que vous souhaitez écouter ou obtenir des événements. Cet espace de noms doit être le même que celui utilisé pour créer le compte de service. À l’aide du compte de service, le Citrix ingress controller peut écouter sur un espace de noms. Vous pouvez utiliser la variable d’environnement NAMESPACE pour spécifier l’espace de noms. Pour plus d’informations, consultez Déployer le Citrix ingress controller pour un espace de noms.
    POD_IPS_FOR_SERVICEGROUP_MEMBERS Facultatif Par défaut, lors de la configuration des services de type LoadBalancer et NodePort sur un Citrix ADC externe de niveau 1, le Citrix ingress controller ajoute NodeIP et NodePort en tant que membres du groupe de services. Si cette variable est définie sur True, l’adresse IP et le port de l’espace sont ajoutés au lieu de NodeIP et NodePort en tant que membres du groupe de services.
    IGNORE_NODE_EXTERNAL_IP Facultatif Lors de l’ajout de NodeIP pour les services de type LoadBalancer ou NodePort sur un Citrix ADC externe de niveau 1, le Citrix ingress controller donne la priorité à une adresse IP externe par rapport à une adresse IP interne. Lorsque vous souhaitez préférer une adresse IP interne à une adresse IP externe pour NodeIP, vous pouvez définir cette variable sur True.
    NS_DNS_NAMESERVER Facultatif Permet d’ajouter des serveurs de noms DNS sur Citrix ADC VPX.
    NS_CONFIG_DNS_REC Facultatif Permet d’ajouter des enregistrements DNS sur les ressources Citrix ADC pour Ingress. Cette variable est configurée au moment du démarrage et ne peut pas être modifiée lors de l’exécution. Les valeurs possibles sont vraies ou fausses. La valeur par défaut est false et vous devez la définir true pour activer la configuration du serveur DNS. Lorsque vous définissez la valeur sur « true », la commande correspondante add dns addrec <abc.com 1.1.1.1> est exécutée sur Citrix ADC et un enregistrement d’adresse (mappage du nom de domaine à l’adresse IP) est créé. Pour plus d’informations, consultez Créer des enregistrements d’adresse pour un nom de domaine.
    NS_SVC_LB_DNS_REC Facultatif Permet d’ajouter des enregistrements DNS sur Citrix ADC pour les services de type LoadBalancer. Cette variable est configurée au moment du démarrage et ne peut pas être modifiée lors de l’exécution. Les valeurs possibles sont vraies ou fausses. La valeur par défaut est false et vous devez la définir true pour activer la configuration du serveur DNS.
  3. Une fois que vous avez mis à jour les variables d’environnement, enregistrez le fichier YAML et déployez-le à l’aide de la commande suivante :

    kubectl create -f citrix-k8s-ingress-controller.yaml
    
  4. Vérifiez si le Citrix ingress controller est déployé correctement à l’aide de la commande suivante :

    kubectl get pods --all-namespaces
    

Déployez le Citrix ingress controller en tant que sidecar avec Citrix ADC CPX

Utilisez le fichier citrix-k8s-cpx-ingress.yaml pour déployer un Citrix ADC CPX avec un Citrix ingress controller en tant que sidecar. Le fichier YAML déploie une instance Citrix ADC CPX qui est utilisée pour l’équilibrage de charge du trafic nord-sud vers les microservices de votre cluster Kubernetes.

Procédez comme suit :

  1. Téléchargez le fichier citrix-k8s-cpx-ingress.yaml à l’aide de la commande suivante :

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/baremetal/citrix-k8s-cpx-ingress.yml
    
  2. Déployez le fichier citrix-k8s-cpx-ingress.yaml à l’aide de la commande suivante :

    kubectl create -f citrix-k8s-cpx-ingress.yaml
    
  3. Vérifiez si le Citrix ingress controller est déployé correctement à l’aide de la commande suivante :

    kubectl get pods --all-namespaces
    

Déployez Citrix ADC CPX avec le Citrix ingress controller en tant que sidecar sans les informations d’identification par défaut

Auparavant, lorsque vous déployez Citrix ADC CPX avec le Citrix ingress controller en tant que sidecar sans spécifier les informations d’identification de connexion, le Citrix ingress controller considère nsroot/nsroot comme les informations d’identification par défaut.

Avec les dernières versions de Citrix ADC CPX (Citrix ADC CPX 13.0.64.35 et versions ultérieures), les informations d’identification par défaut sont supprimées. Ainsi, lorsque vous déployez le Citrix ingress controller en tant que sidecar avec les dernières versions de Citrix ADC CPX, le Citrix ingress controller peut obtenir les informations d’identification de Citrix ADC CPX via le fichier /var/deviceinfo/random_id dans Citrix ADC CPX. Ce fichier peut être partagé entre Citrix ADC CPX et le Citrix ingress controller via le montage du volume.

Selon que vous utilisez la dernière version de Citrix ADC CPX ou une version antérieure, vous devez choisir l’un des fichiers YAML de déploiement suivants. Pour les anciennes versions de Citrix ADC CPX, vous devez spécifier les informations d’identification dans le fichier YAML.

  • Pour Citrix ADC CPX 13.0.64.35 et versions ultérieures, utilisez le YAML suivant :

citrix-k8s-cpx-ingress.yml

Comme indiqué dans le YAML, voici un extrait de la configuration de montage de volume requise dans le fichier YAML à la fois pour le Citrix ingress controller et Citrix ADC CPX :

    volumeMounts:
    - mountPath: /var/deviceinfo
    name: shared-data

Voici un extrait de la configuration de volume partagé commune pour Citrix ADC CPX et le Citrix ingress controller.

    volumes:
    - name: shared-data
    emptyDir: {}
  • Pour les versions antérieures de Citrix ADC CPX (versions antérieures à 13.0.64.35), utilisez le YAML suivant :

    cpx-entrée-précédent.yaml

    Voici un extrait de la section des informations d’identification du Citrix ingress controller :

     - name: "NS_USER"
     valueFrom:
     secretKeyRef:
             name: nslogin
             key: username
     - name: "NS_PASSWORD"
     valueFrom:
     secretKeyRef:
             name: nslogin
             key: password
    

Déployer le Citrix ingress controller pour un espace de noms

Dans Kubernetes, un rôle se compose de règles qui définissent un ensemble d’autorisations pouvant être exécutées sur un ensemble de ressources. Dans un environnement Kubernetes activé par RBAC, vous pouvez créer deux types de rôles en fonction de l’étendue dont vous avez besoin :

  • Role
  • ClusterRole

Un rôle peut être défini dans un espace de noms avec un Role, ou à l’échelle du cluster avec un ClusterRole. Vous pouvez créer un Role pour accorder l’accès aux ressources d’un seul espace de noms.

Dans Kubernetes, vous pouvez créer plusieurs clusters virtuels sur le même cluster physique. Les espaces de noms fournissent un moyen de diviser les ressources du cluster entre plusieurs utilisateurs et sont utiles dans les environnements où de nombreux utilisateurs sont répartis dans plusieurs équipes ou projets.

Par défaut, le Citrix ingress controller surveille les ressources d’entrée sur tous les espaces de noms du cluster Kubernetes. Si plusieurs équipes souhaitent gérer le même Citrix ADC, elles peuvent déployer un Citrix ingress controller Role basé pour surveiller uniquement les ressources d’entrée appartenant à un espace de noms spécifique. Cet espace de noms doit être identique à l’espace de noms que vous avez fourni pour créer le compte de service. Vous devez créer un rôle et lier le rôle au compte de service pour le Citrix ingress controller. Dans ce cas, le Citrix ingress controller écoute uniquement les événements provenant de l’espace de noms spécifié, puis configure Citrix ADC en conséquence.

L’exemple suivant montre un exemple de fichier YAML qui définit un rôle et une liaison de rôle pour le déploiement d’un Citrix ingress controller pour un espace de noms spécifique.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cic-k8s-role
rules:
  - apiGroups: [""]
    resources: ["endpoints", "ingresses", "pods", "secrets", "nodes", "routes", "namespaces"]
    verbs: ["get", "list", "watch"]
  # services/status is needed to update the loadbalancer IP in service status for integrating
  # service of type LoadBalancer with external-dns
  - apiGroups: [""]
    resources: ["services/status"]
    verbs: ["patch"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list", "watch", "patch"]
  - apiGroups: ["extensions"]
    resources: ["ingresses", "ingresses/status"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "list", "watch"]

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cic-k8s-role
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cic-k8s-role

subjects:
- kind: ServiceAccount
  name: cic-k8s-role
  namespace: default

---
<!--NeedCopy-->

Restrictions

Lorsque le Citrix ingress controller s’exécute avec un rôle (portée avec dans un espace de noms), les fonctionnalités suivantes ne sont pas prises en charge car elles nécessitent une portée globale.

  • configuration d’itinéraires statiques
  • surveillance sur tous les espaces de noms
  • CRD
Déployer le Citrix ingress controller à l’aide de YAML