Einschränken eines SNAT-IP-Pools auf bestimmte Kubernetes-Namespaces oder TAS-Organisationen

Sie können durch Hinzufügen der folgenden Tags zum IP-Pool festlegen, welchem Kubernetes-Namespace oder welcher TAS Org IPs aus dem SNAT-IP-Pool zugeteilt werden können.
  • Für einen Kubernetes-Namespace: scope: ncp/owner, tag: ns:<namespace_UUID>
  • Für eine TAS Org: scope: ncp/owner, tag: org:<org_UUID>
Sie können die Namespace- oder Org-UUID mit einem der folgenden Befehle abrufen:
kubectl get ns -o yaml
cf org <org_name> --guid
Beachten Sie Folgendes:
  • Jedes Tag sollte eine UUID enthalten. Sie können mehrere Tags für denselben Pool erstellen.
  • Wenn Sie die Tags ändern, nachdem einigen Namespaces oder Orgs IPs basierend auf den alten Tags zugewiesen wurden, werden diese IPs nicht wiederhergestellt, bis sich die SNAT-Konfigurationen der Kubernetes-Dienste oder TAS-Anwendungen ändern oder NCP neu gestartet wird.
  • Die Owner-Tags für Namespace und TAS Org sind optional. Ohne diese Tags können jedem Namespace bzw. jeder TAS Org IPs aus dem SNAT-IP-Pool zugeteilt werden.

Konfigurieren eines SNAT-IP-Pools für einen Dienst

Sie können einen SNAT-IP-Pool für einen Dienst konfigurieren, indem Sie dem Dienst eine Anmerkung hinzufügen. Beispiel:
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
      selector:
        app: example
    ...

Der von ncp/snat_pool angegebene-IP-Pool muss über das Tag scope: ncp/owner, tag: cluster:<cluster_name> verfügen.

NCP konfiguriert die SNAT-Regel für diesen Dienst. Bei der Quell-IP der Regel handelt es sich um die Gruppe der Backend-Pods. Bei der Ziel-IP handelt es sich um die SNAT-IP, die aus dem angegebenen externen IP-Pool zugeteilt wurde. Falls bei der Konfiguration der SNAT-Regel durch NCP ein Fehler auftritt, wird der Dienst mit der Anmerkung ncp/error.snat: <error> versehen. Dies sind die möglichen Fehler:
  • IP_POOL_NOT_FOUND: Der SNAT-IP-Pool wurde in NSX Manager nicht gefunden.
  • IP_POOL_EXHAUSTED: Der SNAT-IP-Pool ist ausgeschöpft.
  • IP_POOL_NOT_UNIQUE: Der durch ncp/snat_pool angegebene Pool verweist auf mehrere Pools in NSX Manager.
  • SNAT_RULE_OVERLAPPED: Eine neue SNAT-Regel wird erstellt, aber der Pod des SNAT-Diensts gehört auch zu einem anderen SNAT-Dienst, d. h., für denselben Pod sind mehrere SNAT-Regeln vorhanden.
  • POOL_ACCESS_DENIED – Der von ncp/snat_pool angegebene IP-Pool weist nicht das Tag scope: ncp/owner, tag: cluster:<cluster_name> auf, oder das Owner-Tag des Pools stimmt nicht mit dem Namespace des Diensts überein, der die Zuteilungsanforderung sendet. Nachdem Sie den Fehler behoben haben, müssen Sie NCP neu starten oder die ncp/snat_pool-Anmerkung entfernen und erneut hinzufügen.
Beachten Sie Folgendes:
  • Der von ncp/snat_pool angegebene Pool sollte bereits in NSX vorhanden sein, bevor der Dienst konfiguriert wird.
  • In NSX ist die Priorität der SNAT-Regel für den Dienst höher als die für das Projekt.
  • Wenn ein Pod mit mehreren SNAT-Regeln konfiguriert wird, funktioniert nur eine der Regeln.
  • Sie können zu einem anderen IP-Pool wechseln, indem Sie die Anmerkung ändern und NCP neu starten.

Konfigurieren eines SNAT-IP-Pools für einen Namespace

Sie können einen SNAT-IP-Pool für einen Namespace konfigurieren, indem Sie dem Namespace eine Anmerkung hinzufügen. Beispiel:
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns-sample
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
    ...
