Encadeando o Wallarm e outros Ingress Controllers no mesmo cluster Kubernetes¶
Estas instruções fornecem os passos para implantar o Ingress Controller Wallarm no seu cluster K8s e encadeá-lo com outros Controllers que já estão rodando no seu ambiente.
O problema abordado pela solução¶
Wallarm oferece seu software de nó em diferentes formatos, incluindo Ingress Controller construído em cima do Community Ingress NGINX Controller.
Se você já usa um Ingress controller, pode ser desafiador substituir o Ingress controller existente pelo Controller Wallarm (por exemplo, se estiver usando o AWS ALB Ingress Controller). Nesse caso, você pode explorar a solução Wallarm Sidecar, mas se ela também não se adequar à sua infraestrutura, é possível encadear vários Ingress Controllers.
O encadeamento do Ingress Controller permite que você utilize um controller existente para obter solicitações de usuários finais para um cluster, e implante um Ingress Controller Wallarm adicional para fornecer a proteção de aplicação necessária.
Requisitos¶
-
Versão da plataforma Kubernetes 1.24-1.27
-
Gerenciador de pacotes Helm
-
Acesso à conta com a função Administrador e autenticação de dois fatores desativada no Wallarm Console para a Nuvem dos EUA ou Nuvem da UE
-
Acesso a
https://us1.api.wallarm.com
para trabalhar com a Wallarm Cloud dos EUA ou ahttps://api.wallarm.com
para trabalhar com a Wallarm Cloud da UE -
Acesso a
https://charts.wallarm.com
para adicionar os gráficos Helm da Wallarm. Certifique-se de que o acesso não é bloqueado por um firewall -
Acesso aos repositórios Wallarm no Docker Hub
https://hub.docker.com/r/wallarm
. Garanta que o acesso não é 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
-
Cluster do Kubernetes implantado rodando um Ingress controller
Implantando o Wallarm Ingress controller e o encadeando com um Ingress Controller adicional¶
Para implantar o Wallarm Ingress controller e encadeá-lo com Controllers adicionais:
-
Implante o gráfico Helm do Controller Wallarm oficial usando um valor de classe Ingress diferente do Controller Ingress existente.
-
Crie o objeto Ingress específico do Wallarm com:
- A mesma
ingressClass
que foi especificada novalues.yaml
do gráfico Helm do Wallarm Ingress. - As regras de roteamento de solicitações do Ingress controller configuradas da mesma maneira que o Controller Ingress existente.
O Wallarm Ingress controller não será exposto fora do cluster
Note que o Wallarm Ingress controller usa
ClusterIP
para seu serviço, o que significa que ele não será exposto fora do cluster. - A mesma
-
Reconfigure o Controller Ingress existente para encaminhar pedidos de entrada para o novo Wallarm Ingress Controller em vez dos serviços de aplicação.
-
Teste a operação do Wallarm Ingress Controller.
Passo 1: Implantar o Wallarm Ingress Controller¶
-
Gere um token de nó de filtragem do tipo apropriado:
- Abra Wallarm Console → Configurações → Tokens de API na Nuvem dos EUA ou Nuvem da UE.
- Encontre ou crie um token de API com a função de fonte
Deploy
. - Copie esse token.
- Abra Wallarm Console → Nós na Nuvem dos EUA ou Nuvem da UE.
-
Crie um nó de filtragem com o tipo Wallarm node e copie o token gerado.
-
Adicione o repositório de gráficos Helm Wallarm:
-
Crie o arquivo
values.yaml
com a seguinte configuração do Wallarm:controller: wallarm: enabled: true token: "<NODE_TOKEN>" apiHost: us1.api.wallarm.com # nodeGroup: defaultIngressGroup config: use-forwarded-headers: "true" ingressClass: wallarm-ingress ingressClassResource: name: wallarm-ingress controllerValue: "k8s.io/wallarm-ingress" service: type: ClusterIP nameOverride: wallarm-ingress
controller: wallarm: enabled: true token: "<NODE_TOKEN>" # nodeGroup: defaultIngressGroup config: use-forwarded-headers: "true" ingressClass: wallarm-ingress ingressClassResource: name: wallarm-ingress controllerValue: "k8s.io/wallarm-ingress" service: type: "ClusterIP" nameOverride: wallarm-ingress
<NODE_TOKEN>
é o token do nó Wallarm.- Ao usar um token de API, especifique um nome de grupo de nó no parâmetro
nodeGroup
. Seu nó será atribuído a este grupo, mostrado na seção Nós do Wallarm Console. O nome do grupo padrão édefaultIngressGroup
.
Para aprender mais opções de configuração, por favor use o link.
-
Instale o gráfico Helm Wallarm Ingress:
helm install --version 4.8.2 internal-ingress wallarm/wallarm-ingress -n wallarm-ingress -f values.yaml --create-namespace
internal-ingress
é o nome da versão Helmvalues.yaml
é o arquivo YAML com valores Helm criado no passo anteriorwallarm-ingress
é o namespace onde instalar o gráfico Helm (será criado)
-
Verifique se o Wallarm ingress controller está operando:
Cada status do pod deve ser STATUS: Running ou READY: N/N. Por exemplo:
Passo 2: Criar objeto Ingress com ingressClassName
específica do Wallarm¶
Crie o objeto Ingress com o mesmo nome ingressClass
configurado em values.yaml
no passo anterior.
Ingress object deve estar no mesmo namespace onde sua aplicação está implantada, por exemplo:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/wallarm-application: "1"
nginx.ingress.kubernetes.io/wallarm-mode: monitoring
name: myapp-internal
namespace: myapp
spec:
ingressClassName: wallarm-ingress
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp
port:
number: 80
Passo 3: Reconfigure o Ingress controller existente para encaminhar solicitações para o Wallarm¶
Reconfigure o Ingress Controller existente para encaminhar as solicitações de entrada para o novo Wallarm Ingress Controller em vez dos serviços da aplicação como segue:
-
Crie o objeto Ingress com o nome
ingressClass
para sernginx
. Note que este é o valor padrão, você pode substituí-lo pelo seu próprio valor se ele for diferente. -
O objeto Ingress deve estar no mesmo namespace que o gráfico Wallarm Ingress, que é
wallarm-ingress
no nosso exemplo. -
O valor de
spec.rules[0].http.paths[0].backend.service.name
deve ser o nome do serviço Wallarm Ingress Controller que é composto pelo nome do release Helm e.Values.nameOverride
.Para obter o nome, você pode usar o seguinte comando:
kubectl get svc -l "app.kubernetes.io/component=controller" -n wallarm-ingress -o=jsonpath='{.items[0].metadata.name}'
Em nosso exemplo, o nome é
internal-ingress-wallarm-ingress-controller
.
A configuração resultante do exemplo:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-external
namespace: wallarm-ingress
spec:
ingressClassName: nginx
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: internal-ingress-wallarm-ingress-controller
port:
number: 80
Passo 4: Teste a operação do Wallarm Ingress Controller¶
Obtenha o IP público do Load Balancer do Controlador Ingress externo existente, por exemplo, consideraremos que ele é implantado no namespace ingress-nginx
:
LB_IP=$(kubectl get svc -l "app.kubernetes.io/component=controller" -n ingress-nginx -o=jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
Envie uma solicitação de teste para o endereço do Controlador Ingress existente e verifique se o sistema está funcionando como esperado: