配置 Kubernetes 网络政策

本主题介绍如何使用 Kubernetes 网络政策来保护 Apigee Hybrid 集群中的 Cassandra 和 Redis pod。

概览

如果要控制 IP 地址或端口级别的流量(OSI 第 3 层或第 4 层),则可以将 Kubernetes 网络政策用于集群中的应用。网络政策是以应用为中心的构造,可用于指定 Pod 如何与集群中的其他 Pod 通信。

在 Apigee Hybrid 中,您可以使用 Kubernetes 网络政策隔离 Cassandra Pod,以便仅允许与 Cassandra 通信的 Pod(例如运行时、同步器和 Mart Pod)。集群中不需要与 Cassandra 通信的其他 Pod(例如 Ingress 和 Watcher Pod)将被阻止执行此操作。

如果您对集群内的哪些 Pod 没有任何限制,则无需使用 Kubernetes 网络政策。

前提条件

过程

如果您运行的是 Hybrid 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