Restringir un grupo de direcciones IP de SNAT a espacios de nombres de Kubernetes u organizaciones de TAS específicos

Puede especificar el espacio de nombres de Kubernetes o la organización de TAS a los que es posible asignar direcciones IP del grupo de direcciones IP de SNAT agregando las siguientes etiquetas al grupo de direcciones IP.
  • Para un espacio de nombres de Kubernetes: scope: ncp/owner, tag: ns:<namespace_UUID>
  • Para una organización de TAS: scope: ncp/owner, tag: org:<org_UUID>
Puede obtener el UUID del espacio de nombres o de la organización mediante uno de los siguientes comandos:
kubectl get ns -o yaml
cf org <org_name> --guid
Tenga en cuenta lo siguiente:
  • Cada etiqueta debe especificar un UUID. Puede crear varias etiquetas para el mismo grupo.
  • Si se cambian las etiquetas después de que se asignen direcciones IP a algunos espacios de nombres u organizaciones en función de las etiquetas anteriores, no se recuperarán dichas direcciones IP hasta que se cambien los ajustes de SNAT de los servicios de Kubernetes o las aplicaciones de TAS, o bien se reinicie NCP.
  • Las etiquetas de propietario del espacio de nombres y de la organización de TAS son opcionales. Sin estas etiquetas, se pueden asignar direcciones IP del grupo de direcciones IP de SNAT a cualquier espacio de nombres u organización de TAS.

Configurar un grupo de direcciones IP de SNAT para un servicio

Puede configurar un grupo de direcciones IP de SNAT para un servicio agregando una anotación al servicio. Por ejemplo,
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
      selector:
        app: example
    ...

El grupo de direcciones IP especificado por ncp/snat_pool debe tener la etiqueta scope: ncp/owner, tag: cluster:<cluster_name>.

NCP configurará la regla SNAT para este servicio. La IP de origen de la regla es el conjunto de pods de back-end. La IP de destino es la IP SNAT asignada desde el grupo de IP externo especificado. Si se produce un error cuando NCP configura la regla SNAT, se agregará la nota ncp/error.snat: <error> al servicio. Los posibles errores son:
  • IP_POOL_NOT_FOUND: el grupo de IP de SNAT no se encuentra en NSX Manager.
  • IP_POOL_EXHAUSTED: el grupo de IP de SNAT se agotó.
  • IP_POOL_NOT_UNIQUE: el grupo que ncp/snat_pool especifica hace referencia a varios grupos en NSX Manager.
  • SNAT_RULE_OVERLAPPED: se crea una nueva regla SNAT, pero el pod del servicio SNAT también pertenece a otro servicio SNAT (es decir, hay varias reglas SNAT para el mismo pod).
  • POOL_ACCESS_DENIED: el grupo de direcciones IP que especifica ncp/snat_pool no tiene la etiqueta scope: ncp/owner, tag: cluster:<cluster_name>, o la etiqueta de propietario del grupo no coincide con el espacio de nombres del servicio que envía la solicitud de asignación. Después de solucionar el error, debe reiniciar NCP, o bien eliminar la anotación ncp/snat_pool y volver a agregarla.
Tenga en cuenta lo siguiente:
  • El grupo especificado por ncp/snat_pool ya debe existir en NSX antes de configurar el servicio.
  • En NSX, la prioridad de la regla SNAT para el servicio es mayor que la del proyecto.
  • Si se configura un pod con varias reglas SNAT, solo funcionará una.
  • Puede utilizar otro grupo de direcciones IP cambiando la anotación y reiniciando NCP.

Configurar un grupo de direcciones IP de SNAT para un espacio de nombres

Puede configurar un grupo de direcciones IP de SNAT para un espacio de nombres agregando una anotación al espacio de nombres. Por ejemplo,
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns-sample
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
    ...
NCP configurará la regla SNAT para este espacio de nombres. La IP de origen de la regla es el conjunto de pods de back-end. La IP de destino es la IP SNAT asignada desde el grupo de IP externo especificado. Si se produce un error cuando NCP configura la regla SNAT, se agregará la nota ncp/error.snat: <error> al espacio de nombres. Los posibles errores son:
  • IP_POOL_NOT_FOUND: el grupo de IP de SNAT no se encuentra en NSX Manager.
  • IP_POOL_EXHAUSTED: el grupo de IP de SNAT se agotó.
  • IP_POOL_NOT_UNIQUE: el grupo que ncp/snat_pool especifica hace referencia a varios grupos en NSX Manager.
  • POOL_ACCESS_DENIED: el grupo de direcciones IP que ncp/snat_pool especifica no tiene la etiqueta scope: ncp/owner, tag: cluster:<cluster_name> o la etiqueta de propietario del grupo no coincide con el espacio de nombres que envía la solicitud de asignación. Después de solucionar el error, debe reiniciar NCP, o bien eliminar la anotación ncp/snat_pool y volver a agregarla.
Tenga en cuenta lo siguiente:
  • Solo puede especificar un grupo de direcciones IP de SNAT en la anotación.
  • No es necesario que el grupo de direcciones IP de SNAT esté configurado en ncp.ini.
  • El grupo de direcciones IP especificado por ncp/snat_pool debe tener la etiqueta scope: ncp/owner, tag: cluster:<cluster_name>.
  • El grupo de direcciones IP que ncp/snat_pool especifica también puede tener una etiqueta de espacio de nombres scope: ncp/owner, tag: ns:<namespace_UUID>.
  • Si falta la anotación ncp/snat_pool, el espacio de nombres utilizará el grupo de direcciones IP de SNAT para el clúster.
  • Puede utilizar otro grupo de direcciones IP cambiando la anotación y reiniciando NCP.

