Limitazione di un pool di IP SNAT a organizzazioni TAS o spazi dei nomi Kubernetes specifici

È possibile specificare a quale spazio dei nomi Kubernetes oppure organizzazione TAS è possibile allocare IP del pool di IP SNAT aggiungendo i seguenti tag al pool di IP.
  • Per uno spazio dei nomi Kubernetes: scope: ncp/owner, tag: ns:<namespace_UUID>
  • Per un'organizzazione TAS: scope: ncp/owner, tag: org:<org_UUID>
È possibile ottenere lo spazio dei nomi o l'UUID dell'organizzazione con uno dei seguenti comandi:
kubectl get ns -o yaml
cf org <org_name> --guid
Si tenga presente quanto segue:
  • Ogni tag deve specificare un UUID. È possibile creare più tag per lo stesso pool.
  • Se si modificano i tag dopo che ad alcuni spazi dei nomi oppure organizzazioni sono stati allocati IP in base ai tag precedenti, tali IP non verranno recuperati finché le configurazioni SNAT dei servizi Kubernetes o delle app TAS non verranno modificate o NCP non verrà riavviato.
  • I tag dei proprietari degli spazi dei nomi e delle organizzazioni TAS sono facoltativi. Senza questi tag, a qualsiasi spazio dei nomi oppure organizzazione TAS possono essere allocati IP dal pool di IP SNAT.

Configurazione di un pool di IP SNAT per un servizio

È possibile configurare un pool di IP SNAT per un servizio aggiungendo un'annotazione al servizio. Ad esempio
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
      selector:
        app: example
    ...

Il pool di IP specificato da ncp/snat_pool deve avere il tag scope: ncp/owner, tag: cluster:<cluster_name>.

NCP configurerà la regola SNAT per questo servizio. L'IP di origine della regola è il set di pod back-end. L'IP di destinazione è l'IP SNAT allocato dal pool di IP esterni specificato. Se si verifica un errore quando NCP configura la regola SNAT, al servizio verrà aggiunta l'annotazione ncp/error.snat: <error>. Gli errori possibili sono:
  • IP_POOL_NOT_FOUND: il pool di IP SNAT non è stato trovato in NSX Manager.
  • IP_POOL_EXHAUSTED: il pool di IP SNAT è esaurito.
  • IP_POOL_NOT_UNIQUE: il pool specificato da ncp/snat_pool fa riferimento a più pool in NSX Manager.
  • SNAT_RULE_OVERLAPPED: viene creata una nuova regola SNAT, ma il pod del servizio SNAT appartiene anche a un altro servizio SNAT, ovvero sono presenti più regole SNAT per lo stesso pod.
  • POOL_ACCESS_DENIED: il pool di IP specificato da ncp/snat_pool non dispone del tag scope: ncp/owner, tag: cluster:<cluster_name> oppure il tag del proprietario del pool non corrisponde allo spazio dei nomi del servizio che invia la richiesta di allocazione. Dopo aver corretto l'errore, è necessario riavviare NCP oppure rimuovere l'annotazione ncp/snat_pool e aggiungerla di nuovo.
Si tenga presente quanto segue:
  • Il pool specificato da ncp/snat_pool dovrebbe già esistere in NSX prima che il servizio venga configurato.
  • In NSX la priorità della regola SNAT per il servizio è più alta di quella per il progetto.
  • Se un pod è configurato con più regole SNAT, ne funzionerà solo una.
  • È possibile passare a un pool di IP diverso modificando l'annotazione e riavviando NCP.

Configurazione di un pool di IP SNAT per uno spazio dei nomi

È possibile configurare un pool di IP SNAT per uno spazio dei nomi aggiungendo un'annotazione allo spazio dei nomi. Ad esempio
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns-sample
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
    ...
NCP configurerà la regola SNAT per questo spazio dei nomi. L'IP di origine della regola è il set di pod back-end. L'IP di destinazione è l'IP SNAT allocato dal pool di IP esterni specificato. Se si verifica un errore quando NCP configura la regola SNAT, allo spazio dei nomi verrà aggiunta l'annotazione ncp/error.snat: <error>. Gli errori possibili sono:
  • IP_POOL_NOT_FOUND: il pool di IP SNAT non è stato trovato in NSX Manager.
  • IP_POOL_EXHAUSTED: il pool di IP SNAT è esaurito.
  • IP_POOL_NOT_UNIQUE: il pool specificato da ncp/snat_pool fa riferimento a più pool in NSX Manager.
  • POOL_ACCESS_DENIED: il pool di IP specificato da ncp/snat_pool non dispone del tag scope: ncp/owner, tag: cluster:<cluster_name> oppure il tag del proprietario del pool non corrisponde allo spazio dei nomi che invia la richiesta di allocazione. Dopo aver corretto l'errore, è necessario riavviare NCP oppure rimuovere l'annotazione ncp/snat_pool e aggiungerla di nuovo.
Si tenga presente quanto segue:
  • È possibile specificare un solo pool di IP SNAT nell'annotazione.
  • Non è necessario configurare il pool di IP SNAT in ncp.ini.
  • Il pool di IP specificato da ncp/snat_pool deve avere il tag scope: ncp/owner, tag: cluster:<cluster_name>.
  • Anche il pool di IP specificato da ncp/snat_pool può avere un tag dello spazio dei nomi scope: ncp/owner, tag: ns:<namespace_UUID>.
  • Se l'annotazione ncp/snat_pool non è presente, lo spazio dei nomi utilizzerà il pool di IP SNAT per il cluster.
  • È possibile passare a un pool di IP diverso modificando l'annotazione e riavviando NCP.

Configurazione di un indirizzo IP SNAT per un servizio

