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
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.
Permitir clientes e monitoramento
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
ENABLE_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 que o chart do Helm cria
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
NetworkPolicy 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
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
namespaceSelector, 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).
- 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.