Pular para conteúdo

Ajuste fino do Wallarm Ingress Controller baseado em NGINX

Aprenda as opções de ajuste fino disponíveis para o Wallarm Ingress controller para obter o máximo da solução Wallarm.

Documentação oficial para NGINX Ingress Controller

O ajuste fino do Wallarm Ingress Controller é bastante semelhante ao do NGINX Ingress Controller descrito na documentação oficial. Ao trabalhar com Wallarm, todas as opções para configurar o NGINX Ingress Controller original estão disponíveis.

Configurações adicionais para Helm Chart

As configurações são definidas no arquivo values.yaml. Por padrão, o arquivo é assim:

controller:
  wallarm:
    enabled: false
    apiHost: api.wallarm.com
    apiPort: 443
    apiSSL: true
    token: ""
    nodeGroup: defaultIngressGroup
    existingSecret:
      enabled: false
      secretKey: token
      secretName: wallarm-api-token
    tarantool:
      kind: Deployment
      service:
        annotations: {}
      replicaCount: 1
      arena: "1.0"
      livenessProbe:
        failureThreshold: 3
        initialDelaySeconds: 10
        periodSeconds: 10
        successThreshold: 1
        timeoutSeconds: 1
      resources: {}
    metrics:
      enabled: false

      service:
        annotations:
          prometheus.io/scrape: "true"
          prometheus.io/path: /wallarm-metrics
          prometheus.io/port: "18080"

        ## Lista de endereços IP onde o serviço stats-exporter está disponível
        ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
        ##
        externalIPs: []

        loadBalancerIP: ""
        loadBalancerSourceRanges: []
        servicePort: 18080
        type: ClusterIP
    synccloud:
      resources: {}
    collectd:
      resources: {}

Para alterar essa configuração, recomendamos o uso da opção --set de helm install (ao instalar o controlador de Ingress) ou helm upgrade (ao atualizar os parâmetros do controlador de Ingress instalado). Por exemplo:

helm install --set controller.wallarm.enabled=true <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
helm upgrade --reuse-values --set controller.wallarm.enabled=true <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>

Uma descrição dos principais parâmetros que você pode configurar é fornecida abaixo. Outros parâmetros vêm com valores padrão e raramente precisam ser alterados.

controller.wallarm.enabled

Permite habilitar ou desabilitar as funções Wallarm.

Valor padrão: false

controller.wallarm.apiHost

Ponto de extremidade API Wallarm. Pode ser:

Valor padrão: api.wallarm.com

controller.wallarm.token

Um valor de token de nó de filtragem. É necessário para acessar a API de Wallarm.

O token pode ser um desses tipos:

  • Token de API (recomendado) - Ideal se você precisar adicionar/remover dinamicamente grupos de nó para organização de UI ou se quiser controlar o ciclo de vida do token para segurança adicional. Para gerar um token de API:

    Para gerar um token de API:

    1. Vá para Wallarm Console → ConfiguraçõesTokens de API em Nuvem de EUA ou Nuvem da UE.
    2. Crie um token de API com a função Deploy.
    3. Durante a implantação do nó, use o token gerado e especifique o nome do grupo usando o parâmetro controller.wallarm.nodeGroup. Você pode adicionar vários nós a um grupo usando diferentes tokens de API.
  • Token de nó - Adequado quando você já sabe os grupos de nó que serão utilizados.

    Para gerar um token de nó:

    1. Vá para Wallarm Console → Nós em Nuvem de EUA ou Nuvem da UE.
    2. Crie um nó e nomeie o grupo de nó.
    3. Durante a implantação do nó, use o token do grupo para cada nó que você deseja incluir no grupo.

O parâmetro é ignorado se controller.wallarm.existingSecret.enabled: true.

Valor padrão: não especificado

controller.wallarm.nodeGroup

A partir da versão 4.6.8 do Helm chart, isso especifica o nome do grupo de nós de filtragem que você deseja adicionar aos nós recentemente implantados. O agrupamento de nós desta maneira está disponível apenas quando você cria e conecta nós à Cloud usando um token de API com o papel Deploy (seu valor é passado no parâmetro controller.wallarm.token).

Valor default: defaultIngressGroup

controller.wallarm.existingSecret

