Atualizando o controlador de entrada NGINX EOL com módulos integrados da Wallarm¶
Essas instruções descrevem as etapas para atualizar o Controlador de Entrada Wallarm em fim de vida (versão 3.6 e inferior) para a nova versão com o nó Wallarm 4.8.
Os nós Wallarm 3.6 e inferiores não são suportados
Recomenda-se que você atualize os nós Wallarm 3.6 e inferiores, pois essas versões não são suportadas, elas estão no fim da vida.
A configuração do nó e a filtragem de tráfego foram significativamente simplificadas no nó Wallarm das últimas versões. Antes de atualizar os módulos, por favor, revise cuidadosamente a lista de mudanças e as recomendações gerais. Observe que algumas configurações do nó mais recente são incompatíveis com os nós 3.6 e inferiores.
A versão atualizada do Community Ingress NGINX Controller
Se você atualizar o nó da versão 3.4 ou inferior, por favor, note que a versão do Community Ingress NGINX Controller, na qual é baseado o controlador de entrada Wallarm, foi atualizada da 0.26.2 para a 1.9.5.
Como a operação do Community Ingress NGINX Controller 1.9.5 foi significativamente alterada, sua configuração precisa ser adaptada a essas mudanças durante a atualização do controlador de entrada Wallarm.
Estas instruções contêm a lista de configurações do Community Ingress NGINX Controller que provavelmente você terá que alterar. No entanto, por favor, elabore um plano individual para a migração da configuração com base nas notas de release do Community Ingress NGINX Controller.
Requisitos¶
-
Versão da plataforma Kubernetes 1.24-1.27
-
Gerenciador de pacotes Helm
-
Compatibilidade dos seus serviços com o Controlador Ingress NGINX da comunidade versão 1.9.5
-
Acesso à conta com a função de Administrador e autenticação de dois fatores desativada no Console Wallarm para a Nuvem US ou Nuvem EU
-
Acesso a
https://us1.api.wallarm.com
para trabalhar com a Nuvem Wallarm US ou ahttps://api.wallarm.com
para trabalhar com a Nuvem Wallarm EU -
Acesso a
https://charts.wallarm.com
para adicionar os gráficos Helm da Wallarm. Certifique-se de que o acesso não está bloqueado por um firewall -
Acesso aos repositórios Wallarm no Docker Hub
https://hub.docker.com/r/wallarm
. Certifique-se de que o acesso não está bloqueado por um firewall -
Access to the IP addresses below for downloading updates to attack detection rules, as well as retrieving precise IPs for your allowlisted, denylisted, or graylisted countries, regions, or data centers
Passo 1: Informe o suporte técnico da Wallarm que você está atualizando os módulos do nó de filtragem (apenas se atualizar o nó 2.18 ou inferior)¶
Se estiver atualizando o nó 2.18 ou inferior, informe o suporte técnico da Wallarm que você está atualizando os módulos do nó de filtragem para 4.8 e peça para ativar a nova lógica de listas de IP para sua conta Wallarm.
Quando a nova lógica de listas de IP estiver ativada, abra o Console Wallarm e certifique-se de que a seção Listas de IP está disponível.
Passo 2: Desative o módulo de verificação de ameaças ativas (apenas se atualizar o nó 2.16 ou inferior)¶
Se estiver atualizando o nó Wallarm 2.16 ou inferior, desative o módulo Threat Replay Testing no Console Wallarm → Vulnerabilities → Configure.
A operação do módulo pode causar falsos positivos durante o processo de atualização. Desativar o módulo minimiza este risco.
Passo 3: Atualize a porta da API¶
Começando com a versão 4.0, o nó de filtragem carrega dados para a nuvem usando os endpoints da API us1.api.wallarm.com:443
(NUvem EUA) e api.wallarm.com:443
(Nuvem EU) em vez de us1.api.wallarm.com:444
e api.wallarm.com:444
.
Se você atualizar o nó da versão 3.x ou inferior e seu servidor com o nó implantado tiver acesso limitado aos recursos externos, e o acesso for concedido a cada recurso separadamente, então após a atualização a sincronização entre o nó de filtragem e a nuvem irá parar.
Para restaurar a sincronização, em sua configuração, altere a porta 444
para 443
para o endpoint da API para cada recurso.
Passo 4: Atualize o repositório de gráfico Helm da Wallarm¶
Adicione o repositório de gráficos Helm da Wallarm contendo todas as versões do gráfico usando o comando abaixo. Use o repositório Helm para o trabalho futuro com o controlador de entrada Wallarm.
Passo 5: Atualize a configuração values.yaml
¶
Para migrar para Wallarm Ingress controller 4.8, atualize a seguinte configuração especificada no arquivo values.yaml
:
-
Configuração padrão do Community Ingress NGINX Controller
-
Configuração do módulo Wallarm
Configuração padrão do Community Ingress NGINX Controller¶
-
Verifique as notas de lançamento sobre o Community Ingress NGINX Controller 0.27.0 e superior e defina as configurações que serão alteradas no arquivo
values.yaml
. -
Atualize as configurações definidas no arquivo
values.yaml
.
Está a seguir configurações que provavelmente precisarão ser alteradas:
-
Relatório adequado do endereço IP público do usuário final se as solicitações passarem por um balanceador de carga antes de serem enviadas para o controlador de entrada Wallarm.
-
Configuração de IngressClasses. A versão da API do Kubernetes em uso foi atualizada no novo controlador de entrada, o que exige que IngressClasses seja configurado por meio dos parâmetros
.controller.ingressClass
,.controller.ingressClassResource
e.controller.watchIngressWithoutClass
. -
Conjunto de parâmetros do ConfigMap (
.controller.config
) ConfigMap (.controller.config
), por exemplo: -
Validação da sintaxe do Ingress via "webhook de admissão" agora está habilitada por padrão.
Desativando a validação da sintaxe do Ingress
É recomendável desativar a validação da sintaxe do Ingress apenas se destabilizar a operação de objetos Ingress.
-
Formato de Label. Se o arquivo
values.yaml
define regras de afinidade de pod, altere o formato do rótulo nessas regras, por exemplo:controller: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - - key: app + - key: app.kubernetes.io/name operator: In values: - waf-ingress - - key: component + - key: app.kubernetes.io/component operator: In values: - - waf-ingress + - controller - - key: release + - key: app.kubernetes.io/instance operator: In values: - waf-ingress-ingress topologyKey: kubernetes.io/hostname weight: 100
Configuração do módulo Wallarm¶
Altere a configuração do módulo Wallarm definida no arquivo values.yaml
como segue:
-
Se estiver atualizando da versão 2.18 ou inferior, migre a configuração da lista de IP. Estes são os seguintes parâmetros que potencialmente devem ser excluídos de
values.yaml
:Como a lógica central da lista de IP foi significativamente alterada no nó Wallarm 3.x, é necessário ajustar a configuração da lista de IP adequadamente.
-
Certifique-se de que o comportamento esperado das configurações listadas abaixo corresponde à lógica alterada dos modos de filtragem
off
emonitoring
:- Diretiva
wallarm_mode
- Regra de filtragem geral configurada no Console Wallarm
- Regras de filtragem de baixo nível configuradas no Console Wallarm
Caso o comportamento esperado não corresponda à lógica modificada do modo de filtragem, ajuste as anotações de Ingress e outras configurações para as alterações lançadas.
- Diretiva
-
Elimine a configuração do serviço de monitoramento explícita. Na nova versão do controlador Wallarm Ingress, o serviço de monitoramento é habilitado por padrão e não requer nenhuma configuração adicional.
-
Se a página
&/usr/share/nginx/html/wallarm_blocked.html
configurada via ConfigMap era retornada para solicitações bloqueadas, ajuste sua configuração para as alterações lançadas.Na nova versão do nó, a página de bloqueio de amostra da Wallarm tem a UI atualizada sem logotipo e email de suporte especificado por padrão.
-
Se você personalizou a detecção de ataque
overlimit_res
através das diretrizes NGINXwallarm_process_time_limit
ewallarm_process_time_limit_block
, por favor, transfira estas configurações para a regra e delete do arquivovalues.yaml
.
Passo 6: Transferir a configuração de detecção de ataque overlimit_res
das diretivas à regra¶
A partir da versão 3.6, você pode ajustar com precisão a detecção de ataque overlimit_res
usando a regra no Wallarm Console.
Anteriormente, as diretivas NGINX wallarm_process_time_limit
e wallarm_process_time_limit_block
foram usadas. As diretivas listadas são consideradas obsoletas com o lançamento da nova regra e serão excluídas em lançamentos futuros.
Se as configurações de detecção de ataque overlimit_res
são personalizadas através das diretivas listadas, recomenda-se transferi-las para a regra da seguinte maneira:
-
Abra o Wallarm Console → Regras e prossiga para a configuração da regra Ajustar a detecção de ataque overlimit_res.
-
Configure a regra como feito através das diretivas NGINX:
- A condição da regra deve corresponder ao bloco de configuração NGINX com as diretivas
wallarm_process_time_limit
ewallarm_process_time_limit_block
especificadas. - O tempo limite para o nodo processar uma única solicitação (milissegundos): o valor de
wallarm_process_time_limit
. -
Processamento de solicitação: a opção Parar o processamento é recomendada.
Risco de esgotamento de memória do sistema
O alto limite de tempo e/ou a continuação do processamento de solicitações após o limite ter sido excedido podem provocar exaustão de memória ou processamento de solicitação fora do tempo.
-
Registre o ataque overlimit_res: a opção Registrar e exibir nos eventos é recomendada.
Se o valor de
wallarm_process_time_limit_block
ouprocess_time_limit_block
foroff
, escolha a opção Não criar evento de ataque. -
A regra não possui a opção equivalente explícita para a diretiva
wallarm_process_time_limit_block
. Se a regra define Registrar e exibir nos eventos, o nó irá bloquear ou passar o ataqueoverlimit_res
dependendo do modo de filtragem do nó:- No modo monitoramento, o nó encaminha a solicitação original para o endereço da aplicação. A aplicação tem o risco de ser explorada pelos ataques incluídos nas partes da solicitação processadas e não processadas.
- No modo bloqueio seguro, o nó bloqueia a solicitação se ela for originada do endereço IP listado em cinza. Caso contrário, o nó encaminha a solicitação original para o endereço da aplicação. A aplicação tem o risco de ser explorada pelos ataques incluídos nas partes da solicitação processadas e não processadas.
- No modo bloqueio, o nó bloqueia a solicitação.
- A condição da regra deve corresponder ao bloco de configuração NGINX com as diretivas
-
Exclua as diretivas NGINX
wallarm_process_time_limit
ewallarm_process_time_limit_block
do arquivo de configuraçãovalues.yaml
.Se a detecção de ataque
overlimit_res
for ajustada usando as diretivas e a regra, o nó irá processar as solicitações como a regra determina.
Passo 7: Verifique todas as mudanças dos manifestos K8s que estão por vir¶
Para evitar mudanças inesperadamente no comportamento do Controlador de Entrada, revise todas as mudanças dos manifestos K8s que estão por vir usando Helm Diff Plugin. Este plugin exibe a diferença entre os manifestos K8s da versão do Controlador de Entrada implantada e da nova.
Para instalar e rodar o plugin:
-
Instale o plugin:
-
Execute o plugin:
helm diff upgrade <RELEASE_NAME> -n <NAMESPACE> wallarm/wallarm-ingress --version 4.8.2 -f <PATH_TO_VALUES>
<RELEASE_NAME>
: O nome da liberação Helm com o gráfico do Controlador de Entrada<NAMESPACE>
: O namespace onde o Controlador de Entrada está implantado<PATH_TO_VALUES>
: o caminho para o arquivovalues.yaml
que define as configurações do controlador de entrada 4.8
-
Certifique-se de que nenhuma mudança pode afetar a estabilidade dos serviços em execução e examine cuidadosamente os erros do stdout.
Se a stdout estiver vazia, verifique se o arquivo
values.yaml
é válido.
Por favor, note as mudanças das seguintes configurações:
-
Campo imutável, por exemplo, os seletores de implantação e/ou StatefulSet.
-
Labels de pod. As mudanças podem levar à interrupção da operação do NetworkPolicy, por exemplo:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy spec: egress: - to: - namespaceSelector: matchExpressions: - key: name operator: In values: - kube-system # ${NAMESPACE} podSelector: matchLabels: # RELEASE_NAME=waf-ingress - app: waf-ingress + app.kubernetes.io/component: "controller" + app.kubernetes.io/instance: "waf-ingress" + app.kubernetes.io/name: "waf-ingress" - component: waf-ingress
-
Configuração do Prometheus com novos labels, por exemplo:
- job_name: 'kubernetes-ingress' kubernetes_sd_configs: - role: pod namespaces: names: - kube-system # ${NAMESPACE} relabel_configs: # RELEASE_NAME=waf-ingress # Selectors - - source_labels: [__meta_kubernetes_pod_label_app] + - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name] action: keep regex: waf-ingress - - source_labels: [__meta_kubernetes_pod_label_release] + - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance] action: keep regex: waf-ingress - - source_labels: [__meta_kubernetes_pod_label_component] + - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component] action: keep - regex: waf-ingress + regex: controller - source_labels: [__meta_kubernetes_pod_container_port_number] action: keep regex: "10254|18080" # Replacers - action: replace target_label: __metrics_path__ regex: /metrics - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: kubernetes_pod_name - source_labels: [__meta_kubernetes_pod_name] regex: (.*) action: replace target_label: instance replacement: "$1"
-
Analisar todas as outras mudanças.
Passo 8: Atualize o Controlador de Entrada¶
Existem três maneiras de atualizar o controlador de entrada Wallarm. Dependendo de haver ou não um balanceador de carga implantado em seu ambiente, selecione o método de atualização:
-
Implantação do controlador de entrada temporário
-
Re-criação regular do lançamento do controlador de entrada
-
Lançamento do controlador de entrada de criação sem afetar o balanceador de carga
Usando o ambiente de teste ou minikube
Se o controlador de entrada Wallarm estiver implantado no seu ambiente de teste, é recomendável atualizá-lo primeiro. Com todos os serviços operando corretamente no ambiente de teste, você pode prosseguir para o procedimento de atualização no ambiente de produção.
A menos que seja recomendado implantar o Controlador Wallarm Ingress 4.8 com a configuração atualizada usando minikube ou outro serviço primeiro. Certifique-se de que todos os serviços funcionam conforme o esperado e depois atualize o controlador de entrada no ambiente de produção.
Essa abordagem ajuda a evitar o tempo de inatividade dos serviços no ambiente de produção.
Método 1: Implantação do controlador de entrada temporário¶
Usando este método, você pode implantar o Controlador de Entrada 4.8 como uma entidade adicional em seu ambiente e alternar o tráfego para ele gradualmente. Isso ajuda a evitar mesmo tempo de inatividade temporário de serviços e garante uma migração segura.
-
Copie a configuração IngressClass do arquivo
values.yaml
da versão anterior para o arquivovalues.yaml
para o controlador de entrada Wallarm 4.8.Com essa configuração, o controlador de entrada identificará os objetos Ingress, mas não processará seu tráfego.
-
Implantar o Controlador de Entrada 4.8:
helm install <RELEASE_NAME> -n <NAMESPACE> wallarm/wallarm-ingress --version 4.8.2 -f <PATH_TO_VALUES>
<RELEASE_NAME>
: O nome para a liberação Helm do gráfico do controlador de entrada.<NAMESPACE>
: O namespace para implantar o controlador de entrada.<PATH_TO_VALUES>
: o caminho para o arquivovalues.yaml
que define as configurações do controlador de entrada 4.8
-
Certifique-se de que todos os serviços funcionam corretamente.
-
Troque a carga para o novo controlador de entrada gradualmente.
Método 2: Re-criação regular do lançamento do controlador de entrada¶
Se o balanceador de carga e o controlador de entrada NÃO estiverem descritos no mesmo gráfico Helm, você pode simplesmente recriar o lançamento Helm. Levará alguns minutos e o controlador de entrada ficará indisponível durante esse tempo.
Se o gráfico Helm definir a configuração de um balanceador de carga
Se o gráfico Helm definir a configuração de um balanceador de carga junto com o controlador de entrada, a recriação do lançamento pode levar a um longo tempo de inatividade do balanceador de carga (depende do provedor de nuvem). O endereço IP do balanceador de carga pode ser alterado após a atualização se o endereço constante não estiver atribuído.
Por favor, analise todos os possíveis riscos se estiver usando este método.
Para recriar o lançamento do Controlador de Entrada:
-
Exclua o lançamento anterior:
-
<RELEASE_NAME>
: O nome do lançamento Helm com o gráfico do Controlador de Entrada -
<NAMESPACE>
: O namespace onde o controlador de entrada está implantado
Por favor, não use a opção
--wait
ao executar o comando, pois pode aumentar o tempo de atualização. -
-
Crie um novo lançamento com o Controlador de Entrada 4.8:
helm install <RELEASE_NAME> -n <NAMESPACE> wallarm/wallarm-ingress --version 4.8.2 -f `<PATH_TO_VALUES>`
<RELEASE_NAME>
: O nome para o lançamento Helm do gráfico do Controlador de Entrada<NAMESPACE>
: O namespace para implantar o Controlador de Entrada<PATH_TO_VALUES>
: O caminho para o arquivovalues.yaml
que define as configurações do controlador de entrada 4.8
-
Defina a opção
wait = false
na configuração do Terraform para diminuir o tempo de atualização: -
Exclua o lançamento anterior:
-
Crie o novo lançamento com o Controlador de Entrada 4.8:
Método 3: Criação do lançamento do controlador de entrada sem afetar o balanceador de carga¶
Ao usar o balanceador de carga configurado pelo provedor de nuvem, recomenda-se atualizar o controlador de entrada com este método porque não afeta o balanceador de carga.
A recriação do lançamento levará alguns minutos e o controlador de entrada ficará indisponível durante esse tempo.
-
Obtenha os objetos a serem excluídos (exceto o balanceador de carga):
helm get manifest <RELEASE_NAME> -n <NAMESPACE> | yq -r '. | select(.spec.type != "LoadBalancer") | .kind + "/" + .metadata.name' | tr 'A-Z' 'a-z' > objects-to-remove.txt
Para instalar a utilidade
yq
, use as instruções.Os objetos a serem excluídos serão emitidos para o arquivo
objects-to-remove.txt
. -
Exclua os objetos listados e recrie o lançamento:
cat objects-to-remove.txt | xargs kubectl delete --wait=false -n <NAMESPACE> && \ helm upgrade <RELEASE_NAME> -n <NAMESPACE> wallarm/wallarm-ingress --version 4.8.2 -f `<PATH_TO_VALUES>`
Para diminuir o tempo de inatividade do serviço, NÃO é recomendável executar comandos separadamente.
-
Garanta que todos os objetos são criados:
A saída deve dizer que todos os objetos já existem.
Estão os seguintes parâmetros passados nos comandos:
-
<RELEASE_NAME>
: O nome do lançamento Helm com o gráfico do Controlador de Entrada. -
<NAMESPACE>
: O namespace onde o controlador de entrada está implantado. -
<PATH_TO_VALUES>
: O caminho para o arquivovalues.yaml
definindo as configurações do controlador de entrada 4.8.
Passo 9: Teste o controlador de entrada atualizado¶
-
Verifique se a versão do gráfico Helm foi atualizada:
A versão do gráfico deve corresponder a
wallarm-ingress-4.8.2
. -
Obtenha a lista de pods especificando o nome do controlador de entrada Wallarm em
<INGRESS_CONTROLLER_NAME>
:Cada status do pod deve ser STATUS: Running ou READY: N/N. Por exemplo:
-
Envie a solicitação com o teste Path Traversal ataque ao endereço do controlador de entrada Wallarm:
Se o nó de filtragem estiver funcionando no modo
block
, o código403 Forbidden
será retornado em resposta à solicitação e o ataque será exibido no Console Wallarm → Eventos.
Passo 10: Ajuste as anotações do Ingress para as mudanças lançadas¶
Ajuste as seguintes anotações do Ingress para as mudanças lançadas no controlador de entrada 4.8:
-
Se estiver atualizando a partir da versão 2.18 ou inferior, migre a configuração da lista de IPs. Como a lógica principal da lista de IPs foi significativamente alterada no nó Wallarm 3.x, é necessário ajustar a configuração da lista de IPs adequadamente, alterando as anotações do Ingress (se aplicável).
-
Certifique-se de que o comportamento esperado das configurações listadas abaixo corresponde à lógica alterada dos modos de filtragem
off
emonitoring
:- Diretiva
wallarm_mode
- Regra de filtragem geral configurada no Console Wallarm
- Regras de filtragem de baixo nível configuradas no Console Wallarm
Caso o comportamento esperado não corresponda à lógica modificada do modo de filtragem, ajuste as anotações de Ingress para as alterações lançadas.
- Diretiva
-
Se o Ingress estiver anotado com
nginx.ingress.kubernetes.io/wallarm-instance
, renomeie esta anotação paranginx.ingress.kubernetes.io/wallarm-application
.Apenas o nome da anotação mudou, sua lógica permanece a mesma. A anotação com o nome anterior será descontinuada em breve, então recomenda-se renomeá-la antes.
-
Se a página
&/usr/share/nginx/html/wallarm_blocked.html
configurada via anotações do Ingress é retornada para solicitações bloqueadas, ajuste sua configuração para as alterações lançadas.Nas novas versões do nó, a página de bloqueio de amostra da Wallarm tem a IU atualizada sem logotipo e email de suporte especificado por padrão.
Passo 11: Reative o módulo de verificação de ameaça ativa (apenas se atualizar o nó 2.16 ou inferior)¶
Conheça a recomendação sobre a configuração do módulo de verificação de ameaças ativas e reative-o se necessário.
Depois de um tempo, garanta que a operação do módulo não cause falsos positivos. Se descobrir falsos positivos, por favor, entre em contato com o suporte técnico da Wallarm.