Kubernetes ネットワーク ポリシーの構成

このトピックでは、Kubernetes ネットワーク ポリシーを使用して、Apigee ハイブリッド クラスタ内で Cassandra Pod と Redis Pod を保護する方法について説明します。

概要

IP アドレスレベルまたはポートレベル(OSI レイヤ 3 または 4)でトラフィック フローを制御する場合は、クラスタ内のアプリケーションに Kubernetes ネットワーク ポリシーを使用できます。ネットワーク ポリシーは、アプリケーションを中心とした構造で、Pod がクラスタ内の他の Pod と通信する方法を指定するのに使用できます。

Apigee ハイブリッドでは、Kubernetes ネットワーク ポリシーを使用して Cassandra Pod を分離し、ランタイム、Synchronizer、Mart Pod などの Cassandra との通信を目的とした Pod のみを許可できます。Cassandra との通信を必要としない Ingres や Watcher の Pod など、クラスタ内の他の Pod は通信がブロックされます。

クラスタ内で通信できる Pod に制限がない場合は、Kubernetes ネットワーク ポリシーを使用する必要はありません。

前提条件

手順

ハイブリッド バージョン 1.8.x を実行している場合は、最新の 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

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. 次のコマンドを使用して、Namespace にラベルを付けます。
    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 Namespace に作成する必要があります。

          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