Restriction d'un pool d'adresses IP SNAT à des espaces de noms Kubernetes ou à des organisations PCF spécifiques

Vous pouvez spécifier l'espace de noms Kubernetes ou l'organisation PCF auquel les adresses IP sont allouées à partir du pool d'adresses IP SNAT en ajoutant les balises suivantes au pool d'adresses IP.
  • Pour un espace de noms Kubernetes : étendue : ncp/owner, balise : ns:<namespace_UUID>
  • Pour une organisation PCF : étendue : ncp/owner, balise : org:<org_UUID>
Vous pouvez obtenir l'UUID de l'espace de noms ou de l'organisation à l'aide de l'une des commandes suivantes :
kubectl get ns -o yaml
cf org <org_name> --guid
Notez les points suivants :
  • Chaque balise doit spécifier un UUID. Vous pouvez créer plusieurs balises pour le même pool.
  • Si vous modifiez les balises après l'allocation d'adresses IP à des espaces de noms ou organisations selon les anciennes balises, ces adresses IP sont récupérées uniquement après la modification des configurations SNAT des services Kubernetes ou des applications PCF, ou le redémarrage de NCP.
  • Les balises de propriétaire de l'espace de noms et de l'organisation PCF sont facultatives. Sans ces balises, les adresses IP du pool IP SNAT peuvent être allouées à n'importe quel espace de noms ou organisation PCF.

Configuration d'un pool d'adresses IP SNAT pour un service

Vous pouvez configurer un pool d'adresses IP SNAT pour un service spécifique en ajoutant une annotation au service. Par exemple,
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
      selector:
        app: example
    ...

Le pool d'adresses IP spécifié par ncp/snat_pool doit avoir la balise {"ncp/owner": cluster:<cluster>}.

NCP configurera la règle SNAT pour ce service. L'adresse IP source de la règle correspond à l'ensemble des espaces de serveur principal. L'adresse IP de destination est l'adresse IP SNAT allouée à partir du pool d'adresses IP externe spécifié. Si une erreur se produit lorsque NCP configure la règle SNAT, le service sera annoté avec ncp/error.snat : <error>. Les erreurs possibles sont :
  • IP_POOL_NOT_FOUND - le pool d'adresses IP SNAT est introuvable dans NSX Manager.
  • IP_POOL_EXHAUSTED - le pool d'adresses IP SNAT est saturé.
  • IP_POOL_NOT_UNIQUE - le pool spécifié par ncp/snat_pool fait référence à plusieurs pools dans NSX Manager.
  • SNAT_POOL_ACCESS_DENY - la balise de propriétaire du pool ne correspond pas à l'espace de nom du service qui envoie la demande d'allocation.
  • SNAT_RULE_OVERLAPPED - une nouvelle règle SNAT est créée, mais l'espace de service SNAT appartient également à un autre service SNAT, autrement dit, il existe plusieurs règles SNAT pour le même espace.
  • POOL_ACCESS_DENIED : le pool d'adresses IP spécifié par ncp/snat_pool ne dispose pas de la balise {"ncp/owner": cluster:<cluster>} ou la balise de propriétaire du pool ne correspond pas à l'espace de noms du service qui envoie la demande d'allocation.
Notez les points suivants :
  • Le pool spécifié par ncp/snat_pool doit déjà exister dans NSX-T Data Center avant que le service ne soit configuré.
  • Dans NSX-T Data Center, la priorité de la règle SNAT pour le service est supérieure à celle du projet.
  • Si un espace est configuré avec plusieurs règles SNAT, une seule fonctionnera.
  • Vous pouvez spécifier un pool d'adresses IP différent en modifiant l'annotation et en redémarrant NCP.

Configuration d'un pool d'adresses IP SNAT pour un espace de noms

Vous pouvez configurer un pool d'adresses IP SNAT pour un espace de noms en ajoutant une annotation à l'espace de noms. Par exemple,
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns-sample
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
    ...
