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

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

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

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

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

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

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

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

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

ノードレベルのポリシー

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

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

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

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

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

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

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

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

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

サービス メッシュは、サービス全体でマネージド、監視可能、安全な通信を可能にするインフラストラクチャレイヤで、選択したインフラストラクチャ上に多くのマイクロサービスで構成される堅牢なエンタープライズ アプリケーションを作成できます。

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