È possibile configurare un indirizzo IP SNAT per un servizio aggiungendo un'annotazione al servizio. Ad esempio
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
Se viene specificata anche l'annotazione ncp/snat_pool, l'indirizzo IP SNAT deve essere presente nel pool di indirizzi SNAT specificato. In caso contrario, deve essere presente nel pool di IP esterno specificato in ncp.ini. Se non si verificano errori, NCP creerà o aggiornerà la regola SNAT utilizzando l'indirizzo IP SNAT con annotazione per questo servizio. Allo stato della configurazione della regola SNAT verrà aggiunta l'annotazione ncp/snat_ip_status nel servizio. I valori possibili sono:
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED: l'indirizzo IP è già stato allocato.
  • IP_NOT_IN_POOL: l'indirizzo IP non si trova nel pool di IP SNAT.
  • IP_POOL_EXHAUSTED: il pool di IP SNAT è esaurito.
  • SNAT_PROCESS_FAILED: si è verificato un errore sconosciuto.

Configurazione di un indirizzo IP SNAT per uno spazio dei nomi

È possibile configurare un indirizzo IP SNAT per uno spazio dei nomi aggiungendo un'annotazione allo spazio dei nomi. Ad esempio
    apiVersion: v1
    kind: Namespace
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
Se viene specificata anche l'annotazione ncp/snat_pool, l'indirizzo IP SNAT deve essere presente nel pool di indirizzi SNAT specificato. In caso contrario, deve essere presente nel pool di IP esterno specificato in ncp.ini. Se non si verificano errori, NCP crea o aggiorna la regola SNAT utilizzando l'indirizzo IP SNAT con annotazione per questo spazio dei nomi. Allo stato della configurazione della regola SNAT verrà aggiunta l'annotazione ncp/snat_ip_status nello spazio dei nomi. I valori possibili sono:
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED: l'indirizzo IP è già stato allocato.
  • IP_NOT_IN_POOL: l'indirizzo IP non si trova nel pool di IP SNAT.
  • IP_NOT_REALIZED: si è verificato un errore in NSX.
  • IP_POOL_EXHAUSTED: il pool di IP SNAT è esaurito.
  • SNAT_PROCESS_FAILED: si è verificato un errore sconosciuto.

Configurazione di un pool SNAT per un'app TAS

Per impostazione predefinita, NCP configura l'IP SNAT per un'organizzazione TAS (Tanzu Application Service). È possibile configurare un IP SNAT per un'app creando un'app con un file manifest.xml che contiene le informazioni del pool di IP SNAT. Ad esempio
    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 configurerà la regola SNAT per questa app. L'IP di origine della regola è il set di IP delle istanze e l'IP di destinazione è l'IP SNAT allocato da un pool di IP esterni. Si tenga presente quanto segue:
  • Il pool specificato da NCP_SNAT_POOL deve già esistere in NSX prima del push dell'app.
  • La priorità della regola SNAT per un'app è più alta di quella per un'organizzazione.
  • Un'app può essere configurata con un solo IP SNAT.
  • È possibile passare a un pool di IP diverso modificando la configurazione ed eseguendo nuovamente il push dell'app.

Configurazione di SNAT per TAS versione 3

Con TAS versione 3, è possibile configurare SNAT in uno dei due modi seguenti:

  • Configurare NCP_SNAT_POOL in manifest.yml durante la creazione dell'app.
    Ad esempio, l'app è denominata bread e manifest.yml ha le informazioni seguenti:
    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
    Eseguire i comandi seguenti:
    cf v3-push bread
    cf v3-apply-manifest -f manifest.yml
    cf v3-apps
    cf v3-restart bread
  • Configurare NCP_SNAT_POOL utilizzando il comando cf v3-set-env.
    Eseguire i comandi seguenti (supponendo che l'app sia denominata 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

Configurazione di un pool di IP SNAT o di un indirizzo IP per un'organizzazione TAS

È possibile configurare un pool di IP SNAT o un indirizzo IP per un'organizzazione TAS utilizzando le annotazioni seguenti:
  • ncp_snat_pool: il pool deve esistere e disporre del tag scope: ncp/owner, tag: cluster:<cluster_name>.
  • ncp_snat_ip: un indirizzo specifico in un pool di IP.
Si tenga presente quanto segue:
  • Se sono specificati ncp_snat_pool e ncp_snat_ip, l'indirizzo IP SNAT deve essere presente nel pool DI IP SNAT specificato.
  • Se è specificato solo ncp_snat_ip, l'indirizzo IP SNAT deve trovarsi nel pool di IP esterno specificato in ncp.ini.
  • Se è specificato solo ncp_snat_pool, l'indirizzo IP SNAT verrà allocato dal pool specificato.
È possibile configurare l'IP SNAT per un'organizzazione con il comando cf curl. Ad esempio:
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_pool": "ann-ip-pool", "ncp_snat_ip": "1.2.3.4"}}}'
È possibile ottenere org-guid con il comando seguente:
cf org <org-name> --guid
È possibile rimuovere l'annotazione ncp_snat_ip con il comando seguente:
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_ip": null}}}'

È possibile passare all'interfaccia utente di NSX Manager per verificare se la regola SNAT è stata creata correttamente. Per verificare la presenza di errori, esaminare i registri di NCP.

Se nel registro di NCP è presente l'errore POOL_ACCESS_DENIED, significa che il pool di IP specificato da ncp_snat_pool non dispone del tag scope: ncp/owner, tag: cluster:<cluster_name> oppure il tag del proprietario del pool non corrisponde all'organizzazione che invia la richiesta di allocazione. Dopo aver corretto l'errore, è necessario riavviare NCP oppure rimuovere l'annotazione ncp_snat_pool e aggiungerla di nuovo.