Como configurar políticas de rede do Kubernetes

Neste tópico, explicamos como usar as políticas de rede do Kubernetes para proteger os pods do Cassandra e do Redis em um cluster da Apigee híbrida .

Visão geral

Quando quiser controlar o fluxo de tráfego no nível do endereço IP ou da porta (camada 3 ou 4 de OSI), use as políticas de rede do Kubernetes para aplicativos no cluster. As políticas de rede são uma construção centrada em aplicativos que podem ser usadas para especificar como um pod pode se comunicar com outros pods no cluster.

Na Apigee híbrida, é possível usar políticas de rede do Kubernetes para isolar pods do Cassandra para que somente os pods que se destinam a se comunicar com o Cassandra sejam permitidos, como os pods de ambiente de execução, Synchronizer e Mart. Outros pods no cluster, como os pods Ingres e Watcher, que não precisam se comunicar com o Cassandra, estão bloqueados para fazer isso.

Se você não tiver restrições sobre quais pods podem interagir no cluster, não será necessário usar políticas de rede do Kubernetes.

Pré-requisitos

Procedimento

Se você estiver executando a versão híbrida 1.8.x, faça o download e extraia o pacote de lançamento mais recente da Apigee.

Linux

curl -LO \
  https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.12.0/apigeectl_linux_64.tar.gz

Mac OS

curl -LO \
  https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.12.0/apigeectl_mac_64.tar.gz

Windows

curl -LO ^
   https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.12.0/apigeectl_windows_64.zip

Os arquivos de configuração para as políticas de rede do Kubernetes para o Cassandra e o Redis estão na seguinte estrutura de diretórios no diretório $APIGEECTL_HOME:

  └── apigeectl
      └── examples
          └── network-policies
              └── securing-cassandra-redis-pods
                  ├── README.md
                  ├── base
                  │   └── cluster-scoped-communication
                  │       ├── cassandra
                  │       │   ├── kustomization.yaml
                  │       │   ├── networkpolicy-cassandra-allow-controller.yaml
                  │       │   ├── networkpolicy-cassandra-allow-intranode.yaml
                  │       │   ├── networkpolicy-cassandra-allow-mart.yaml
                  │       │   ├── networkpolicy-cassandra-allow-runtime.yaml
                  │       │   ├── networkpolicy-cassandra-alow-sync.yaml
                  │       │   ├── networkpolicy-cassandra-create-user.yaml
                  │       │   ├── networkpolicy-cassandra-monitoring.yaml
                  │       │   └── networkpolicy-cassandra-remove-dc.yaml
                  │       └── redis
                  │           ├── kustomization.yaml
                  │           ├── networkpolicy-redis-envoy.yaml
                  │           └── networkpolicy-redis.yaml
                  └── overlays
                      └── ORG_NAME
                          └── kustomization.yaml

Em que ORG_NAME é o nome da organização da Apigee.

  1. Rotule os namespaces com o seguinte comando:
    kubectl label namespace apigee app=apigee
    kubectl label namespace apigee-system app=apigee-system
  2. Aplique as políticas de rede com o seguinte comando:
    kubectl apply -k ${APIGEECTL_HOME}/examples/network-policies/securing-cassandra-redis-pods/overlays/ORG_NAME
  3. Valide se as políticas de rede foram aplicadas com o seguinte comando:
    kubectl get netpol -n apigee

    As seguintes políticas de rede precisam ser criadas no namespace apigee:

          NAME                        POD-SELECTOR              AGE
          cassandra-from-mart         app=apigee-cassandra      4d5h
          cassandra-from-runtime      app=apigee-cassandra      4d5h
          cassandra-from-sync         app=apigee-cassandra      4d5h
          cassandra-to-cassandra      app=apigee-cassandra      4d5h
          controller-to-cassandra     app=apigee-cassandra      4d5h
          redis-from-redisenvoy       app=apigee-redis          3d18h
          redisenvoy-from-runtime     app=apigee-redis-envoy    3d18h