Kubernetes-Netzwerkrichtlinien konfigurieren

In diesem Thema wird erläutert, wie Sie Cassandra- und Redis-Pods mithilfe von Kubernetes-Netzwerkrichtlinien in einem Apigee Hybrid-Cluster schützen.

Übersicht

Wenn Sie den Trafficfluss auf IP-Adressen- oder Portebene (OSI-Ebene 3 oder 4) steuern möchten, können Sie Kubernetes-Netzwerkrichtlinien für Anwendungen in Ihrem Cluster verwenden. Netzwerkrichtlinien sind ein anwendungsorientiertes Konstrukt, mit dem Sie angeben können, wie ein Pod mit anderen Pods in Ihrem Cluster kommunizieren darf.

In Apigee Hybrid können Sie Kubernetes-Netzwerkrichtlinien verwenden, um Cassandra-Pods zu isolieren, sodass nur Pods, die mit Cassandra kommunizieren sollen, zulässig sind, z. B. die Runtime-, Synchronizer- und Mart-Pods. Andere Pods im Cluster wie Ingres- und Watcher-Pods, die nicht mit Cassandra kommunizieren müssen, werden daran gehindert.

Wenn Sie keine Einschränkungen für die Interaktion von Pods in Ihrem Cluster haben, müssen Sie keine Kubernetes-Netzwerkrichtlinien verwenden.

Vorbereitung

Vorgehensweise

Wenn Sie die Hybrid-Version 1.8.x ausführen, laden Sie das neueste Apigee-Releasepaket herunter und extrahieren Sie es.

Linux

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

Mac OS

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

Windows

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

Die Konfigurationsdateien für die Kubernetes-Netzwerkrichtlinien für Cassandra und Redis befinden sich in der folgenden Verzeichnisstruktur in Ihrem $APIGEECTL_HOME-Verzeichnis:

  └── 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

Dabei ist ORG_NAME der Name Ihrer Apigee-Organisation.

  1. Versehen Sie die Namespaces mit einem Label. Führen Sie dazu den folgenden Befehl aus:
    kubectl label namespace apigee app=apigee
    kubectl label namespace apigee-system app=apigee-system
  2. Wenden Sie die Netzwerkrichtlinien mit dem folgenden Befehl an:
    kubectl apply -k ${APIGEECTL_HOME}/examples/network-policies/securing-cassandra-redis-pods/overlays/ORG_NAME
  3. Prüfen Sie mit dem folgenden Befehl, ob die Netzwerkrichtlinien angewendet wurden:
    kubectl get netpol -n apigee

    Die folgenden Netzwerkrichtlinien sollten im Namespace apigee erstellt werden:

          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