第8章 ビルド時のネットワークポリシーツール
ビルド時のネットワークポリシーツールを使用すると、roxctl
CLI を使用した開発および運用ワークフローでの Kubernetes ネットワークポリシーの作成と検証を自動化できます。これらのツールは、プロジェクトのワークロードおよびネットワークポリシーマニフェストなど、指定されたファイルディレクトリーで動作し、RHACS 認証を必要としません。
コマンド | 説明 |
---|---|
| 指定されたディレクトリー内のプロジェクトの YAML マニフェストを分析することにより、Kubernetes ネットワークポリシーを生成します。詳細は、ビルド時のネットワークポリシージェネレーターの使用 を参照してください。 |
|
ワークロードと Kubernetes ネットワークポリシーマニフェストを調べて、プロジェクトディレクトリー内のワークロード間で許可されている接続をリスト表示します。出力は、さまざまなテキスト形式またはグラフィカルな |
|
2 つのプロジェクトバージョン間で許可される接続にバリエーションのリストを作成します。これは、ワークロードと各バージョンのディレクトリー内の Kubernetes ネットワークポリシーマニフェストによって決まります。この機能は、ソースコード (構文) に対して |
8.1. ビルド時のネットワークポリシージェネレーター
ビルド時のネットワークポリシージェネレーターは、アプリケーション YAML マニフェストに基づいて Kubernetes ネットワークポリシーを自動的に生成できます。これを使用して、クラスターにアプリケーションをデプロイする前に、継続的インテグレーション/継続的デプロイメント (CI/CD) パイプラインの一部としてネットワークポリシーを開発できます。
Red Hat は、NP-Guard プロジェクト の開発者と協力してこの機能を開発しました。まず、ビルド時のネットワークポリシージェネレーターは、ローカルフォルダー内の Kubernetes マニフェストを分析します。これには、サービスマニフェスト、config map、および Pod
、Deployment
、ReplicaSet
、Job
、DaemonSet
、StatefulSet
などのワークロードマニフェストが含まれます。次に、必要な接続を検出し、Pod の分離を実現するための Kubernetes ネットワークポリシーを作成します。これらのポリシーでは、必要なイングレスおよびエグレストラフィックをそれ以上も以下も許可しません。
8.1.1. ビルド時のネットワークポリシージェネレーターの使用
ビルド時のネットワークポリシージェネレーターは、roxctl
CLI に含まれています。ビルド時のネットワークポリシー生成機能の場合、roxctl
CLI は RHACS Central と通信する必要がないため、任意の開発環境で使用できます。
前提条件
-
ビルド時のネットワークポリシージェネレーターは、コマンドの実行時に指定したディレクトリーを再帰的にスキャンします。したがって、コマンドを実行する前に、サービスマニフェスト、config map、ワークロードマニフェスト (
Pod
、Deployment
、ReplicaSet
、Job
、DaemonSet
、StatefulSet
など) が、指定されたディレクトリーに YAML ファイルとしてすでに存在している必要があります。 -
kubectl apply -f
コマンドを使用して、これらの YAML ファイルを適用できることを確認します。ビルド時のネットワークポリシージェネレーターは、Helm スタイルのテンプレートを使用するファイルでは機能しません。 サービスネットワークアドレスがハードコーディングされていないことを確認します。サービスに接続する必要があるすべてのワークロードは、サービスネットワークアドレスを変数として指定する必要があります。この変数は、ワークロードのリソース環境変数を使用するか、config map で指定できます。
サービスネットワークアドレスは、次の公式の正規表現パターンに一致する必要があります。
(http(s)?://)?<svc>(.<ns>(.svc.cluster.local)?)?(:<portNum>)? 1
- 1
- このパターンでは、
- <svc> はサービス名
- <ns> はサービスを定義した namespace
- <portNum> は公開されたサービスのポート番号
以下は、パターンに一致するいくつかの例です。
-
wordpress-mysql:3306
-
redis-follower.redis.svc.cluster.local:6379
-
redis-leader.redis
-
http://rating-service.
手順
help コマンドを実行して、ビルド時のネットワークポリシー生成機能が使用可能であることを確認します。
$ roxctl netpol generate -h
netpol generate
コマンドを使用してポリシーを生成します。$ roxctl netpol generate <folder_path> [flags] 1
- 1
- フォルダーへのパスを指定します。フォルダーには、分析用の YAML リソースを含むサブフォルダーを含めることができます。このコマンドは、サブフォルダーツリー全体をスキャンします。オプションで、パラメーターを指定してコマンドの動作を変更することもできます。
次のステップ
- ポリシーを生成した後、関連するネットワークアドレスが YAML ファイルで期待どおりに指定されていない場合に備えて、ポリシーの完全性と正確性を検査する必要があります。
-
最も重要なことは、必要な接続が分離ポリシーによってブロックされていないことを確認することです。この検査には、
roxctl netpol 接続マップ
ツールを使用できます。
自動化を使用してワークロードデプロイメントの一部としてネットワークポリシーをクラスターに適用すると、時間を短縮し、正確さを確保できます。プルリクエストを使用して生成されたポリシーを送信すると、GitOps アプローチに使用でき、ポリシーをパイプラインの一部としてデプロイする前にチームはポリシーを確認する機会を得ることができます。