Ingress Controller de Citrix ADC

Implementar API Gateway con GitOps

Las definiciones de recursos personalizadas (CRD) son la forma principal de configurar las directivas de puerta de enlace de API en implementaciones nativas de la nube. Los equipos de operaciones crean las directivas de configuración (redirección, autenticación, reescritura, firewall de aplicaciones web (WAF), etc.) y las aplican en forma de CRD. En un contexto de API Gateway, estas directivas se aplican en las API específicas y en las que se alojan en sentido ascendente estas API.

Los desarrolladores de API documentan los detalles de la API en un formato de especificación de API abierta para que los desarrolladores de software cliente y los equipos de implementación de servicios de pares usen los detalles de la API Los documentos de la API contienen información como la ruta base, la ruta, el método, la autenticación y la autorización.

Los equipos de operaciones pueden usar la información de un documento de especificación de API para configurar API Gateway. Los desarrolladores y los equipos de operaciones utilizan ampliamente Git, una solución de control de código fuente. La solución GitOps facilita la colaboración y la comunicación que tienen lugar entre los equipos de desarrollo y de operaciones. GitOps ayuda a crear una entrega más rápida, optimizada y continua para Kubernetes sin perder estabilidad.

La implementación de API Gateway con la solución GitOps permite a los equipos de operaciones utilizar el documento de especificación de API creado por los desarrolladores de software en la configuración de puerta de enlace de API. Esta solución automatiza las tareas y el intercambio de información entre los equipos de desarrollo de API y operaciones.

Acerca de la solución GitOps para API Gateway

La solución GitOps está constituida principalmente por tres entidades:

  • Documento de especificación de API abierto
  • CRD de plantillas de directivas
  • CRD de implementación de API Gateway

Abrir documento de especificación de API

Creado por desarrolladores de API o diseñadores de API, el documento proporciona información de API. La solución GitOps utiliza los siguientes detalles de un documento de especificación de API abierta:

  • Ruta base
  • Ruta
  • Método
  • Etiquetas
  • Autenticación
  • Autorización

A continuación, se muestra un archivo de especificación de API abierta de muestra con los detalles (en rojo) que se utilizan para crear directivas automáticamente.

Especificación de API abierta

CRD de plantillas de directivas

Los CRD son la forma principal de configurar una instancia de puerta de enlace de API. El equipo de operaciones crea y administra las implementaciones de CRD. En el flujo de trabajo tradicional, como parte de la creación de las directivas, el equipo de operaciones rellena manualmente los detalles del objetivo, como el flujo ascendente y la ruta de la API en las instancias de CRD. En la solución GitOps, la ruta de la API y los detalles del flujo ascendente se derivan automáticamente. El equipo de operaciones crea los CRD sin ningún detalle de destino y la solución se refiere a dichas instancias de CRD como plantillas de directivas.

La solución GitOps admite las siguientes plantillas de directivas:

  • Directiva de reescritura
  • Directiva de límite de tarifas
  • Directiva de autenticación
  • WAF

A continuación se muestra un ejemplo de plantilla de directiva de reescritura:

Nota: Para obtener información sobre cómo crear una instancia de CRD, consulte los CRD individuales.

Plantilla directiva

CRD de implementación de API Gateway

La CRD de implementación de API Gateway vincula el documento de especificación de API con plantillas de directivas Este CRD permite la asignación de recursos de API con servicios ascendentes y directivas de puerta de enlace de API relacionadas con la redirección y la seguridad. El equipo de operaciones mantiene la CRD de implementación de API Gateway con los datos recibidos del equipo de desarrollo.

La CRD de implementación de API Gateway configura lo siguiente:

  • Detalles del repositorio Git
  • Escucha de dispositivos de punto final
  • Mapeo de API a upstream
  • Mapeo de API a directivas
  • Referencias de la directiva de autenticación de API abierta a la asignación de plantillas

Como alternativa, la CRD de API Gateway admite fuentes que no son de GIT para obtener documentos de especificación OpenAPI (OAS). Actualmente, se admiten fuentes de URL HTTP y HTTPS. Estas URL se pueden proteger con contraseña y se admite la autenticación HTTP básica. Las credenciales se pueden configurar con los mismos campos que los de las fuentes de archivos OAS basadas en Git.

La siguiente imagen muestra la CRD de implementación de API Gateway que vincula la especificación de la API con las plantillas de directivas mediante los selectores de API y las asignaciones de directivas.

Especificación de API abierta

Las API que comienzan con la expresión regular /pet se seleccionan con el patrón de expresiones regulares de ruta y las API con /play se seleccionan con la etiquetaplay. Las definiciones de seguridad del documento de especificación de la API se asignan con las configuraciones de autenticación, autorización y auditoría disponibles en la plantilla CRD de autenticación.

Configurar la CRD de API Gateway

La CRD de API Gateway vincula los recursos de la API definidos en la especificación Swagger con las directivas definidas en los otros CRD.

Requisitos previos

Aplique las definiciones de CRD para los siguientes objetos de CRD:

Definición de API

Proporciona información sobre el repositorio de Git en el que el observador de Git supervisa los archivos de especificación de la API abierta.

