cks

3.8 NetworkPolicy (Kubernetes nativa)

Detalhamento de NetworkPolicy nativa do Kubernetes para o CKS.

O que é

NetworkPolicy define regras de rede para pods (quem pode acessar quem e em quais portas). Por padrão, na maioria dos CNIs, todo tráfego é permitido; ao criar uma Policy você restringe (allow/deny) tráfego ingress/egress com base em podSelector, namespaceSelector e ipBlock. Um caso clássico no CKS é negar acesso ao metadata server (169.254.169.254) e permitir apenas para um app específico.

Documentação oficial

Regra “deny egress” para IP específico (metadata)

Para bloquear que todos os pods do namespace acessem um IP (ex.: metadata server), use uma Policy com:

Exemplo (valores a ajustar conforme o enunciado):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: metadata-deny
  namespace: <namespace>
spec:
  podSelector: {}   # todos os pods do namespace
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 192.168.x.x/32   # IP do metadata server (ex.: 169.254.169.254/32)

Assim, todo o egress é permitido exceto para o IP em except.

Regra “allow” apenas para um label (metadata)

Para que pods com um label específico (ex.: role=metadata-accessor) acessem o metadata server:

Exemplo:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: metadata-allow
  namespace: <namespace>
spec:
  podSelector:
    matchLabels:
      role: metadata-accessor
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 192.168.x.x/32   # IP do metadata
    ports:
    - protocol: TCP
      port: 80

Aplicar

kubectl apply -f metadata-deny.yaml
kubectl apply -f metadata-allow.yaml

Lembrete