NCP konfiguriert die SNAT-Regel für diesen Namespace. Bei der Quell-IP der Regel handelt es sich um die Gruppe der Backend-Pods. Bei der Ziel-IP handelt es sich um die SNAT-IP, die aus dem angegebenen externen IP-Pool zugeteilt wurde. Falls bei der Konfiguration der SNAT-Regel durch NCP ein Fehler auftritt, wird der Namespace mit der Anmerkung ncp/error.snat: <error> versehen. Dies sind die möglichen Fehler:
  • IP_POOL_NOT_FOUND: Der SNAT-IP-Pool wurde in NSX Manager nicht gefunden.
  • IP_POOL_EXHAUSTED: Der SNAT-IP-Pool ist ausgeschöpft.
  • IP_POOL_NOT_UNIQUE: Der durch ncp/snat_pool angegebene Pool verweist auf mehrere Pools in NSX Manager.
  • POOL_ACCESS_DENIED – Der von ncp/snat_pool angegebene IP-Pool weist nicht das Tag scope: ncp/owner, tag: cluster:<cluster_name> auf, oder das Owner-Tag des Pools stimmt nicht mit dem Namespace überein, der die Zuteilungsanforderung sendet. Nachdem Sie den Fehler behoben haben, müssen Sie NCP neu starten oder die ncp/snat_pool-Anmerkung entfernen und erneut hinzufügen.
Beachten Sie Folgendes:
  • Sie können nur einen SNAT-IP-Pool in der Anmerkung angeben.
  • Der SNAT-IP-Pool muss nicht in ncp.ini konfiguriert sein.
  • Der von ncp/snat_pool angegebene-IP-Pool muss über das Tag scope: ncp/owner, tag: cluster:<cluster_name> verfügen.
  • Der mit ncp/snat_pool angegebene IP-Pool kann auch ein Namespace-Tag, scope: ncp/owner, tag: ns:<namespace_UUID>, aufweisen.
  • Wenn die Anmerkung ncp/snat_pool fehlt, verwendet der Namespace den SNAT-IP-Pool für den Cluster.
  • Sie können zu einem anderen IP-Pool wechseln, indem Sie die Anmerkung ändern und NCP neu starten.

Konfigurieren einer SNAT-IP-Adresse für einen Dienst

Sie können eine SNAT-IP-Adresse für einen Dienst konfigurieren, indem Sie dem Dienst eine Anmerkung hinzufügen. Beispiel:
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
Wenn die Anmerkung ncp/snat_pool ebenfalls angegeben wird, muss sich die SNAT-IP-Adresse im angegebenen SNAT-Adresspool befinden. Andernfalls muss sie sich im externen IP-Pool befinden, der in der ncp.ini angegeben ist. Wenn es keine Fehler gibt, erstellt oder aktualisiert NCP die SNAT-Regel mithilfe der notierten SNAT-IP-Adresse für diesen Dienst. Der Status der Konfiguration der SNAT-Regel wird mit ncp/snat_ip_status im Dienst kommentiert. Mögliche Werte sind:
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED: IP-Adresse wurde bereits zugeteilt.
  • IP_NOT_IN_POOL: IP-Adresse befindet sich nicht im SNAT-IP-Pool.
  • IP_POOL_EXHAUSTED: Der SNAT-IP-Pool ist ausgeschöpft.
  • SNAT_PROCESS_FAILED: Unbekannter Fehler ist aufgetreten.

Konfigurieren einer SNAT-IP-Adresse für einen Namespace

Sie können eine SNAT-IP-Adresse für einen Namespace konfigurieren, indem Sie dem Namespace eine Anmerkung hinzufügen. Beispiel:
    apiVersion: v1
    kind: Namespace
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
Wenn die Anmerkung ncp/snat_pool ebenfalls angegeben wird, muss sich die SNAT-IP-Adresse im angegebenen SNAT-Adresspool befinden. Andernfalls muss sie sich im externen IP-Pool befinden, der in der ncp.ini angegeben ist. Wenn es keine Fehler gibt, erstellt oder aktualisiert NCP die SNAT-Regel mithilfe der notierten SNAT-IP-Adresse für diesen Namespace. Der Status der Konfiguration der SNAT-Regel wird mit ncp/snat_ip_status im Namespace kommentiert. Mögliche Werte sind:
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED: IP-Adresse wurde bereits zugeteilt.
  • IP_NOT_IN_POOL: IP-Adresse befindet sich nicht im SNAT-IP-Pool.
  • IP_NOT_REALIZED: In NSX ist ein Fehler aufgetreten.
  • IP_POOL_EXHAUSTED: Der SNAT-IP-Pool ist ausgeschöpft.
  • SNAT_PROCESS_FAILED: Unbekannter Fehler ist aufgetreten.

