Nesta página, explicamos como configurar políticas de rede em todo o cluster para o Google Kubernetes Engine (GKE).
As políticas de rede e as políticas de rede FQDN ajudam a definir regras de tráfego de comunicação entre os pods. As políticas de rede controlam como os pods se comunicam entre si nos aplicativos e com endpoints externos.
Como administrador de cluster, é possível configurar as políticas de rede em todo o cluster Cilium (CCNP, na sigla em inglês), que superam as limitações da política de rede para gerenciar o tráfego administrativo em todo o cluster. As políticas de rede em todo o cluster Cilium aplicam regras de rede rígidas para todas as cargas de trabalho no cluster inteiro, em namespaces, substituindo quaisquer regras específicas de aplicativo.
A política de rede em todo o cluster Cilium para o GKE é uma CustomResourceDefinition (CRD) com escopo de cluster que especifica as políticas aplicadas pelo GKE. Ao ativar a política de rede em todo o cluster Cilium no GKE, é possível gerenciar de maneira centralizada regras de rede para todo o cluster. É possível controlar o acesso básico da camada 3 (nível do IP) e da camada 4 (no nível da porta) para o tráfego que entra e sai do cluster.
Benefícios
Com a política de rede em todo o cluster Cilium, você pode:
- Aplicar a segurança centralizada: com a CCNP, é possível definir regras de acesso que se aplicam à rede inteira. Essas regras da CCNP funcionam como uma camada de segurança de nível superior, substituindo qualquer política potencialmente conflitante no nível do namespace.
- Proteger a multilocação: se o cluster hospeda várias equipes ou locatários, é possível proteger o isolamento em um cluster compartilhado implementando regras CCNP, que se concentram no controle do tráfego de rede. É possível aplicar a separação no nível da rede atribuindo namespaces ou grupos de namespaces a equipes específicas.
- Definir políticas flexíveis padrão: com a CCNP, é possível definir regras de rede padrão o cluster inteiro. É possível personalizar essas regras quando necessário, sem comprometer a segurança geral do cluster.
Para implementar a CCNP, ative o GKE Dataplane V2 no seu cluster. Verifique se a CRD da CCNP está ativada e crie políticas que definam regras de acesso à rede para o cluster.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando
gcloud components update
.
Requisitos
As políticas de rede em todo o cluster Cilium têm os seguintes requisitos:
- Google Cloud CLI versão 465.0.0 ou mais recente.
- Você precisa ter um cluster do GKE executando uma das seguintes versões:
- 1.28.6-gke.1095000 ou mais recente.
- 1.29.1-gke.1016000 ou mais recente
- O cluster precisa usar o GKE Dataplane V2.
- Ative a CRD da política de rede em todo o cluster Cilium.
Limitações
As políticas de rede em todo o cluster Cilium têm as seguintes limitações:
- Não são compatíveis com as políticas da camada 7.
- Não aceitam seletores de nós.
- O número máximo de
CiliumClusterwideNetworkPolicy
por cluster é 1.000.
Ativar a política de rede em todo o cluster Cilium em um novo cluster
É possível ativar a política de rede em todo o cluster Cilium em um novo cluster usando a CLI do Google Cloud ou a API Google Kubernetes Engine.
gcloud
Para ativar a política de rede em todo o cluster Cilium em um novo cluster, crie um novo com a sinalização --enable-cilium-clusterwide-network-policy
.
Autopilot
gcloud container clusters create-auto CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy
Substitua:
CLUSTER_NAME
pelo nome do cluster.COMPUTE_LOCATION
pelo local do cluster.
Padrão
gcloud container clusters create CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy \
--enable-dataplane-v2
Substitua:
CLUSTER_NAME
pelo nome do cluster.COMPUTE_LOCATION
pelo local do cluster.
API
Para ativar a política de rede em todo o cluster Cilium, especifique as seguintes opções ao criar um novo cluster:
Campo datapathProvider
no objeto networkConfig
.
{
"cluster": {
...
"networkConfig": {
"datapathProvider": "ADVANCED_DATAPATH",
"enableCiliumClusterwideNetworkPolicy": true
}
}
}
Verifique se ciliumclusterwidenetworkpolicies.cilium.io
está presente na saída do seguinte comando:
kubectl get crds ciliumclusterwidenetworkpolicies.cilium.io
A saída será semelhante a esta:
ciliumclusterwidenetworkpolicies.cilium.io 2023-09-19T16:54:48Z
Ativar a política de rede em todo o cluster Cilium em um cluster atual
É possível ativar a política de rede em todo o cluster Cilium em um cluster atual usando a CLI do Google Cloud ou a API Google Kubernetes Engine.
gcloud
Verifique se o GKE Dataplane V2 está ativado no cluster.
gcloud container clusters describe CLUSTER_NAME \ --location COMPUTE_LOCATION \ --format="value(networkConfig.datapathProvider)" \
Substitua:
CLUSTER_NAME
pelo nome do cluster.COMPUTE_LOCATION
pelo local do cluster.
Atualize o cluster usando a sinalização
--enable-cilium-clusterwide-network-policy
.gcloud container clusters update CLUSTER_NAME \ --location COMPUTE_LOCATION \ --enable-cilium-clusterwide-network-policy
Reinicie o DaemonSet anetd.
kubectl rollout restart ds -n kube-system anetd && \ kubectl rollout status ds -n kube-system anetd
API
Verifique se o cluster está ativado para o GKE Dataplane V2:
{
"update": {
"desiredEnableCiliumClusterwideNetworkPolicy": true
},
"name": "cluster"
}
To update an existing cluster, run the following update cluster command:
{
"update": {
"desiredEnableCiliumClusterwideNetworkPolicy": true
}
"name": "cluster"
}
Verifique se ciliumclusterwidenetworkpolicies.cilium.io
está presente na saída do seguinte comando:
kubectl get crds ciliumclusterwidenetworkpolicies.cilium.io
A saída será semelhante a esta:
ciliumclusterwidenetworkpolicies.cilium.io 2023-09-19T16:54:48Z
Como usar a política de rede em todo o cluster Cilium
Nesta seção, listamos exemplos de configuração da política de rede em todo o cluster Cilium.
Exemplo 1: controlar o tráfego de entrada para uma carga de trabalho
O exemplo a seguir permite que todos os endpoints com o rótulo role=backend
aceitem conexões de entrada na porta 80 provenientes de endpoints com o rótulo role=frontend
. Os endpoints com o rótulo role=backend
rejeitarão todas as conexões de entrada que não sejam permitidas por essa política.
Salve o seguinte manifesto como
l4-rule-ingress.yaml
:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "l4-rule-ingress" spec: endpointSelector: matchLabels: role: backend ingress: - fromEndpoints: - matchLabels: role: frontend toPorts: - ports: - port: "80" protocol: TCP
Aplique o manifesto:
kubectl apply -f l4-rule-ingress.yaml
Exemplo 2: restringir o tráfego de saída de uma carga de trabalho em uma determinada porta
A regra a seguir limita todos os endpoints com o rótulo app=myService
para
apenas emitirem pacotes usando TCP na porta 80 para qualquer destino Camada 3:
Salve o seguinte manifesto como
l4-rule-egress.yaml
:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "l4-rule-egress" spec: endpointSelector: matchLabels: app: myService egress: - toPorts: - ports: - port: "80" protocol: TCP
Aplique o manifesto:
kubectl apply -f l4-rule-egress.yaml
Exemplo 3: restringir o tráfego de saída de uma carga de trabalho em uma determinada porta e CIDR
No exemplo a seguir, todos os endpoints com o rótulo role=crawler
são limitados para que apenas
possam enviar pacotes na porta 80, protocolos TCP, para um CIDR de destino
192.10.2.0/24
.
Salve o seguinte manifesto como
cidr-l4-rule.yaml
:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "cidr-l4-rule" spec: endpointSelector: matchLabels: role: crawler egress: - toCIDR: - 192.0.2.0/24 toPorts: - ports: - port: "80" protocol: TCP
Aplique o manifesto:
kubectl apply -f cidr-l4-rule.yaml
Como monitorar e solucionar problemas de tráfego de rede
É possível monitorar e resolver problemas do tráfego de rede afetado por políticas de rede em todo o cluster Cilium por meio da geração de registros de políticas de rede e observabilidade do GKE Dataplane V2.
Tentar usar políticas da camada 7 ou seletores de nós
Sintoma
Se você estiver usando o GKE com o GKE Dataplane V2 e tentar definir políticas CCNP que incluam regras da Camada 7 (por exemplo: filtragem HTTP) e seletores de nós, talvez veja uma mensagem de erro semelhante a esta:
Erro
Error from server (GKE Warden constraints violations): error when creating
"ccnp.yaml": admission webhook
"warden-validating.common-webhooks.networking.gke.io" denied the request: GKE
Warden rejected the request because it violates one or more constraints.
Violations details: {"[denied by gke-cilium-network-policy-limitation]":["L7
rules are not allowed in CiliumClusterwideNetworkPolicy"]} Requested by user:
'user@example.com', groups: 'system:authenticated'.
Possível causa
O GKE tem limitações específicas em CCNPs. As políticas da Camada 7, que permitem filtrar com base em dados no nível do aplicativo (como cabeçalhos HTTP) e seletores de nós não são compatíveis com a integração Cilium do GKE.
Resolução
Se você precisar de recursos avançados de filtragem da Camada 7 no cluster do GKE, considere usar o Cloud Service Mesh. Ele proporciona um controle de tráfego mais granular no nível do aplicativo.
Política de rede em todo o cluster Cilium não ativada
Sintoma
Ao tentar configurar políticas de rede em todo o cluster Cilium (CCNP) em um cluster em que o recurso não foi ativado explicitamente, não será possível configurá-lo e você talvez veja uma mensagem de erro semelhante a esta:
Erro
error: resource mapping not found for name: "l4-rule" namespace: "" from
"ccnp.yaml": no matches for kind "CiliumClusterwideNetworkPolicy" in version
"cilium.io/v2" ensure CRDs are installed first
Possível causa
As políticas de rede em todo o cluster Cilium dependem de uma definição de recurso personalizada (CRD, na sigla em inglês). A mensagem de erro indica a falta de uma CRD no cluster.
Resolução
Ative a CRD da política de rede em todo o cluster Cilium antes de usar CCNPs.