Configurar una dirección IP de SNAT para un servicio

Puede configurar una dirección IP de SNAT para un servicio agregando una anotación al servicio. Por ejemplo,
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
Si también se especifica la anotación ncp/snat_pool, la dirección IP de SNAT debe estar en el grupo de direcciones SNAT especificado. De lo contrario, deberá estar en el grupo de direcciones IP externas especificado en ncp.ini. Si no hay errores, NCP creará o actualizará la regla SNAT mediante la dirección IP de SNAT anotada para este servicio. El estado de la configuración de la regla SNAT se anotará con ncp/snat_ip_status en el servicio. Los valores posibles son:
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED: la dirección IP ya está asignada.
  • IP_NOT_IN_POOL: la dirección IP no se encuentra en el grupo de direcciones IP de SNAT.
  • IP_POOL_EXHAUSTED: el grupo de IP de SNAT se agotó.
  • SNAT_PROCESS_FAILED: se produjo un error desconocido.

Configurar una dirección IP de SNAT para un espacio de nombres

Puede configurar una dirección IP de SNAT para un espacio de nombres agregando una anotación al espacio de nombres. Por ejemplo,
    apiVersion: v1
    kind: Namespace
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
Si también se especifica la anotación ncp/snat_pool, la dirección IP de SNAT debe estar en el grupo de direcciones SNAT especificado. De lo contrario, deberá estar en el grupo de direcciones IP externas especificado en ncp.ini. Si no hay errores, NCP creará o actualizará la regla SNAT mediante la dirección IP de SNAT anotada para este espacio de nombres. El estado de la configuración de la regla SNAT se anotará con ncp/snat_ip_status en el espacio de nombres. Los valores posibles son:
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED: la dirección IP ya está asignada.
  • IP_NOT_IN_POOL: la dirección IP no se encuentra en el grupo de direcciones IP de SNAT.
  • IP_NOT_REALIZED: se produjo un error en NSX.
  • IP_POOL_EXHAUSTED: el grupo de IP de SNAT se agotó.
  • SNAT_PROCESS_FAILED: se produjo un error desconocido.

Configurar un grupo SNAT para una aplicación de TAS

NCP configura la IP de SNAT de una organización de TAS (Tanzu Application Service) de forma predeterminada. Puede configurar una IP de SNAT para una aplicación mediante la creación de una aplicación con un archivo manifest.xml que contiene la información del grupo de direcciones IP de SNAT. Por ejemplo,
    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 configurará la regla SNAT de esta aplicación. La IP de origen de la regla es el conjunto de direcciones IP de las instancias, mientras que la IP de destino es la IP de SNAT que se asigna a partir de un grupo de direcciones IP externo. Tenga en cuenta lo siguiente:
  • El grupo que especifica NCP_SNAT_POOL ya debe existir en NSX antes de insertar la aplicación.
  • La prioridad de la regla SNAT de una aplicación es mayor que la de una organización.
  • Una aplicación puede configurarse con solo una IP de SNAT.
  • Puede utilizar otro grupo de direcciones IP cambiando la configuración e iniciando la aplicación de nuevo.

Configurar SNAT para TAS versión 3

Con la versión 3 de TAS, puede configurar SNAT de dos formas:

  • Configure NCP_SNAT_POOL en manifest.yml al crear la aplicación.
    Por ejemplo, la aplicación se denomina bread y el archivo manifest.yml tiene la siguiente información:
    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
    Ejecute los siguientes comandos:
    cf v3-push bread
    cf v3-apply-manifest -f manifest.yml
    cf v3-apps
    cf v3-restart bread
  • Configure NCP_SNAT_POOL mediante el comando cf v3-set-env.
    Ejecute los siguientes comandos (se asume que la aplicación se denomina 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

Configuración de una dirección IP o un grupo de direcciones IP de SNAT para una organización de TAS

Puede configurar una dirección IP o un grupo de direcciones IP de TAS para una organización de PCF con las siguientes anotaciones:
  • ncp_snat_pool: el grupo debe existir y tener la etiqueta scope: ncp/owner, tag: cluster:<cluster_name>.
  • ncp_snat_ip: una dirección específica de un grupo de direcciones IP.
Tenga en cuenta lo siguiente:
  • Si se especifican ncp_snat_pool y ncp_snat_ip, la dirección IP de SNAT debe estar en el grupo de direcciones IP de SNAT especificado.
  • Si solo se especifica ncp_snat_ip, la dirección IP de SNAT debe estar en el grupo de direcciones IP externas especificado en ncp.ini.
  • Si solo se especifica ncp_snat_pool, la dirección IP de SNAT se asignará desde el grupo especificado.
Puede configurar la IP de SNAT para una organización con el comando cf curl. Por ejemplo:
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_pool": "ann-ip-pool", "ncp_snat_ip": "1.2.3.4"}}}'
Puede obtener org-guid con el siguiente comando:
cf org <org-name> --guid
Puede eliminar la anotación ncp_snat_ip con el siguiente comando:
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_ip": null}}}'

Puede ir a la interfaz de usuario de NSX Manager para comprobar si la regla SNAT se creó correctamente. Para comprobar si hay errores, consulte los registros de NCP.

Si se muestra el error POOL_ACCESS_DENIED en el registro de NCP, significa que el grupo de direcciones IP que especifica ncp_snat_pool no tiene la etiqueta scope: ncp/owner, tag: cluster:<cluster_name>, o la etiqueta de propietario del grupo no coincide con la organización que envía la solicitud de asignación. Después de solucionar el error, debe reiniciar NCP, o bien eliminar la anotación ncp_snat_pool y volver a agregarla.