Recurso personalizado BackendConfig

Nesta página, você encontra uma visão geral do recurso personalizado BackendConfig e uma explicação de como ele é usado para configurar o Ingress no Google Kubernetes Engine (GKE). Nela também fornecemos material de referência para o tipo BackendConfig e tipos relacionados.

Visão geral

BackendConfig é uma definição de recurso personalizada (CRD, na sigla em inglês) (em inglês) usada pelo controlador Ingress do GKE. A partir da versão 1.10.5-gke.3 do GKE, é possível fornecer a configuração para um balanceador de carga HTTP(S) externo associando portas de serviço a objetos BackendConfig. A partir da versão 1.16.4-gke.20 do GKE, também é possível usar o BackendConfig com um balanceador de carga HTTP(S) interno.

Na tabela a seguir, resumimos os recursos compatíveis com a CRD BackendConfig para o tipo do Ingress externo e interno. A seção Referência do recurso BackendConfig abaixo descreve a configuração e os parâmetros de cada recurso.

Suporte ao recurso BackendConfig
Recurso Ingress para HTTP(S) externo Ingress para HTTP(S) interno
Cloud CDN X
Identity-Aware Proxy (IAP) X
Política de segurança do Google Cloud Armor X
Tempo limite X X
Tempo limite de diminuição da conexão X
Afinidade da sessão X X
Cabeçalhos de solicitação definidos pelo usuário X

Para saber mais sobre os conceitos básicos do balanceamento de carga HTTP(S) no Google Cloud, consulte Balanceamento de carga HTTP(S).

Exemplo de manifesto

Aqui está um exemplo de um manifesto de um BackendConfig. No manifesto, é especificada uma política de cache do Cloud CDN e é declarado que o Cloud CDN precisa estar ativado:

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

Como associar uma porta de serviço a um BackendConfig

No GKE, quando você cria um objeto Ingress do Kubernetes, o controlador Ingress do GKE cria e configura um balanceador de carga HTTP(S) para você. O Ingress tem regras, cada uma delas refere-se a uma porta em um objeto Serviço do Kubernetes. Se uma porta de um Serviço for referida por um Ingress, a porta será associada a um serviço de back-end de balanceamento de carga HTTP(S).

Se uma porta do Serviço for referenciada por um Ingress, e se a porta do serviço estiver associada a um BackendConfig, o serviço de back-end de balanceamento de carga HTTP(S) fará parte da configuração por meio do BackendConfig.

Veja aqui um manifesto de serviço do Kubernetes com três portas:

    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
    ...
    

A anotação beta.cloud.google.com/backend-config especifica um mapeamento entre portas e objetos BackendConfig. No manifesto anterior:

  • A porta http está associada a um BackendConfig chamado config-http.
  • A porta http2 está associada a um BackendConfig chamado config-http2.
  • Todas as outras portas do Serviço estão associadas ao BackendConfig padrão, que é chamado config-default. Portanto, neste exemplo, a porta http3 está associada a config-default.

Na anotação beta.cloud.google.com/backend-config, você precisa especificar um campo ports, default ou ambos.

Como revogar a configuração especificada em um BackendConfig

Nem a remoção da anotação BackendConfig de um Serviço nem a exclusão do objeto BackendConfig revogam a configuração especificada anteriormente em um BackendConfig. Isso ocorre porque o controlador Ingress apenas reconcilia a configuração especificada no BackendConfig.

Portanto, você precisa desabilitar explicitamente a configuração no BackendConfig para revogar a configuração que não é mais necessária. Veja a seguir um exemplo de desativação da configuração:

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

Como excluir um BackendConfig

Para excluir um BackedConfig, siga estas etapas:

  1. Primeiro, remova o nome do BackendConfig da anotação beta.cloud.google.com/backend-config no manifesto de Serviço.

  2. Aplique o manifesto de Serviço alterado ao cluster, por exemplo, usando kubectl apply.

  3. Neste momento, é possível excluir o BackendConfig. Observe que você não precisa excluir o BackendConfig. O importante é que você exclua o nome dele da anotação beta.cloud.google.com/backend-config.

Limitações

O BackendConfigs tem as seguintes limitações:

  • Um par (serviço, porta) pode consumir apenas um BackendConfig, mesmo que vários objetos Ingress façam referência ao par. Isso significa que todos os objetos Ingress que se referem ao mesmo serviço ou porta precisam usar a mesma configuração para o Google Cloud Armor, o IAP e o Cloud CDN.

  • O IAP e o Cloud CDN não podem ser ativados para o mesmo serviço de back-end de balanceamento de carga HTTP(S). Isso significa que o IAP e o Cloud CDN não podem ser configurados no mesmo BackendConfig.

  • Você precisa usar o kubectl 1.7 ou posterior para interagir com o BackendConfig.

Referência do recurso BackendConfig

BackendConfig v1beta1 cloud.google.com

Campos

metav1.TypeMeta

Grupo, versão e tipo de API.

