設定 Kubernetes 網路政策

本主題說明如何使用 Kubernetes 網路政策,保護 Apigee Hybrid 叢集內的 Cassandra 和 Redis Pod。

總覽

如要以 IP 位址或通訊埠層級 (OSI 層級 3 或 4) 控管流量,您可以為叢集中的應用程式使用 Kubernetes 網路政策。網路政策是一種以應用程式為中心的建構,可用來指定 Pod 如何與叢集中的其他 Pod 通訊。

在 Apigee hybrid 中,您可以使用 Kubernetes Network Policy 隔離 Cassandra pod,這樣一來,只有與 Cassandra 通訊的 pod 才會允許通訊,例如 Runtime、Synchronizer 和 Mart pod。叢集中的其他 Pod (例如 Ingres 和 Watcher Pod) 不需要與 Cassandra 通訊,因此會遭到封鎖。

如果您不限制叢集中的 Pod 可以互動,則不需要使用 Kubernetes 網路政策。

先決條件

程序

如果您執行的是混合型 1.8.x 版本,請下載並解壓縮最新的 Apigee 版本套件。

Linux

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

Mac OS

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

Windows

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

Cassandra 和 Redis 的 Kubernetes 網路政策設定檔位於 $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 是 Apigee 機構的名稱。

  1. 使用下列指令為命名空間加上標籤:
    kubectl label namespace apigee app=apigee
    kubectl label namespace apigee-system app=apigee-system
  2. 使用下列指令套用聯播網政策:
    kubectl apply -k ${APIGEECTL_HOME}/examples/network-policies/securing-cassandra-redis-pods/overlays/ORG_NAME
  3. 請使用下列指令驗證網路政策是否已套用:
    kubectl get netpol -n apigee

    請在 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