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

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

概要

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

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

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

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. デフォルトの Compute Engine ゾーンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト 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

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

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

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

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

GKE クラスタでネットワーク ポリシーの提供を有効にすると、GKE はそのクラスタ内でネットワーク ポリシーを管理し、適用します。

gcloud ツール、Google Cloud Console、または GKE REST API を使用して、GKE でネットワーク ポリシーの適用を有効にできます。

gcloud

クラスタの作成時にネットワーク ポリシーの適用を有効にするには、次のコマンドを実行します。

gcloud container clusters create cluster-name --enable-network-policy

既存のクラスタに対してネットワーク ポリシーの適用を有効にするには、次のタスクを実行します。

  1. 次のコマンドを実行して、アドオンを有効にします。

    gcloud container clusters update cluster-name --update-addons=NetworkPolicy=ENABLED
  2. 次のコマンドを実行してクラスタでネットワーク ポリシーの適用を有効にします。これにより、ネットワーク ポリシーの適用が有効に設定されて、クラスタのノードプールが再作成されます。

    gcloud container clusters update cluster-name --enable-network-policy

Console

新しいクラスタの作成時にネットワーク ポリシーの適用を有効にするには、次のようにします。

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

    Google Kubernetes Engine のメニューに移動

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

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

  4. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  5. [ネットワーク ポリシーを有効にする] チェックボックスを選択します。

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

既存のクラスタに対するネットワーク ポリシーの適用を有効にするには、次の手順に従います。

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

    Google Kubernetes Engine のメニューに移動

  2. ネットワーク ポリシーを適用するクラスタをクリックします。

  3. 鉛筆アイコンの横にある [編集] をクリックします。

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

  5. [保存] をクリックし、クラスタが更新されたらもう一度 [編集] をクリックします。

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

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

API

ネットワーク ポリシーの適用を有効にするには、次のようにします。

  1. projects.zones.clusters.create または projects.zones.clusters.update に渡す cluster オブジェクト内に networkPolicy オブジェクトを指定します。

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

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

gcloud ツール、Google Cloud Console、または GKE API を使用して、ネットワーク ポリシーの適用を無効にできます。

gcloud

既存のクラスタに対するネットワーク ポリシーの適用を無効にするには、次のコマンドを実行します。

gcloud container clusters update cluster-name --no-enable-network-policy

Console

既存のクラスタに対するネットワーク ポリシーの適用を無効にするには、次のようにします。

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

    Google Kubernetes Engine のメニューに移動

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

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

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

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

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

API

既存のクラスタに対するネットワーク ポリシーの適用を無効にするには、次のようにします。

  1. projects.zones.clusters.update に渡す cluster オブジェクト内に networkPolicy オブジェクトを指定します。
  2. networkPolicy オブジェクト内のブール値 enabledfalse に設定します。

ネットワーク ポリシーの適用を無効にする場合は、アドオン(Calico DaemonSet など)も更新して、ネットワーク ポリシーをアドオンに対しても無効にします。

gcloud container clusters update cluster-name --update-addons=NetworkPolicy=DISABLED

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

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

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

PodSecurityPolicy の操作

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

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

問題や異常な状況が発生した場合に、クラスタに対するネットワーク ポリシーの適用を一時的に無効にできます。

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

  • ネットワーク ポリシーの適用を有効にすると、ノードで追加のリソースが消費されます。具体的には、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 からの接続も許可する必要があります。

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

次のステップ