Gestion des adresses IP à l'aide du contrôleur IPAM

Dernière publication : Oct 02, 2026
Le contrôleur IPAM est une application fournie par NetScaler pour la gestion des adresses IP et il s'exécute en parallèle du NetScaler Ingress Controller dans le cluster Kubernetes. Vous pouvez attribuer des adresses IP aux ressources d'entrée (ingress), aux services de type LoadBalancer et aux ressources d'écoute (listener) à partir d'une plage d'adresses IP spécifiée à l'aide du contrôleur IPAM. Le NetScaler Ingress Controller configure une adresse IP allouée à un service, une entrée ou une ressource d'écoute comme adresse IP virtuelle (VIP) dans NetScaler MPX ou NetScaler VPX.
Le contrôleur IPAM nécessite la définition de ressource personnalisée VIP (CRD) fournie par NetScaler. La CRD VIP est utilisée pour la communication interne entre le NetScaler Ingress Controller et le contrôleur IPAM.

Intégration d'Infoblox avec le contrôleur IPAM

Avec l'intégration Infoblox, le contrôleur IPAM attribue des adresses IP aux services de type LoadBalancer, aux ressources d'entrée (ingress) ou d'écoute (listener) depuis Infoblox.
Les annotations suivantes sont prises en charge respectivement dans une ressource d'entrée (ingress), une ressource d'écoute (listener) et un service de type LoadBalancer :
  • ingress.citrix.com/ipam-range
  • listeners.citrix.com/ipam-range
  • service.citrix.com/ipam-range
Vous devez fournir les plages d'adresses IP définies dans le contrôleur IPAM en utilisant ces annotations pour les ressources respectives. La plage d'adresses IP doit être une plage VIP IPAM ou une plage VIP Infoblox.
Remarque :
  • L'intégration d'Infoblox est prise en charge pour les versions jusqu'à 2.12.3, à partir de la version 2.2.10 du contrôleur IPAM.
  • Vous ne devez pas mettre à jour ou supprimer l'adresse IP allouée par IPAM à l'aide d'Infoblox.
Le contrôleur IPAM présente les défis suivants dans une configuration multi-cluster :
  • Une adresse IP doit être fournie manuellement.
  • Une adresse IP commune doit être attribuée à chaque application déployée sur plusieurs clusters.
  • Limitations dans le partage de la plage d'adresses IP entre les contrôleurs IPAM dans d'autres clusters, ce qui ajoute de la complexité à la tâche.
L'intégration d'Infoblox avec IPAM facilite les tâches suivantes :
  • Attribuer une adresse IP disponible à partir de la plage d'adresses IP spécifiée à l'aide de la gestion de réseau Infoblox.
  • Demander l'adresse IP associée à un nom de domaine, garantissant la récupération d'une adresse IP préexistante.
  • Dans une configuration d'entrée multi-cluster, l'application déployée sur différents clusters peut être accédée à l'aide d'une adresse IP unique et cohérente.
Lors de l'initialisation, le contrôleur IPAM se connecte à Infoblox et crée une vue réseau si elle n'est pas déjà disponible. Cette création de vue réseau est basée sur la plage réseau de la vue DNS que vous fournissez. Si la plage réseau de la vue DNS n'est pas fournie, le contrôleur IPAM crée une vue réseau.

Attribuer une adresse IP à l'aide du contrôleur IPAM

Pour configurer une ressource d'entrée, une ressource d'écoute ou un service de type LoadBalancer avec une adresse IP du contrôleur IPAM, effectuez les étapes suivantes :
  1. Déployer le CRD VIP
  2. Déployer le contrôleur d'entrée NetScaler
  3. Déployer le contrôleur IPAM
  4. Déployer l'application et la ressource d'entrée

Étape 1 : Déployer le CRD VIP

