クラスタ ネットワーク ポリシーの作成

このページでは、Kubernetes Engine でネットワーク ポリシーを構成する方法を説明します。GKE ネットワーキングに関する一般的な情報については、ネットワークの概要をご覧ください。

概要

GKE のネットワーク ポリシーを適用することで、クラスタのポッドとサービス間の通信を制御できます。GKE でネットワーク ポリシーを定義するには、Kubernetes ネットワーク ポリシー API を使用してポッドレベルのファイアウォール ルールを作成します。これらのファイアウォール ルールは、クラスタ内でどのポッドとサービスが相互にアクセスできるかを決定します。

ネットワーク ポリシーを定義すると、クラスタがマルチレベルのアプリケーションを処理するときに多層防御のような機能を有効にすることができます。たとえば、アプリケーション内の不正使用されたフロントエンド サービスが数レベル下の課金サービスや会計サービスと直接通信できないようにするネットワーク ポリシーを作成することができます。

ネットワーク ポリシーを使用して、複数のユーザーが生成したデータを同時にホストするアプリケーションをより簡単に作成することもできます。たとえば、テナント単位の名前空間モデルを定義して、セキュアなマルチテナンシーを提供できます。このようなモデルでは、ネットワーク ポリシー ルールにより、特定の名前空間内のポッドやサービスが異なる名前空間内の他のポッドやサービスにアクセスできないようにすることができます。

始める前に

このタスクの準備として、次の手順を行います。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Cloud SDK がインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud を最新バージョンに更新します。
    gcloud components update

ネットワーク ポリシーの適用を使用する

ネットワーク ポリシーの適用を有効または無効にするには、gcloud コマンドライン ツール、GKE REST API、または Google Cloud Platform Console を使用できます。

クラスタのネットワーク ポリシーを有効にした後は、Kubernetes ネットワーク ポリシー API を使用してネットワーク ポリシーを作成できます。

ネットワーク ポリシーの適用は、GKE クラスタの作成時に有効にすることも、既存のクラスタに対して有効にすることもできます。また、既存のクラスタに対するネットワーク ポリシーを無効にすることもできます。

ネットワーク ポリシーの適用を有効にする

gcloud

gcloud コマンドライン ツールを使用して新しいクラスタを作成する際にネットワーク ポリシーの適用を有効にするには、--enable-network-policy フラグを指定した gcloud container clusters create コマンドを実行します。

gcloud container clusters create [CLUSTER_NAME] --enable-network-policy

gcloud コマンドライン ツールを使用して既存のクラスタに対するネットワーク ポリシーの適用を有効にするには、次の 2 つの手順を行います。まず、--update-addons フラグを指定した gcloud container clusters update コマンドを実行します。

gcloud container clusters update [CLUSTER_NAME] --update-addons=NetworkPolicy=ENABLED

次に、--enable-network-policy フラグを指定した gcloud container clusters update コマンドを実行します。このコマンドを実行すると、ネットワーク ポリシーを有効にしてクラスタのノードプールが再作成されます。

gcloud container clusters update [CLUSTER_NAME] --enable-network-policy

Console

  1. GCP Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューにアクセスする

  2. [クラスタを作成] をクリックします。

  3. 必要に応じてクラスタを構成します。

  4. [詳細オプション] をクリックします。[ネットワーキング] セクションで、[ネットワーク ポリシーを有効にする] をオンにします。

  5. [作成] をクリックします。

API

GKE API を使用してネットワーク ポリシーを有効にするには、projects.zones.clusters.create または projects.zones.clusters.update に渡す cluster オブジェクト内に networkPolicy オブジェクトを指定します。

networkPolicy オブジェクトには、使用するネットワーク ポリシー プロバイダを指定する列挙値と、ネットワーク ポリシーを有効にするかどうかを指定するブール値が必要です。ネットワーク ポリシーを有効にしてもプロバイダを設定しないと、create コマンドと update コマンドはエラーを返します。現在有効なプロバイダ値は CALICO だけです。

ネットワーク ポリシーの適用を無効にする