Definición de API: detalles de acceso al repositorio de Git

Campo Descripción
Repository Especifica la URL del repositorio de Git.
Branch Especifica el nombre de la rama de Git (de forma predeterminada, master).
oas_secret_ref Especifica la referencia secreta de acceso a Git como un nombre de objeto secreto de Kubernetes. Nota: Al crear un secreto, mantenga username y password como nombres de campo secretos para las credenciales de acceso de Git.
Files Se puede acceder a las credenciales de estas URL de OAS desde las combinaciones de oas_secret_ref campos field o user_name y password.

Proxy de API

Proporciona información sobre la configuración del dispositivo de punto final (VIP) que se utiliza para exponer las API en el front-end de la API de Gateway.

api_proxy: detalles de VIP

Campo Descripción
ip_address Especifica la dirección IP del punto final (VIP).
port Especifica el puerto de punto final.
protocol Especifica el protocolo (HTTP/HTTPS).
secret Especifica el secreto del certificado SSL para la configuración del dispositivo de punto final.

Mapeos de directivas

Mapea los recursos de la API con los servicios ascendentes y las plantillas de directivas. Parte de la información de esta sección se recopila de los desarrolladores cuando el equipo de operaciones crea el CRD.

Sección Subsección Campo Subcampo Descripción
Directivas       Especifica la directiva y la asignación ascendente.
    Nombre   Especifica el nombre de la directiva. Es único en una instancia de CRD.
  Selector     Una lista de filtros para seleccionar los recursos de la API.
    API   Especifica el patrón Regexp para la selección de API. Todas las API que coinciden con este patrón se seleccionan para aplicar directivas de este bloque.
    método   Una lista de verbos HTTP, si el verbo de recurso de la API coincide con ANY en la lista, se selecciona.
    Etiquetas   Una lista de etiquetas para que coincidan con una API. Estas etiquetas coinciden con las etiquetas del documento de especificación de la API. Puede utilizar etiquetas o patrones de ruta basados en ragexp para que coincidan con una directiva.
  Upstream.     Especifica el flujo ascendente de la directiva seleccionada.
    Servicio   Especifica el nombre del servicio back-end.
    Port   Especifica el puerto de servicio back-end.
  Vinculante a directivas     Especifica la lista de directivas que se aplicará en la API seleccionada.
      Tipo de plantilla de directiva Especifica el tipo exacto de directiva. Los tipos admitidos son WAF, directiva de reescritura y límite de velocidad.
      Nombre Especifica el nombre de la plantilla de directivas.

Asignaciones AAA

Asigna las referencias de autenticación en el documento de especificación de la API con las secciones de definición de directivas disponibles en la plantilla CRD de autenticación.

Sección Subsección Campo Subcampo Descripción
aaa       Asignaciones de secciones de directivas de autenticación, autorización y auditoría.
    nombre_CRD   Especifica el nombre de la plantilla de CRD de autenticación.
  Mapeos     Mapeo de referencias de directivas de seguridad de especificación de API con las secciones apropiadas en la plantilla CRD de autenticación. Nota: Si la especificación de la API hace referencia a coincidencias de cadenas con el nombre de la sección de directivas en la plantilla CRD, no se requiere una asignación explícita.

Realice los siguientes pasos para implementar la CRD de API Gateway:

  1. Descargue la CRD de API Gateway.

  2. Implemente la CRD de API Gateway con el siguiente comando:

        kubectl create -f apigateway-crd.yaml`
    

    A continuación se muestra un ejemplo de configuración de CRD de API Gateway:

    apiVersion: citrix.com/v1beta1
    kind: apigatewaypolicy
    metadata:
      name: apigatewaypolicyinstance
    spec:
        api_definition:
            repository: "https://code.citrite.net/scm/cnn/cic-gitops.git"
            branch: "modify-test-branch"
            oas_secret_ref: "mysecret"
            files:
                - "test_gitwatcher/petstore.yaml"
                - "test_gitwatcher/playstore.yaml"
        api_proxy:
            ipaddress: "10.106.172.83"
            port:  80
            protocol: "http"
            secret: "listner-secret"
        policies:
          - name: "p1"
            selector:
                - api: "/pet.\*"
                  method: ["GET", "POST"]
            upstream:
                service: "pet-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops-slow"
          - name: "p2"
            selector:
                - api: "/user.\*"
                  method: ["GET", "POST"]
            upstream:
                service: "user-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops-slow"
          - name: "p3"
            selector:
                - tags: ["play"]
            upstream:
                service: "play-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops"
                rewritepolicy:
                    name: "prefixurl"
                waf:
                    name: "buffoverflow"
        aaa:
          - crd_name: authgitops
            mappings:
              - petstore_auth: jwt-auth-provider
              - api_key: introspect-auth-provider
    <!--NeedCopy-->
    

Soporte para análisis basados en información web

El análisis basado en conocimientos web ahora es compatible con la CRD de la puerta de enlace de API. Cuando usa GitOps, los siguientes parámetros de información web están habilitados de forma predeterminada:

  • httpurl
  • httpuseragent
  • httphost
  • httpmethod
  • httpcontenttype
Implementar API Gateway con GitOps