Effectuez l'étape suivante pour déployer le CRD VIP NetScaler qui permet la communication entre le contrôleur d'entrée NetScaler et le contrôleur IPAM.
kubectl create -f https://raw.githubusercontent.com/netscaler/netscaler-k8s-ingress-controller/master/crd/vip/vip.yaml
Pour plus d'informations sur le CRD VIP, consultez la définition de ressource personnalisée VIP.

Étape 2 : Déployer le contrôleur d'entrée NetScaler

Prérequis

  • Cluster Kubernetes et un outil de ligne de commande kubectl pour communiquer avec le cluster.
  • Créez un secret à l'aide des informations d'identification NetScaler VPX ou NetScaler MPX en utilisant la commande suivante :
    kubectl create secret  generic nslogin --from-literal=username=<username> --from-literal=password=<password>
  • Ajoutez le référentiel de chart Helm NetScaler en utilisant la commande suivante :
    helm repo add netscaler https://netscaler.github.io/netscaler-helm-charts/
Déployer NSIC
  1. Mettez à jour le référentiel de chart Helm NetScaler en utilisant la commande suivante :
    helm repo update netscaler
  2. Mettez à jour values.yaml pour configurer le contrôleur d'entrée NetScaler comme décrit ci-après.
    Exemple values.yaml :
    license:
      accept: yes
    adcCredentialSecret: nslogin # K8s Secret Name
    nsIP: <x.x.x> # CLIP (for appliances in Cluster mode), SNIP (for appliances in High Availability mode) , NSIP (for standalone appliances)
    openshift: false # set to true for OpenShift deployments
    entityPrefix: cluster1 # unique for each NSIC instance.
    ipam: true
    ingressClass: ['cic-vpx'] # ingress class used in the ingress resources
    serviceClass: ['netscaler'] # To use service type LB, specify the service class
  3. Installez le contrôleur d'entrée NetScaler pour votre NetScaler VPX ou NetScaler à l'aide de la commande Helm suivante :
    helm install nsic netscaler/netscaler-ingress-controller -f values.yaml
Pour des informations détaillées sur le déploiement et la configuration du contrôleur d'entrée NetScaler à l'aide de charts Helm, consultez le référentiel de charts Helm.

Étape 3 : Déployer le contrôleur IPAM

Prérequis
  • Pour l'intégration Infoblox, assurez-vous de créer un rôle utilisateur dans Infoblox avec les autorisations suivantes :
    • Gestion des adresses IP :
      • Allouer et gérer les adresses IP.
      • Créer, mettre à jour et supprimer les enregistrements d'hôte.
    • Gestion des attributs extensibles :
      • Créer, mettre à jour et supprimer les attributs extensibles.
  • Pour l'intégration d'Infoblox, créez un secret Kubernetes avec les informations d'identification de l'utilisateur Infoblox en exécutant la commande suivante :
    kubectl create secret  generic infobloxlogin --from-literal=username=<Infoblox_username> --from-literal=password=<Infoblox_password>
Dans cette procédure, nous allons déployer un contrôleur IPAM et intégrer Infoblox au contrôleur IPAM.
  1. Ajoutez le référentiel de chart Helm NetScaler à votre registre local en utilisant la commande suivante :
    helm repo add netscaler https://netscaler.github.io/netscaler-helm-charts/
  2. Installez le contrôleur IPAM NetScaler en utilisant la commande suivante :
    helm install netscaler-ipam-controller netscaler/netscaler-ipam-controller -f values.yaml
Exemple values.yaml :
cluster: 'cluster1' # enables you to know in which cluster IPAM is installed in multi-cluster solution
vipRange: "[{\"range1\": [\"1.2.1.51-1.2.1.59\"]\,\"range2\": [\"1.2.1.61-1.2.1.69\"]}]" # range1 has IPs from 1.2.1.51 to 1.2.1.59 and range2 has IPs from 1.2.1.61 to 1.2.1.69
reuseIngressVip: "True"  # set to False to assigns  different IP address to each ingress resource
infoblox:
  enabled: True #set to false to disable Infoblox integration with IPAM controller
  credentialSecret: <secret> # Kubernetes secret created using Infoblox user credentials
  gridHost: <x.x.x.x>  # Infoblox grid host IP or FQDN
  vipRange: "[{"infoblox-range": ["1.1.1.0/24"]}]"  # Infoblox IPAM VIP Range, which is different from the vipRange mentioned above. This has to be in CIDR format like 1.1.1.0/24
