NetworkPolicy do Kubernetes em dois níveis, ambos
desabilitados por padrão:
- Políticas de cluster — políticas por cluster que abrangem o tráfego interno dos
recursos
ClickHouseClustereKeeperCluster, habilitadas por meio despec.networkPolicyem cada recurso personalizado. - Políticas de pod do Kubernetes do operator — políticas fornecidas pelo chart que restringem o tráfego de entrada para o próprio pod do Kubernetes do controller manager nos endpoints de métricas e webhook.
Uma
NetworkPolicy só é aplicada quando o plugin de CNI do cluster a implementa
(por exemplo, Calico ou Cilium). Em uma CNI sem suporte à aplicação de NetworkPolicy, os
recursos são criados, mas não têm efeito, sem qualquer aviso — o Kubernetes não retorna
erro. Confirme que sua CNI aplica políticas antes de depender delas.NetworkPolicies do cluster
Habilite a política gerenciada em cada cluster:
Um keeper admite clusters do ClickHouse com base em seu
keeperClusterRef — adicionar
ou remover uma referência atualiza automaticamente a política do keeper, inclusive
referências de outros espaços de nomes. Clusters que usam externalKeeper nunca são
admitidos, mesmo que seus nós apontem para os pods do keeper.
Permitir clientes e monitoramento
As conexões de clientes e a coleta de métricas não são contempladas: com a política gerenciada habilitada, nada pode acessar as portas de cliente (9000/8123 ou as
variantes TLS) nem a porta de métricas até que você as permita. As NetworkPolicies são cumulativas;
portanto, conceda acesso com sua própria política ao lado da política gerenciada:
9363 no ClickHouse,
9090 no Keeper) — permita explicitamente o acesso do seu espaço de nomes de monitoramento.
Definir networkPolicy.policy: Disabled (o padrão) remove a política gerenciada;
as políticas definidas pelo usuário nunca são alteradas pelo operator, a menos que
tenham o rótulo app do cluster.
Desativação em todo o cluster
O gerenciamento de NetworkPolicy também pode ser desabilitado em todo o cluster por meio da variável de ambienteENABLE_NETWORK_POLICY do operator. Com ENABLE_NETWORK_POLICY=false,
o operator ignora a etapa de reconciliação de NetworkPolicy para todos os
ClickHouseCluster e KeeperCluster, independentemente de spec.networkPolicy.policy,
e não observa recursos NetworkPolicy. Portanto, o
ServiceAccount do operator não precisa de permissões RBAC em
networkpolicies.networking.k8s.io, o que é útil ao executar o operator
com um ServiceAccount restrito que deliberadamente não tem essas permissões.
Políticas de pod do Kubernetes do operator
O chart também fornece políticas opcionais que restringem quais tráfegos podem alcançar o pod do Kubernetes do controller manager — o próprio processo do operator. Elas abrangem as duas portas que o operator expõe a outros clientes: o endpoint de métricas e o admission webhook.O que o chart do Helm cria
Quando habilitado, o chart cria até duas políticas somente de entrada, ambas selecionando o pod do controller-manager:
Ambas as políticas declaram apenas
policyTypes: [Ingress]. Elas não restringem o tráfego de saída
do operator e não afetam os pods do servidor ClickHouse nem do Keeper.
Comportamento de bloqueio por padrão
Ao selecionar um pod do Kubernetes com umaNetworkPolicy de entrada, esse pod do Kubernetes passa a ter bloqueio
por padrão para tráfego de entrada: assim que qualquer uma das políticas se aplica, todo tráfego de entrada para o
pod do Kubernetes do controller manager que não seja explicitamente permitido é descartado. Depois de habilitadas,
o único tráfego de entrada que chega ao operator é:
- uma coleta de métricas de um espaço de nomes com o rótulo
metrics: enabled, e - uma chamada de admission webhook de um espaço de nomes com o rótulo
webhook: enabled.
Habilitando as políticas
Com o Helm, defina o gate em seus values:allow-webhook-traffic também requer webhook.enabled: true (o
valor padrão), então desabilitar o webhook também remove a política dele.
Com os manifests brutos do kubectl, descomente a seção [NETWORK POLICY] conforme
descrito no guia de instalação do kubectl.
Os manifests brutos incluem as mesmas duas políticas.
Rotulando espaços de nomes de cliente
Como ambas as políticas correspondem à origem por meio denamespaceSelector, todo espaço de nomes
que precisa se comunicar com o operator deve ter o rótulo correspondente. Uma coleta ou
uma chamada de webhook de um espaço de nomes sem rótulo é descartado.
NetworkPolicy controla o alcance, enquanto a vinculação da Função de cluster controla
a autorização. Ambos precisam estar em vigor para que uma coleta protegida funcione.
Verificação
- O Prometheus ainda coleta o endpoint de métricas (seu espaço de nomes está rotulado com
metrics: enablede associado à Função de cluster metrics-reader). - Criar ou atualizar um
ClickHouseClusterainda passa pela admissão (o webhook está acessível).
Guias relacionados
- Monitorando o operator — o endpoint de métricas, seu RBAC e como proteger a coleta.
- Instalar com kubectl — onde descomentar a seção de política de rede.
- Instalar com Helm — os values do chart relevantes para o operator.