Recurso personalizado de BackendConfig

En esta página, se proporciona una descripción general del recurso personalizado de BackendConfig y se explica cómo se usa para configurar Ingress en Google Kubernetes Engine. Esta página también proporciona material de referencia para el tipo BackendConfig y los tipos relacionados.

Descripción general

BackendConfig es una definición personalizada de un recurso que usa el controlador de Ingress de Kubernetes Engine. A partir de la versión GKE 1.10.5-gke.3, puedes proporcionar la configuración de un balanceador de cargas de Cloud si asocias los puertos del servicio a los objetos BackendConfig.

Puedes usar BackendConfig para configurar estas características de balanceo de cargas de HTTP(S):

Este es un ejemplo de un manifiesto para una BackendConfig. El manifiesto especifica una política de caché Cloud CDN y declara que Cloud CDN debe estar habilitada:

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-backend-config
spec:
  cdn:
    enabled: true
    cachePolicy:
      includeHost: true
      includeProtocol: true
      includeQueryString: false

Asocia un puerto de servicio a un BackendConfig

Cuando creas un objeto Ingress de Kubernetes en GKE, el controlador de Ingress de GKE crea y configura un balanceador de cargas HTTP(S) para ti. Tu Ingress tiene reglas, y cada una hace referencia a un puerto en un objeto de servicio de Kubernetes. Si un Ingress hace referencia a un puerto de servicio, el puerto se asocia a un servicio de backend de balanceo de cargas HTTP(S).

Si un puerto de servicio hace referencia a un Ingress, y si el puerto de servicio se asocia a una BackendConfig, entonces, el servicio de backend de balanceo de cargas HTTP(S) forma parte de la configuración desde el BackendConfig.

A continuación, se muestra un manifiesto de servicio de Kubernetes que tiene tres puertos:

apiVersion: v1
kind: Service
metadata:
  annotations:
    beta.cloud.google.com/backend-config:
      '{"ports": {"http":"config-http", "http2" :"config-http2"}, "default": "config-default"}'
  name: my-service
spec:
  type: NodePort
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 8080
  - name: http2
    protocol: TCP
    port: 443
    targetPort: 8080
  - name: http3
    protocol: TCP
    port: 49152
    targetPort: 49152
...

La anotación beta.cloud.google.com/backend-config especifica una asignación entre puertos y objetos BackendConfig. En el manifiesto anterior, se dan estas situaciones:

  • El puerto http está asociado a una BackendConfig denominada config-http.
  • El puerto http2 está asociado a una BackendConfig denominada config-http2.
  • Todos los demás puertos del servicio están asociados a la BackendConfig predeterminada, que se denomina config-default. Entonces, en este ejemplo, el puerto http3 está asociado a config-default.

En la anotación beta.cloud.google.com/backend-config, debes especificar un campo ports, un campo default o ambos.

Revoca la configuración especificada en una BackendConfig

Ni quitar la anotación BackendConfig de un Servicio ni borrar la BackendConfig del objeto revocará la configuración previamente especificada en una BackendConfig. Esto se debe a que el Ingress Controller solo reconcilia la configuración especificada en BackendConfig.

Por lo tanto, debes inhabilitar explícitamente la configuración en BackendConfig para revocar la configuración que ya no es necesaria. Aquí hay un ejemplo para inhabilitar la configuración:

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-backend-config
spec:
  cdn:
    enabled: false
  securityPolicy:
    name: ""

Cómo borrar una BackendConfig

Para borrar una BackedConfig, sigue estos pasos:

  1. Primero, quita el nombre de BackendConfig de la anotación beta.cloud.google.com/backend-config en el manifiesto de servicio.

  2. Aplica el manifiesto de servicio modificado a tu clúster, por ejemplo, con kubectl apply.

  3. En este punto, puedes borrar la BackendConfig. Ten en cuenta que no tienes que borrar la BackendConfig. Lo importante es que borres su nombre de la anotación beta.cloud.google.com/backend-config.

Limitaciones

Un par (puerto, servicio) puede consumir solo una BackendConfig, incluso si varios objetos Ingress hacen referencia al (puerto, servicio). Esto significa que todos los objetos Ingress que hacen referencia a lo mismo (puerto, servicio) deben usar la misma configuración para Google Cloud Armor, IAP y Cloud CDN.

IAP y Cloud CDN no se pueden habilitar para el mismo servicio de backend de balanceo de cargas de HTTP(S). Esto significa que no puedes configurar IAP y Cloud CDN en la misma BackendConfig.

Debes usar kubectl 1.7 o posterior para interactuar con BackendConfig. Es decir, debes tener una versión de kubectl que admita recursos personalizados.

Próximos pasos