Le tableau suivant fournit des informations sur tous les paramètres configurables lors de l'installation du contrôleur IPAM :
Paramètres Obligatoire ou facultatif Valeur par défaut Description
imageRegistry Obligatoire quay.io Le registre d'images du contrôleur IPAM NetScaler.
imageRepository Obligatoire netscaler/netscaler-ipam-controller Le référentiel d'images du contrôleur IPAM NetScaler.
imageTag Obligatoire 2.1.2 L'étiquette d'image du contrôleur IPAM NetScaler.
pullPolicy Obligatoire IfNotPresent La politique de tirage d'image du contrôleur IPAM NetScaler.
vipRange Obligatoire N/A Cette variable vous permet de définir la plage d'adresses IP. Vous pouvez définir une plage d'adresses IP ou une plage d'adresses IP associée à un nom unique. Le contrôleur IPAM NetScaler attribue l'adresse IP de cette plage d'adresses IP au service de type LoadBalancer.
reuseIngressVip Facultatif Vrai Cette variable vous permet d'utiliser la même IP pour toutes les entrées utilisant le même vipRange.
grappe Obligatoire si infoblox.enabled est vrai N/A Cette variable vous permet de fournir le nom du cluster qui est utilisé pour identifier le cluster dans lequel le contrôleur IPAM est déployé.
infoblox.enabled Facultatif faux Valeur booléenne qui vous permet d'activer ou de désactiver Infoblox IPAM.
infoblox.gridHost Obligatoire si infoblox.enabled est vrai N/A Adresse IP ou FQDN de l'hôte de grille Infoblox qui doit être accessible depuis le cluster.
infoblox.credentialSecret Obligatoire si infoblox.enabled est vrai N/A Secret Kubernetes dans le même espace de noms contenant le nom d'utilisateur et le mot de passe Infoblox avec les privilèges d'accès souhaités, tels qu'énumérés dans les prérequis.
infoblox.httpTimeout Facultatif 10 Cette variable vous permet de définir le délai d'expiration HTTP du client Infoblox en secondes.
infoblox.maxRetries Facultatif 3 Cette variable vous permet de spécifier le nombre maximal de tentatives du client Infoblox en cas d'échec.
infoblox.netView Facultatif par défaut Cette variable vous permet de spécifier la vue réseau Infoblox. Si la vue réseau n'est pas présente, elle est créée.
infoblox.vipRange Obligatoire si infoblox.enabled est vrai N/A Plage d'adresses IP virtuelles IPAM Infoblox gérée par le contrôleur. Toutes les adresses IP de cette plage sont gérées dans Infoblox par le contrôleur et ne doivent pas entrer en conflit avec d'autres processus. La plage d'adresses IP doit être au format CIDR a.b.c.d/n. Exemple : "[{"infoblox-range": ["1.1.1.0/24"]}]".
serviceAccount.create Obligatoire Vrai Cette variable crée un compte de service pour le contrôleur IPAM NetScaler.
serviceAccount.tokenExpirationSeconds Obligatoire 31536000 Durée en secondes avant l'expiration du jeton du compte de service.
serviceAccount.name Facultatif "" Nom du compte de service pour le contrôleur IPAM. Si vous souhaitez utiliser un compte de service que vous avez déjà créé et que vous gérez vous-même, spécifiez son nom ici et définissez serviceAccount.create sur false.

Étape 4 : Déployer les ressources Ingress

