Tenho uma política de rede global que se parece com isso (registrar qualquer pacote que não esteja na porta 30000 e permitir apenas o tráfego para a porta 30000 na interface ens4):
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: internal-rules
spec:
selector: interface == 'ens4'
applyOnForward: true
types:
- Ingress
- Egress
ingress:
- action: Log
protocol: TCP
destination:
notPorts:
- 30000:32767
- action: Allow
protocol: TCP
destination:
ports:
- 30000:32767
egress:
- action: Allow
então aplico isso a uma interface com um hostendpoint como este.
apiVersion: projectcalico.org/v3
kind: HostEndpoint
metadata:
name: node1-internal-if
labels:
interface: ens4
spec:
interfaceName: ens4
node: testmdm2503nic-node1
Tenho regras diferentes para as 3 interfaces diferentes que tenho na minha configuração. Em geral, funciona para filtrar meu tráfego, mas vejo pacotes sendo descartados de forma inesperada. Por exemplo, o seguinte pacote é descartado. Observe que a interface IN está em branco; eu teria pensado que ela não deveria ser filtrada por uma das minhas regras de hostendpoint. A porta 30000 é uma das portas que listei como aberta no ens4, mas não tenho certeza de qual interface esse tráfego está chegando.
Ter 11 Mar 18:02:39 2025 : INFO | kickRegressionSuite: 11 Mar 16:43:04 testmdm2503nic-k8sc-node1-2 kernel: calico-packet: IN= OUT=cali6f00f63eeec SRC=1.2.3.4 DST=1.2.8.4 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=9941 DF PROTO=TCP SPT=58082 DPT=30000 WINDOW=64240 RES=0x00 SYN URGP=0 MARK=0x69a04000
Quando um pacote é descartado conforme o esperado, normalmente o log teria o nome da interface listado no campo IN:
20 de fevereiro 10:30:50 loriek8s-k8sc-node2-3 kernel: calico-packet: IN=ens3 OUT= MAC=fa:: SRC=1.1.7.9 DST=1.1.7.2 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=53798 DF PROTO=TCP SPT=33728 DPT=10250 WINDOW=29200 RES=0x00 SYN URGP=0
alguma ideia do que posso estar fazendo errado ou talvez o registro de pacotes descartados não esteja como eu esperava.
Com base na sua descrição, há vários problemas potenciais com a configuração dos seus Calico Host Endpoints que podem explicar as quedas inesperadas de pacotes.
Principais observações: Você está vendo pacotes descartados com interface IN= em branco, mas espera que eles sejam permitidos (DPT=30000)
Os pacotes vêm da interface cali6f00f63eeec (um par Calico veth para um pod)
Sua política HostEndpoint se aplica somente à interface ens4
Causas prováveis
O tráfego ocorre entre pods no mesmo nó (tráfego hairpin)
A interface de rede principal do nó não está devidamente coberta por um HostEndpoint
Comportamento ApplyOnForward: Sua política possui applyOnForward: true, o que significa que ela se aplica ao tráfego encaminhado (entre interfaces), bem como ao tráfego direto. Isso pode capturar tráfego que você não pretendia filtrar.
Regras de permissão padrão ausentes: o Calico nega por padrão as políticas do HostEndpoint. Qualquer tráfego que não seja explicitamente permitido será descartado.