Detalhamento de NetworkPolicy nativa do Kubernetes para o CKS.
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.
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.
Para que só 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
kubectl apply -f metadata-deny.yaml
kubectl apply -f metadata-allow.yaml