Effectuez les étapes suivantes pour déployer un exemple d'application et de ressource Ingress.
  1. Déployez l'application CNN à l'aide de la commande suivante :
    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cnn-website
      labels:
        name: cnn-website
        app: cnn-website
    spec:
      selector:
        matchLabels:
          app: cnn-website
      replicas: 2
      template:
        metadata:
          labels:
            name: cnn-website
            app: cnn-website
        spec:
          containers:
          - name: cnn-website
            image: quay.io/sample-apps/cnn-website:v1.0.0
            ports:
            - name: http-80
              containerPort: 80
            - name: https-443
              containerPort: 443
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: cnn-website
      labels:
        app: cnn-website
    spec:
      type: NodePort
      ports:
      - name: http-80
        port: 80
        targetPort: 80
      - name: https-443
        port: 443
        targetPort: 443
      selector:
        name: cnn-website
    EOF
  2. Déployez la ressource Ingress pour envoyer du trafic à l'application CNN à l'aide de la commande suivante :
    kubectl apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cnn-ingress
      annotations:
        ingress.citrix.com/ipam-range: "<IPAM-vip-range or Infoblox-vip-range>"
    spec:
      ingressClassName: cic-vpx
      rules:
      - host: www.cnn.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: cnn-website
                port:
                  number: 80
    EOF
Pour l'exemple d'Ingress précédent, l'ordre d'attribution des adresses IP est le suivant :
  • Si la variable d'environnement par défaut NS_VIP est fournie, NetScaler Ingress Controller envoie une requête au contrôleur IPAM uniquement si le nom de plage (ingress.citrix.com/ipam-range:) est fourni dans l'Ingress. Si l'annotation n'est pas fournie, NS_VIP est utilisé pour cet Ingress.
  • Si la variable d'environnement par défaut NS_VIP n'est pas fournie, NetScaler Ingress Controller envoie toujours une requête au contrôleur IPAM pour l'attribution d'adresses IP.

Allocations d'adresses IP

  • Pour les services de type LoadBalancer, une adresse IP unique est allouée à chaque service à partir de la plage VIP ou de la plage VIP Infoblox.
  • Pour une ressource d'entrée (ingress), une adresse IP de la plage IP spécifiée est allouée. Lorsque plusieurs ressources d'entrée (ingress) font référence à la même plage VIP, l'adresse IP allouée à la première ressource d'entrée (ingress) est allouée à toutes les autres ressources d'entrée (ingress).
  • Les services de type LoadBalancer, les ressources d'entrée (ingress) et les ressources d'écoute (listener) peuvent utiliser le contrôleur IPAM NetScaler pour les allocations d'adresses IP simultanément. Si une adresse IP est allouée à un type de ressource, elle n'est pas disponible pour un autre type de ressource. Cependant, la même adresse IP peut être allouée à plusieurs ressources d'entrée (ingress).

Plage d'adresses IP associée à un nom unique

Vous pouvez attribuer un nom unique à la plage d'adresses IP et définir la plage dans la variable d'environnement VIP_RANGE. Cette méthode d'attribution de la plage d'adresses IP vous permet de différencier les plages d'adresses IP. Lorsque vous créez les services de type LoadBalancer, vous pouvez utiliser l'annotation service.citrix.com/ipam-range dans la définition du service pour spécifier la plage d'adresses IP à utiliser pour l'allocation d'adresses IP.

Allocations multiples d'adresses IP

Pour les ressources d'entrée (ingress), une adresse IP peut être allouée plusieurs fois en spécifiant le paramètre de graphique Helm reuseIngressVip comme true, car plusieurs ressources d'entrée (ingress) peuvent être gérées par un seul serveur virtuel de commutation de contenu. Si la plage IP spécifiée ne contient qu'une seule adresse IP, elle est allouée plusieurs fois. Et, si la plage IP se compose de plusieurs adresses IP, une seule d'entre elles est allouée de manière répétée.
Pour faciliter les allocations multiples, le contrôleur IPAM suit les adresses IP allouées. Le contrôleur IPAM ne place une adresse IP dans le pool libre que lorsque toutes les allocations de cette adresse IP par les ressources d'entrée (ingress) sont libérées.