gcloud

gcloud コマンドライン ツールを使用して既存のクラスタに対するネットワーク ポリシーの適用を無効にするには、--no-enable-network-policy フラグを指定して gcloud container clusters update コマンドを実行します。

gcloud container clusters update [CLUSTER_NAME] --no-enable-network-policy

Console

  1. GCP Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. クラスタの [編集] ボタンをクリックします。これは鉛筆のような形をしています。

  3. [ノードのネットワーク ポリシー] プルダウン メニューから、[無効] を選択します。

  4. [保存] をクリックします。次に、[編集] を再度クリックします。

  5. [マスターのネットワーク ポリシー] プルダウン メニューから、[無効] を選択します。

  6. [保存] をクリックします。

API

GKE API を使用して既存のクラスタに対するネットワーク ポリシーの適用を無効にするには、projects.zones.clusters.update に渡す cluster オブジェクト内に networkPolicy オブジェクトを指定します。networkPolicy オブジェクト内のブール値 enabledfalse に設定します。

ネットワーク ポリシーを作成する

クラスタに対するネットワーク ポリシーの適用を有効にした後は、実際のネットワーク ポリシーを定義する必要があります。ネットワーク ポリシーは、Kubernetes ネットワーク ポリシー API を使用して定義します。

ネットワーク ポリシーの作成について詳しくは、Kubernetes ドキュメントの次のトピックをご覧ください。

PodSecurityPolicy を操作する

NetworkPolicy を使用していて、PodSecurityPolicy の対象となるポッドがある場合は、PodSecurityPolicy を使用する権限を持つ RBAC 役割または ClusterRole を作成します。その後、役割または ClusterRole をポッドのサービス アカウントにバインドします。この場合、ユーザー アカウントに権限を付与するだけでは不十分です。詳細については、ポリシーの承認をご覧ください。

ネットワーク ポリシーを一時的にオーバーライドする

問題や異常な状況が発生した場合に、クラスタに対するネットワーク ポリシーの適用を一時的に無効にすることができます。詳しくは、Calico ポリシーのオーバーライドに関する Tigera 社のドキュメントをご覧ください。

オーバーヘッド、制限事項、および注意事項

  • ネットワーク ポリシーの適用を有効にすると、ノードで追加のリソースが消費されます。具体的には、kube-system プロセスのメモリ フットプリントが約 128 MB 増加し、約 300 ミリコアの CPU が必要になります。
  • ネットワーク ポリシーの適用を有効にする場合、ノードの再作成が必要になります。クラスタのメンテナンス時間枠が有効になっている場合、次のメンテナンス時間枠でノードが自動的に再作成されます。必要に応じて、いつでも手動でクラスタをアップグレードできます。

制限事項と要件

  • クラスタ内に n1-standard-1 以上のノードが少なくとも 2 つ必要です。ネットワーク ポリシーの適用を行うために推奨されるクラスタの最小サイズは、3 つの n1-standard-1 インスタンスです。
  • ノードが f1-micro または g1-small インスタンスであるクラスタでは、そのサイズに対してリソース要件が高すぎるため、ネットワーク ポリシーはサポートされません。

ノードマシンのタイプと割り当て可能なリソースについて詳しくは、クラスタのアーキテクチャ - ノードをご覧ください。

HTTP(S) ロードバランサのヘルスチェックを操作する

HTTP(S) ロードバランサを構築するために Ingress がサービスに適用される場合、そのサービスの背後にあるポッドに適用されるネットワーク ポリシーでは、適切な HTTP(S) ロードバランサ プローブの IP 範囲も許可する必要があります。

さらに、サービスのノードポートは他のノードのポッドに接続を転送できます(サービス定義で externalTrafficPolicy を「Local」に設定して転送できない場合を除く)。externalTrafficPolicyLocal に設定されていない場合、ネットワーク ポリシーではクラスタ内の他のノード IP からの接続も許可する必要があります。

この説明は、ネットワーク エンドポイント グループでコンテナ ネイティブの負荷分散を使用する場合には適用されません。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...