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

Vous pouvez spécifier l'espace de noms Kubernetes ou l'organisation TAS auxquels 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 : scope: ncp/owner, tag: ns:<namespace_UUID>
  • Pour une organisation TAS : scope: ncp/owner, tag: 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 à des 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 TAS, ou le redémarrage de NCP.
  • Les balises de propriétaire de l'espace de noms et de l'organisation TAS sont facultatives. Sans ces balises, les adresses IP du pool IP SNAT peuvent être allouées à n'importe quel espace de noms ou organisation TAS.

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 scope: ncp/owner, tag: cluster:<cluster_name>.

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_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 scope: ncp/owner, tag: cluster:<cluster_name> ou la balise de propriétaire du pool ne correspond pas à l'espace de noms du service qui envoie la demande d'allocation. Après avoir corrigé l'erreur, vous devez redémarrer NCP ou supprimer l'annotation ncp/snat_pool puis l'ajouter de nouveau.
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 scope: ncp/owner, tag: cluster:<cluster_name> ou la balise de propriétaire du pool ne correspond pas à l'espace de noms qui envoie la demande d'allocation. Après avoir corrigé l'erreur, vous devez redémarrer NCP ou supprimer l'annotation ncp/snat_pool puis l'ajouter de nouveau.
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 scope: ncp/owner, tag: cluster:<cluster_name>.
  • Le pool d'adresses IP spécifié par ncp/snat_pool peut également disposer d'une balise d'espace de noms scope: ncp/owner, tag: 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'une adresse IP SNAT pour un service

Vous pouvez configurer une adresse 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/static_snat_ip: "1.2.3.4"
    ...
Si l'annotation ncp/snat_pool est également spécifiée, l'adresse IP SNAT doit se trouver dans le pool d'adresses SNAT spécifié. Sinon, elle doit se trouver dans le pool d'adresses IP externe spécifié dans ncp.ini. S'il n'y a pas d'erreur, NCP créera ou mettra à jour la règle SNAT en utilisant l'adresse IP SNAT annotée pour ce service. L'état de configuration de la règle SNAT sera annoté avec ncp/snat_ip_status dans le service. Voici les valeurs possibles :
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED - L'adresse IP a déjà été allouée.
  • IP_NOT_IN_POOL - L'adresse IP ne se trouve pas dans le pool d'adresses IP SNAT.
  • IP_POOL_EXHAUSTED - Le pool d'adresses IP SNAT est saturé.
  • SNAT_PROCESS_FAILED - Une erreur inconnue s'est produite.

Configuration d'une adresse IP SNAT pour un espace de noms

Vous pouvez configurer une adresse IP SNAT pour un espace de noms en ajoutant une annotation à l'espace de noms. Par exemple,
    apiVersion: v1
    kind: Namespace
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
Si l'annotation ncp/snat_pool est également spécifiée, l'adresse IP SNAT doit se trouver dans le pool d'adresses SNAT spécifié. Sinon, elle doit se trouver dans le pool d'adresses IP externe spécifié dans ncp.ini. S'il n'y a pas d'erreur, NCP créera ou mettra à jour la règle SNAT en utilisant l'adresse IP SNAT annotée pour cet espace de noms. L'état de configuration de la règle SNAT sera annoté avec ncp/snat_ip_status dans l'espace de noms. Voici les valeurs possibles :
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED - L'adresse IP a déjà été allouée.
  • IP_NOT_IN_POOL - L'adresse IP ne se trouve pas dans le pool d'adresses IP SNAT.
  • IP_NOT_REALIZED - Une erreur s'est produite dans NSX-T.
  • IP_POOL_EXHAUSTED - Le pool d'adresses IP SNAT est saturé.
  • SNAT_PROCESS_FAILED - Une erreur inconnue s'est produite.

Configuration d'un pool SNAT pour une application TAS

Par défaut, NCP configure une adresse IP SNAT pour une organisation TAS (Tanzu 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 transférant de nouveau l'application.

Configuration de SNAT pour TAS version 3

Avec TAS 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

Configuration d'un pool d'adresses IP SNAT ou d'une adresse IP pour une organisation TAS

Vous pouvez configurer un pool d'adresses IP SNAT ou une adresse IP pour une organisation TAS à l'aide des annotations suivantes :
  • ncp_snat_pool - Le pool doit exister et disposer de la balise scope: ncp/owner, tag: cluster:<cluster_name>.
  • ncp_snat_ip - Une adresse spécifique dans un pool d'adresses IP.
Notez les points suivants :
  • Si ncp_snat_pool et ncp_snat_ip sont spécifiés, l'adresse IP SNAT doit se trouver dans le pool d'adresses IP SNAT spécifié.
  • Si seul ncp_snat_ip est spécifié, l'adresse IP SNAT doit se trouver dans le pool d'adresses IP externe spécifié dans ncp.ini.
  • Si seul ncp_snat_pool est spécifié, l'adresse IP SNAT sera allouée à partir du pool spécifié.
Vous pouvez configurer une adresse IP SNAT pour une organisation à l'aide de la commande cf curl. Par exemple :
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_pool": "ann-ip-pool", "ncp_snat_ip": "1.2.3.4"}}}'
Vous pouvez obtenir org-guid à l'aide de la commande suivante :
cf org <org-name> --guid
Vous pouvez supprimer l'annotation ncp_snat_ip à l'aide de la commande suivante :
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_ip": null}}}'

Vous pouvez accéder à l'interface utilisateur de NSX Manager pour vérifier si la règle SNAT a été créée. Pour vérifier les erreurs, examinez les journaux NCP.

Si vous voyez l'erreur POOL_ACCESS_DENIED dans le journal NCP, cela signifie que le pool d'adresses IP spécifié par ncp_snat_pool n'a pas la balise scope: ncp/owner, tag: cluster:<cluster_name> ou que la balise de propriétaire du pool ne correspond pas à l'organisation qui envoie la demande d'allocation. Après avoir corrigé l'erreur, vous devez redémarrer NCP ou supprimer l'annotation ncp_snat_pool puis l'ajouter de nouveau.