NCP configurera la règle SNAT pour cet espace de noms. L'adresse IP source de la règle correspond à l'ensemble des espaces de serveur principal. L'adresse IP de destination est l'adresse IP SNAT allouée à partir du pool d'adresses IP externe spécifié. Si une erreur se produit lorsque NCP configure la règle SNAT, l'espace de noms sera annoté avec ncp/error.snat : <error>. Les erreurs possibles sont :
  • IP_POOL_NOT_FOUND - le pool d'adresses IP SNAT est introuvable dans NSX Manager.
  • IP_POOL_EXHAUSTED - le pool d'adresses IP SNAT est saturé.
  • IP_POOL_NOT_UNIQUE - le pool spécifié par ncp/snat_pool fait référence à plusieurs pools dans NSX Manager.
  • POOL_ACCESS_DENIED : le pool d'adresses IP spécifié par ncp/snat_pool ne dispose pas de la balise {"ncp/owner": cluster:<cluster>} ou la balise de propriétaire du pool ne correspond pas à l'espace de noms qui envoie la demande d'allocation.
Notez les points suivants :
  • Vous pouvez spécifier un seul pool d'adresses IP SNAT dans l'annotation.
  • Le pool d'adresses IP SNAT n'a pas besoin d'être configuré dans ncp.ini.
  • Le pool d'adresses IP spécifié par ncp/snat_pool doit avoir la balise {"ncp/owner": cluster:<cluster>}.
  • Le pool d'adresses IP spécifié par ncp/snat_pool peut également disposer d'une balise d'espace de noms {"ncp/owner": ns:<namespace_UUID>}.
  • Si l'annotation ncp/snat_pool est manquante, l'espace de noms utilisera le pool d'adresses IP SNAT pour le cluster.
  • Vous pouvez spécifier un pool d'adresses IP différent en modifiant l'annotation et en redémarrant NCP.

Configuration d'un pool d'adresses IP SNAT pour une application PAS

Par défaut, NCP configure une adresse IP SNAT pour une organisation PAS (Pivotal Application Service). Vous pouvez configurer une adresse IP SNAT pour une application spécifique en créant une application avec un fichier manifest.xml qui contient les informations du pool d'adresses IP SNAT. Par exemple,
    applications:
      - name: frontend
        memory: 32M
        disk_quota: 32M
        buildpack: go_buildpack
        env:
          GOPACKAGENAME: example-apps/cats-and-dogs/frontend
          NCP_SNAT_POOL: <external IP pool ID or name>
    ...
NCP configurera la règle SNAT pour cette application. L'adresse IP source de la règle est l'ensemble des adresses IP des instances et son adresse IP de destination est l'adresse IP SNAT allouée à partir d'un pool d'adresses IP externe. Notez les points suivants :
  • Le pool spécifié par NCP_SNAT_POOL doit déjà exister dans NSX-T Data Center avant que l'application ne soit transmise.
  • La priorité d'une règle SNAT pour une application est supérieure à celle d'une règle SNAT pour une organisation.
  • Une application peut être configurée avec une seule adresse IP SNAT.
  • Vous pouvez spécifier un pool d'adresses IP différent en modifiant la configuration et en redémarrant NCP.

Configuration SNAT pour PCF version 3

Avec PCF version 3, vous pouvez configurer SNAT de l'une des deux manières suivantes :

  • Lors de la création de l'application, configurez NCP_SNAT_POOL dans manifest.yml.
    Par exemple, l'application est appelée bread et manifest.yml contient les informations suivantes :
    applications:
    - name: bread
      stack: cflinuxfs2
      random-route: true
      env:
        NCP_SNAT_POOL: AppSnatExternalIppool
      processes:
      - type: web
        disk_quota: 1024M
        instances: 2
        memory: 512M
        health-check-type: port
      - type: worker
        disk_quota: 1024M
        health-check-type: process
        instances: 2
        memory: 256M
        timeout: 15
    Exécutez les commandes suivantes :
    cf v3-push bread
    cf v3-apply-manifest -f manifest.yml
    cf v3-apps
    cf v3-restart bread
  • Configurez NCP_SNAT_POOL à l'aide de la commande cf v3-set-env.
    Exécutez les commandes suivantes (en supposant que l'application est appelée app3) :
    cf v3-set-env app3 NCP_SNAT_POOL AppSnatExternalIppool
    (optional) cf v3-stage app3 -package-guid <package-guid> (You can get package-guid with "cf v3-packages app3".)
    cf v3-restart app3