Ingress Controller de Citrix ADC

Configurar directivas de uso compartido de recursos de origen cruzado con el Citrix Ingress Controller

Citrix proporciona una definición de recursos personalizada (CRD) llamada CRD de CORS para Kubernetes. Puede usar la CRD de CORS para configurar las directivas de uso compartido de recursos de origen cruzado (CORS) con el Citrix Ingress Controller en Citrix ADC.

Qué es CORS

El uso compartido de recursos entre orígenes es un mecanismo que permite al explorador determinar si una aplicación web específica puede compartir recursos con otra aplicación web de un origen diferente. Permite a los usuarios solicitar recursos (por ejemplo, imágenes, fuentes y vídeos) de dominios fuera del dominio original.

CORS antes del vuelo

Antes de que un explorador web permita que Javascript emita una POST a una URL, realiza una solicitud pre-flight. Una solicitud previa al vuelo es una solicitud simple al servidor con la misma URL que utiliza el método OPTIONS en lugar de POST. El explorador web comprueba los encabezados HTTP en busca de encabezados relacionados con CORS para determinar si se permite la operación POST en nombre del usuario.

Solicitud CORS

Definición de CORS CRD

La CRD de CORS está disponible en el repositorio de GitHub Citrix Ingress Controller en: cors-crd.yaml. La CRD de CORS proporciona atributos para las diversas opciones que se requieren para definir la directiva CORS en el Citrix ADC de entrada que actúa como puerta de enlace de API. Los atributos requeridos incluyen: servicenames, allow_origin, allow_methods y allow_headers.

Los siguientes son los atributos proporcionados en la CRD de CORS:

Atributo Descripción
servicenames Especifica la lista de servicios de Kubernetes a los que quiere aplicar las directivas CORS.
allow_origin Especifica la lista de orígenes permitidos. El origen entrante se filtra en esta lista.
allow_methods Especifica la lista de métodos permitidos como parte del protocolo CORS.
allow_headers Especifica la lista de encabezados permitidos como parte del protocolo CORS.
max_age Especifica el número de segundos en que se puede almacenar en caché la información proporcionada por los encabezados Access-Control-Allow-Methods y Access-Control-Allow-Headers. El valor predeterminado es 86400.
allow_credentials Especifica si la respuesta se puede compartir cuando el modo de credenciales de la solicitud es “incluir”. El valor predeterminado es “true”.

Implementar la CRD CORS

Realice lo siguiente para implementar la CRD CORS:

  1. Descargue el CRD de CORS.

  2. Implemente el CRD CORS mediante el siguiente comando:

    kubectl create -f cors-crd.yaml
    

    Por ejemplo:

    $ kubectl create -f cors-crd.yaml
    customresourcedefinition.apiextensions.k8s.io/corspolicies.citrix.com created
    $ kubectl get crd
    NAME                         CREATED AT
    corspolicies.citrix.com      2021-05-21T20:01:13Z
    

Cómo escribir una configuración de directiva CORS

Después de implementar la CRD CORS proporcionada por Citrix en el clúster de Kubernetes, puede definir la configuración de la directiva CORS en un archivo .yaml. En el archivo .yaml, use corspolicy en el campo de tipo y en la sección spec agregue los atributos CORS CRD según sus requisitos para la configuración de la directiva.

El siguiente archivo YAML aplica la directiva configurada a los servicios enumerados en el campo servicenames. Citrix ADC responde con un código de respuesta 200 OK para la solicitud previa al vuelo si el origen es uno de los allow_origins [“random1234.com”, “hotdrink.beverages.com”]. La respuesta incluye allow_methods, allow_headers, y max_age configurados.

apiVersion: citrix.com/v1beta1
kind: corspolicy
metadata:
  name: corspolicy-example
spec:
  servicenames:
   - "cors-service"
  allow_origin:
   - "random1234.com"
   - "hotdrink.beverages.com"
  allow_methods:
   - "POST"
   - "GET"
   - "OPTIONS"
  allow_headers:
   - "Origin"
   - "X-Requested-With"
   - "Content-Type"
   - "Accept"
   - "X-PINGOTHER"
  max_age: 86400
  allow_credentials: true
<!--NeedCopy-->

Una vez que haya definido la configuración de la directiva, implemente el archivo .yaml con los siguientes comandos:

user@master:~/cors$ kubectl create -f corspolicy-example.yaml
corspolicy.citrix.com/corspolicy-example created

El Citrix Ingress Controller aplica la configuración de directivas en el dispositivo Citrix ADC de entrada.

Configurar directivas de uso compartido de recursos de origen cruzado con el Citrix Ingress Controller