A partir da versão 4.4.1 do Helm chart, você pode usar este bloco de configuração para buscar um valor de token de nó Wallarm dos segredos do Kubernetes. Isso é útil para ambientes com gerenciamento de segredo separado (por exemplo, você usa um operador de segredos externos).

Para armazenar o token de nó no K8s secrets e puxá-lo para o Helm chart:

  1. Crie um segredo Kubernetes com o token de nó Wallarm:

    kubectl -n <KUBERNETES_NAMESPACE> create secret generic wallarm-api-token --from-literal=token=<WALLARM_NODE_TOKEN>
    
    • <KUBERNETES_NAMESPACE> é o namespace Kubernetes que você criou para o lançamento do Helm com o controlador Wallarm Ingress.
    • wallarm-api-token é o nome do segredo Kubernetes
    • <WALLARM_NODE_TOKEN> é o valor do token de nó Wallarm copiado da interface de usuário do Console Wallarm.

    Se estiver usando algum operador de segredos externos, siga a documentação apropriada para criar um segredo.

  2. Defina a seguinte configuração em values.yaml:

    controller:
      wallarm:
        token: ""
        existingSecret:
          enabled: true
          secretKey: token
          secretName: wallarm-api-token
    

Valor padrão: existingSecret.enabled: false que aponta para o Helm chart obter o token de nó Wallarm de controller.wallarm.token.

controller.wallarm.tarantool.replicaCount

O número de pods em execução para postanalyics. Postanalytics é utilizado para a detecção de ataque baseada em comportamento.

Valor padrão: 1

controller.wallarm.tarantool.arena

Especifica a quantidade de memória alocada para o serviço postanalyics. Recomenda-se configurar um valor suficiente para armazenar dados de solicitação dos últimos 5 a 15 minutos.

Valor padrão: 0.2

controller.wallarm.metrics.enabled

Este interruptor alterna a coleta de informações e métricas. Se Prometheus estiver instalado no cluster Kubernetes, nenhuma configuração adicional será necessária.

Valor padrão: false

Configurações Globais do Controlador

Implementado via ConfigMap.

Além dos padrão, os seguintes parâmetros adicionais são suportados:

Anotações de Ingressos

Essas anotações são usadas para configurar os parâmetros de processamento para instâncias individuais do Ingress.

Além das padrão, as seguintes anotações adicionais são suportadas:

Aplicando anotação ao recurso Ingress

Para aplicar as configurações ao seu Ingress, por favor use o seguinte comando:

kubectl annotate --overwrite ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> <ANNOTATION_NAME>=<VALUE>
  • <YOUR_INGRESS_NAME> é o nome do seu Ingress

  • <YOUR_INGRESS_NAMESPACE> é o namespace do seu Ingress

  • <ANNOTATION_NAME> é o nome da anotação da lista acima

  • <VALUE> é o valor da anotação da lista acima

Exemplos de anotação

Configurando a página de bloqueio e o código de erro

A anotação nginx.ingress.kubernetes.io/wallarm-block-page é usada para configurar a página de bloqueio e o código de erro retornado na resposta à solicitação bloqueada pelos seguintes motivos:

Por exemplo, para retornar a página padrão de bloqueio do Wallarm e o código de erro 445 na resposta a qualquer solicitação bloqueada:

kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-block-page="&/usr/share/nginx/html/wallarm_blocked.html response_code=445 type=attack,acl_ip,acl_source"

Mais detalhes sobre os métodos de configuração da página de bloqueio e do código de erro →

Gerenciando o modo libdetection

Modo padrão libdetection

O modo padrão da biblioteca libdetection é on (habilitado).

Você pode controlar o modo libdetection usando uma das opções:

  • Aplicando a seguinte anotação nginx.ingress.kubernetes.io/server-snippet ao recurso Ingress:

    kubectl annotate --overwrite ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/server-snippet="wallarm_enable_libdetection off;"
    
  • Passe o parâmetro controller.config.server-snippet para o Helm chart:

    helm install --set controller.config.server-snippet='wallarm_enable_libdetection off;' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
    

    Existem também outros parâmetros necessários para a instalação correta do controlador de Ingress. Por favor, passe-os na opção --set também.

    helm upgrade --reuse-values --set controller.config.server-snippet='wallarm_enable_libdetection off;' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>