Restrinja o tráfego de pods com network policies e criptografe dados em trânsito para proteger clusters ACK.
Network policies versus security groups
Network policies e security groups atuam em níveis diferentes. Use ambos em conjunto para garantir defesa em profundidade.
|
Mecanismo |
Escopo |
Mais indicado para |
|
Network policies |
Tráfego pod a pod (tráfego leste-oeste) e comunicação entre pods e serviços externos |
Restringir a comunicação entre microsserviços, namespaces ou pods específicos |
|
Security groups |
Tráfego no nível de nó e de Virtual Private Cloud (VPC) entre nós, outros recursos da VPC e endereços IP externos |
Controlar o acesso de entrada e saída do cluster na camada de infraestrutura |
Use security groups para restringir o acesso no nível de infraestrutura e network policies para aplicar isolamento granular no nível de pod dentro do cluster.
Restrinja o tráfego pod a pod com network policies
Por padrão, todos os pods em um cluster Kubernetes podem se comunicar livremente, o que gera riscos de segurança. Network policies restringem o tráfego entre pods (tráfego leste-oeste) e entre pods e serviços externos.
Essas políticas usam seletores de pod e rótulos para identificar os pods de origem e destino. Cada política pode filtrar por endereço IP, porta, protocolo ou qualquer combinação desses elementos.
Com o plug-in de rede Terway, use use network policies para controlar o tráfego no nível de endereço IP ou porta. Consulte também Kubernetes Network Policy Recipes.
Apenas clusters Terway suportam network policies do Kubernetes. Em clusters com mais de 100 nós, o proxy de política pode aumentar a carga no plano de controle. Consulte Improve the performance of the NetworkPolicy feature for a large ACK cluster in Terway mode.
Abordagem recomendada: negar por padrão e permitir depois
Aplique o princípio de privilégio mínimo: negue todo o tráfego por padrão e adicione regras para permitir apenas o que cada carga de trabalho necessita.
Crie uma política de negação padrão -- Bloqueie todo o tráfego de entrada e saída no namespace.
Permita consultas DNS -- Os pods precisam de resolução DNS para funcionar.
Libere tráfegos específicos -- Abra apenas os caminhos exigidos por cada carga de trabalho.
Etapa 1: Crie uma política de negação padrão
Crie uma network policy para negar todo o tráfego de entrada e saída em um namespace ou use o Calico para uma política global.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
Etapa 2: Permitir consultas DNS
Com uma política de negação padrão, os pods não conseguem resolver nomes DNS. Crie uma política para permitir consultas DNS ao CoreDNS.
-
Adicione um rótulo ao namespace
kube-system:kubectl label namespace kube-system name=kube-system -
Crie uma network policy para permitir o tráfego de saída (egress) para o CoreDNS na porta UDP 53:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-access namespace: default spec: podSelector: matchLabels: {} policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: kube-system ports: - protocol: UDP port: 53
Consulte Network Policies.
Etapa 3: Permitir tráfego de pods específicos
Com as políticas de negação e DNS configuradas, permita o tráfego apenas de pods autorizados. Casos de uso comuns incluem:
Permitir que apenas microsserviços específicos acessem uma aplicação.
Restringir o acesso a um banco de dados a determinadas aplicações.
Este exemplo cria um pod e restringe o tráfego de entrada (ingress) aos pods com o rótulo app: bookstore.
-
Crie um pod com os rótulos
app=bookstoreerole=api:kubectl run apiserver --image=nginx --labels="app=bookstore,role=api" --expose --port=80 -
Aplique uma network policy que permita o tráfego de entrada apenas de pods com o rótulo
app: bookstore:kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: api-allow spec: podSelector: matchLabels: app: bookstore role: api ingress: - from: - podSelector: matchLabels: app: bookstore -
Verifique se os pods sem o rótulo
app=bookstoretêm o acesso negado:kubectl run test-$RANDOM --rm -i -t --image=alpine -- sh/ # wget -qO- --timeout=2 http://apiserver wget: download timed out -
Confirme que os pods com o rótulo
app=bookstoreconseguem acessar o servidor:kubectl run test-$RANDOM --rm -i -t --image=alpine --labels="app=bookstore,role=frontend" -- sh/ # wget -qO- --timeout=2 http://apiserver <!DOCTYPE html> <html><head>
Adicionar regras personalizadas entre pods em um namespace
Após permitir a comunicação entre pods dentro de um namespace, use o Kubernetes Network Policy Recipes para adicionar regras personalizadas e obter um controle mais granular.
Controle o tráfego no nível de nó com security groups
O ACK usa security groups para gerenciar o tráfego entre nós master e worker, bem como entre nós worker, outros recursos da VPC e endereços IP externos.
O ACK cria automaticamente um security group para a comunicação dos nós quando você cria um cluster. Para aplicar o princípio de privilégio mínimo, adicione recommended inbound and outbound rules.
Consulte Configure security groups in different scenarios e Configure a security group.
Monitore e analise o tráfego com flow logs
Os flow logs da VPC registram o tráfego de entrada e saída das elastic network interfaces (ENIs). Use os flow logs para:
Validar regras de lista de controle de acesso (ACL)
Monitorar o tráfego de rede
Solucionar problemas de rede
Identificar tráfego anormal entre recursos (incluindo pods) em uma VPC
Consulte Overview of flow logs.
Criptografe dados em trânsito
-
Service Mesh (ASM)
O Service Mesh (ASM) criptografa dados entre serviços. O ASM suporta:
Autenticação Mutual Transport Layer Security (mTLS) entre serviços
Envoy Secret Discovery Service (SDS) para HTTPS e carregamento dinâmico de certificados nos gateways de serviço
Gerenciamento de tráfego para aplicações em instâncias do ASM, integrado ao Application High Availability Service (AHAS)
Rastreamento distribuído integrado ao Tracing Analysis para mapeamento de rastros, contagem de chamadas, topologia e análise de dependências
-
TLS for Ingress
Ative HTTPS para serviços expostos via Ingress. Use a Secret to configure TLS.