Konfigurieren eines SNAT-Pools für eine TAS-App

Standardmäßig konfiguriert NCP die SNAT-IP für eine TAS Org (Tanzu Application Service). Sie können eine SNAT-IP für eine App konfigurieren, indem Sie eine App mit einer manifest.xml erstellen, die die SNAT-IP-Pool-Informationen enthält. Beispiel:
    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 konfiguriert die SNAT-Regel für diese Anwendung. Die Quell-IP der Regel ist der Satz von IP-Adressen der Instanzen, und ihre Ziel-IP ist die SNAT-IP, die aus einem externen IP-Pool zugewiesen wurde. Beachten Sie Folgendes:
  • Der von NCP_SNAT_POOL angegebene Pool sollte bereits in NSX vorhanden sein, bevor die Anwendung mithilfe von Push übertragen wird.
  • Die SNAT-Regel für eine Anwendung hat eine höhere Priorität als diejenige für eine Organisation.
  • Eine Anwendung kann nur mit einer SNAT-IP konfiguriert werden.
  • Sie können zu einem anderen IP-Pool wechseln, indem Sie die Konfiguration ändern und die App erneut pushen.

Konfigurieren von SNAT für TAS Version 3

Mit TAS Version 3 können Sie SNAT auf zwei Arten konfigurieren:

  • Konfigurieren Sie NCP_SNAT_POOL in manifest.yml, wenn Sie die App erstellen.
    Die App trägt beispielsweise den Namen bread und die manifest.yml enthält die folgenden Informationen:
    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
    Führen Sie die folgenden Befehle aus:
    cf v3-push bread
    cf v3-apply-manifest -f manifest.yml
    cf v3-apps
    cf v3-restart bread
  • Konfigurieren Sie NCP_SNAT_POOL mithilfe des Befehls cf v3-set-env.
    Führen Sie die folgenden Befehle aus (unter der Annahme, dass die App den Namen app3 trägt):
    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

Konfigurieren eines SNAT-IP-Pools oder einer IP-Adresse für eine TAS-Organisation

Sie können einen SNAT-IP-Pool oder eine IP-Adresse für eine TAS Org mit den folgenden Anmerkungen konfigurieren:
  • ncp_snat_pool: Der Pool muss vorhanden sein und das Tag scope: ncp/owner, tag: cluster:<cluster_name> aufweisen.
  • ncp_snat_ip: Eine bestimmte Adresse in einem IP-Pool.
Beachten Sie Folgendes:
  • Wenn sowohl ncp_snat_pool als auch ncp_snat_ip angegeben sind, muss sich die SNAT-IP-Adresse im angegebenen SNAT-IP-Pool befinden.
  • Wenn nur ncp_snat_ip angegeben ist, muss sich die SNAT-IP-Adresse im externen IP-Pool befinden, der in ncp.ini angegeben ist.
  • Wenn nur ncp_snat_pool angegeben ist, wird die SNAT-IP-Adresse aus dem angegebenen Pool zugeteilt.
Sie können SNAT-IP für eine Organisation mit dem Befehl cf curl konfigurieren. Beispiel:
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_pool": "ann-ip-pool", "ncp_snat_ip": "1.2.3.4"}}}'
Sie können org-guid mit dem folgenden Befehl abrufen:
cf org <org-name> --guid
Sie können die ncp_snat_ip-Anmerkung mit dem folgenden Befehl entfernen:
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_ip": null}}}'

Sie können zur NSX Manager-UI wechseln, um zu prüfen, ob die SNAT-Regel erfolgreich erstellt wurde. Wenn Sie auf Fehler prüfen möchten, sehen Sie sich die NCP-Protokolle an.

Wenn der Fehler POOL_ACCESS_DENIED im NCP-Protokoll angezeigt wird, bedeutet dies, dass der von ncp_snat_pool angegebene-IP-Pool nicht über das Tag scope: ncp/owner, tag: cluster:<cluster_name> verfügt oder dass das Owner-Tag des Pools nicht mit der Organisation übereinstimmt, die die Zuteilungsanforderung sendet. Nachdem Sie den Fehler behoben haben, müssen Sie NCP neu starten oder die ncp_snat_pool-Anmerkung entfernen und erneut hinzufügen.