metadata

metav1.ObjectMeta

Metadados de objeto padrão.

spec

BackendConfigSpec

O comportamento esperado de BackendConfig.

status

BackendConfigStatus

Status mais recentemente observado de BackendConfig.

BackendConfigSpec v1beta1 cloud.google.com

Campos
iap

IAPConfig

Configuração do IAP para o serviço de back-end de balanceamento de carga HTTP(S) associado. O IAP e o Cloud CDN não podem ser ativados para o mesmo serviço de back-end de balanceamento de carga HTTP(S).

cdn

CDNConfig

Configuração do Cloud CDN para o serviço de back-end de balanceamento de carga HTTP(S) associado. O IAP e o Cloud CDN não podem ser ativados para o mesmo serviço de back-end de balanceamento de carga HTTP(S).

securityPolicy

SecurityPolicyConfig

Configuração do Google Cloud Armor para o serviço de back-end de balanceamento de carga HTTP(S) associado.

timeoutSec int64

Tempo limite de solicitação/resposta em segundos. O padrão é 30 segundos.

connectionDraining

ConnectionDrainingConfig

Configuração de diminuição da conexão para o serviço de back-end de balanceamento de carga HTTP(S) associado.

sessionAffinity

SessionAffinityConfig

Configuração da afinidade da sessão para o serviço de back-end de balanceamento de carga HTTP(S) associado.

customRequestHeaders

CustomRequestHeadersConfig

Configuração dos cabeçalhos de solicitação definidos pelo usuário para o serviço de back-end de balanceamento de carga HTTP(S).

BackendConfigList v1beta1 cloud.google.com

Campos

metav1.TypeMeta

Grupo, versão e tipo de API.

metadata

metav1.ObjectMeta

Metadados de objeto padrão.

items

BackendConfig array

Lista de objetos BackendConfig.

IAPConfig v1beta1 cloud.google.com

Campos
enabled

boolean

Especifica se o IAP está ativado para o serviço de back-end de balanceamento de carga HTTP(S) associado.

oauthclientCredentials

OAuthClientCredentials

Credenciais do cliente, incluindo ID e chave secreta do cliente OAuth.

OAuthClientCredentials v1beta1 cloud.google.com

Campos
secretName

string

Nome da chave secreta que armazena a ID e a chave secreta do cliente OAuth.

clientID

string

Referência direta ao ID do cliente OAuth.

clientSecret

string

Referência direta à chave secreta do cliente OAuth.

CDNConfig v1beta1 cloud.google.com

Campos
enabled

boolean

Especifica se o Cloud CDN está ativado para o serviço de back-end do balanceamento de carga HTTP(S) associado.

cachePolicy

CacheKeyPolicy

Política de chave de cache para o serviço de back-end de balanceamento de carga HTTP(S) associado.

CacheKeyPolicy v1beta1 cloud.google.com

Campos
includeHost

boolean

Se true, a solicitação para hosts diferentes será armazenada em cache separadamente.

includeProtocol

boolean

Se verdadeiro, as solicitações HTTP e HTTPS serão armazenadas em cache separadamente.

includeQueryString

boolean

Se includeQueryString for verdadeiro, os parâmetros de string de consulta serão incluídos na chave de cache de acordo com queryStringBlacklist e queryStringWhitelist. Se nenhum dos dois estiver configurado, toda a string de consulta será incluída. Se includeQueryString for falso, toda a string de consulta será excluída da chave de cache.

queryStringBlacklist

string array

Nomes de parâmetros de string de consulta a serem excluídos das chaves de cache. Todos os outros parâmetros são incluídos. Especifique queryStringBlacklist ou queryStringWhitelist, mas não ambos.

queryStringWhitelist

string array

Nomes de parâmetros de string de consulta a incluir nas chaves de cache. Todos os outros parâmetros são excluídos. Especifique queryStringBlacklist ou queryStringWhitelist, mas não ambos.

SecurityPolicyConfig v1beta1 cloud.google.com

Campos
name

string

Nome da política de segurança do Google Cloud Armor a ser aplicada.

ConnectionDraining v1beta1 cloud.google.com

Campos
drainingTimeoutSec

int64

Tempo, em segundos, para esperar que as conexões sejam reduzidas. O padrão é 0 segundo.

SessionAffinity v1beta1 cloud.google.com

Campos
affinityType

string

O tipo de afinidade da sessão. Os valores possíveis são "CLIENT_IP", "GENERATED_COOKIE" e "NONE". O padrão é "NONE".

affinityCookieTtlSec

int64

TTL, em segundos, para um cookie de afinidade. É possível definir affinityCookieTtlSec mesmo que affinityType não seja "GENERATED_COOKIE".

CustomRequestHeadersConfig v1beta1 cloud.google.com

Campos
headers

string

Cabeçalhos extras que o balanceador de carga adiciona à solicitação. Especifique cada cabeçalho como uma string header-name:header-value.

A seguir