Referencia

BackendConfig v1beta1 cloud.google.com

Campos

metav1.TypeMeta

Grupo de API, versión y tipo

metadata

metav1.ObjectMeta

Metadatos de objeto estándar

spec

BackendConfigSpec

El comportamiento deseado de BackendConfig

status

BackendConfigStatus

Estado de BackendConfig observado más recientemente

BackendConfigSpec v1beta1 cloud.google.com

Campos
iap

IAPConfig

Configuración IAP para el servicio de backend de balanceo de cargas de HTTP(S) asociado. Ten en cuenta que IAP y Cloud CDN no se pueden habilitar para el mismo servicio de backend de balanceo de cargas de HTTP(S).

cdn

CDNConfig

Configuración Cloud CDN para el servicio de backend de balanceo de cargas de HTTP(S) asociado. Ten en cuenta que IAP y Cloud CDN no se pueden habilitar para el mismo servicio de backend de balanceo de cargas de HTTP(S).

securityPolicy

SecurityPolicyConfig

Configuración de Google Cloud Armor para el servicio de backend de balanceo de cargas de HTTP(S) asociado.

timeoutSec int64

Tiempo de espera de solicitud/respuesta en segundos. El valor predeterminado es de 30 segundos.

connectionDraining

ConnectionDrainingConfig

Configuración de desvío de conexión para el servicio de backend de balanceo de cargas de HTTP(S) asociado.

sessionAffinity

SessionAffinityConfig

Configuración de afinidad de sesión para el servicio de backend de balanceo de cargas de HTTP(S) asociado.

BackendConfigList v1beta1 cloud.google.com

Campos

metav1.TypeMeta

Grupo de API, versión y tipo

metadata

metav1.ObjectMeta

Metadatos de objeto estándar

items

BackendConfig array

Lista de objetos BackendConfig

IAPConfig v1beta1 cloud.google.com

Campos
enabled

boolean

Especifica si IAP está habilitado para el servicio de backend de balanceo de cargas de HTTP(S) asociado.

oauthclientCredentials

OAuthClientCredentials

Credenciales del cliente, incluido el ID y secreto de cliente de OAuth

OAuthClientCredentials v1beta1 cloud.google.com

Campos
secretName

string

Nombre del Secreto que almacena el ID y el secreto de cliente de OAuth

clientID

string

Referencia directa al ID de cliente de OAuth

clientSecret

string

Referencia directa al secreto de cliente de OAuth.

CDNConfig v1beta1 cloud.google.com

Campos
enabled

boolean

Especifica si Cloud CDN está habilitado para el servicio de backend de balanceo de cargas de HTTP(S) asociado.

cachePolicy

CacheKeyPolicy

Política de claves de caché para el servicio de backend de balanceo de cargas de HTTP(S) asociado.

CacheKeyPolicy v1beta1 cloud.google.com

Campos
includeHost

boolean

Si es verdadero, la solicitud a diferentes hosts se almacena en caché por separado.

includeProtocol

boolean

Si es verdadero, las solicitudes HTTP y HTTPS se almacenan en caché por separado.

includeQueryString

boolean

Si includeQueryString es verdadero, los parámetros de string de consulta se incluyen en la clave de caché de acuerdo con queryStringBlacklist y queryStringWhitelist. Si no se establece ninguno, se incluye toda la string de consulta. Si includeQueryString es falso, la string de consulta completa se excluye de la clave de caché.

queryStringBlacklist

string array

Nombres de parámetros de string de consulta para excluir de las claves de caché. Todos los demás parámetros están incluidos. Especifica queryStringBlacklist o queryStringWhitelist, pero no ambos.

queryStringWhitelist

string array

Nombres de parámetros de string de consulta para incluir en las claves de caché. Todos los demás parámetros están excluidos. Especifica queryStringBlacklist o queryStringWhitelist, pero no ambos.

SecurityPolicyConfig v1beta1 cloud.google.com

Campos
name

string

Nombre de la política de seguridad de Google Cloud Armor que se aplicará.

ConnectionDraining v1beta1 cloud.google.com

Campos
drainingTimeoutSec

int64

Tiempo, en segundos, para esperar a que las conexiones se desvíen. El valor predeterminado es 0 segundos.

SessionAffinity v1beta1 cloud.google.com

Campos
affinityType

string

El tipo de afinidad de sesión. Los valores posibles son "CLIENT_IP", "GENERATED_COOKIE" y "NONE". El valor predeterminado es "NONE".

affinityCookieTtlSec

int64

Tiempo de actividad, en segundos, para una cookie de afinidad. Puedes establecer affinityCookieTtlSec incluso si affinityType no es "GENERATED_COOKIE".