Configurer des règles de réseau Kubernetes

Cet article explique comment utiliser les règles de réseau Kubernetes pour sécuriser les pods Cassandra et Redis dans un cluster Apigee hybrid.

Présentation

Lorsque vous souhaitez contrôler le flux de trafic au niveau de l'adresse IP ou du port (couche 3 ou 4 du modèle OSI), vous pouvez utiliser les règles de réseau Kubernetes pour les applications de votre cluster. Les règles de réseau sont une construction centrée sur les applications que vous pouvez utiliser pour spécifier comment un pod est autorisé à communiquer avec d'autres pods de votre cluster.

Dans Apigee hybrid, vous pouvez utiliser les règles de réseau Kubernetes pour isoler les pods Cassandra afin que seuls les pods destinés à communiquer avec Cassandra, tels que les pods d'exécution, de synchronisation et MART, y soient autorisés. La communication avec Cassandra est bloquée pour les autres pods du cluster, tels que les pods d'entrée et d'observation, qui n'en ont pas besoin.

Si vous n'avez aucune restriction quant aux pods pouvant interagir au sein de votre cluster, vous n'avez pas besoin d'utiliser les règles de réseau Kubernetes.

Prérequis

Procédure

Si vous exécutez la version 1.8.x d'Apigee hybrid, téléchargez et extrayez le dernier package de version Apigee.

Linux

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

macOS

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

Les fichiers de configuration des règles de réseau Kubernetes pour Cassandra et Redis se trouvent dans la structure des répertoires ci-dessous au sein de votre répertoire $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

ORG_NAME est le nom de votre organisation Apigee.

  1. Attribuez une étiquette aux espaces de noms à l'aide de la commande suivante :
    kubectl label namespace apigee app=apigee
    kubectl label namespace apigee-system app=apigee-system
  2. Appliquez les règles de réseau à l'aide de la commande suivante :
    kubectl apply -k ${APIGEECTL_HOME}/examples/network-policies/securing-cassandra-redis-pods/overlays/ORG_NAME
  3. Vérifiez que les règles de réseau ont été appliquées à l'aide de la commande suivante :
    kubectl get netpol -n apigee

    Les règles de réseau suivantes doivent être créées dans l'espace de noms 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