ネットワーク ポリシーを設定する

Kf は Kubernetes や Istio と緊密に統合されており、堅牢なネットワーク ポリシーの適用を可能にします。

デフォルトでは、Kf ワークロードは Kubernetes クラスタで実行され、Kubernetes DNS を使用してアドレスを解決します。この DNS リゾルバでは、まず、クラスタ内でアドレスを解決しようとします。そして、アドレスが解決できなかった場合に限り、外部解決を試みます。

各 Kf アプリは、IstioAnthos Service Mesh(ASM)により挿入された Envoy サイドカーで実行されます。このサイドカーにより、Kubernetes Pod に出入りするすべてのネットワーク トラフィックがプロキシ処理されます。

各 Kubernetes Pod は、Pod を構成するコンテナ イメージを管理する物理マシンまたは仮想マシンのノードで実行されます。ノードは、物理ネットワークまたは仮想ネットワークに存在します。

これらを組み合わせることで、ネットワーク ポリシーを適用できるシステムの階層が形成されます。以降に、粒度の粗い階層から順に示します。

ネットワーク レベルのポリシー

ワークロードの保護は、GKE クラスタがインストールされているネットワークから開始されます。

GCP 上の GKE クラスタで Kf を実行している場合は、次のようにすることをおすすめします。

ノードレベルのポリシー

Kubernetes NetworkPolicy を使用すると、ノードで動作しているコンテナのポリシーを設定できます。これは、Kubernetes に存在する Cloud Foundry ネットワーク ポリシーに最も近いマッピングです。

NetworkPolicy は Kubernetes アドオンによってサポートされています。独自の GKE クラスタを設定する場合は、NetworkPolicy の強制適用を有効にする必要があります。

Kf は kf.dev/networkpolicy=app でアプリにラベルを付け、kf.dev/networkpolicy=build でビルドを行います。これにより、アプリやビルドを実行している Pod で NetworkPolicy を直接ターゲットにできます。

Kf Space ごとに、開始用の 2 つの NetworkPolicy が作成されます。一方はアプリが対象で、もう一方はビルドが対象です。この構成は、Space の spec.networkConfig.(app|build)NetworkPolicy.(in|e)gress フィールドで変更できます。これらのフィールドは、次の値のいずれかに設定できます。

列挙値 説明
PermitAll すべてのトラフィックを許可します。
DenyAll すべてのトラフィックを拒否します。

デフォルトでは、Kf は制限の緩いネットワーク ポリシーを使用します。これにより、Kf が使用する次の機能が許可されます。

  • クラスタの上り(内向き)ゲートウェイへの North-South ルーティング
  • Buildpack の取得など、インターネットへの下り(外向き)
  • アプリ間の East-West ルーティング
  • Kubernetes DNS サーバーへのアクセス
  • コンテナ レジストリへのアクセス
  • VPC ネットワークへの直接アクセス
  • Cloud Logging などの Google サービスへのアクセス
  • 認証情報の自動ローテーションを目的とする Workload Identity サーバーへのアクセス

サービス メッシュ ポリシー

ネットワークのきめ細かい制御、認証、認可、オブザーバビリティが必要な場合は、Anthos Service Mesh を使用してポリシーを適用します。

サービス メッシュは、サービス間通信を管理された状態に保ち、そのオブザーバビリティと安全性を確保するインフラストラクチャ レイヤです。これにより、選択したインフラストラクチャ上に多くのマイクロサービスで構成される堅牢なエンタープライズ アプリケーションを作成できます。

サポートされている機能の一覧については、こちらをご覧ください。