Kubernetes Basics · レッスン

分離のためのNetwork Policy

Kubernetes Network Policyを使って、Pod間およびNamespace間のネットワークトラフィックの流れを制御します。

レッスン 2/411 ステップ

「分離のためのNetwork Policy」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全4レッスンが含まれています。

Network Policies:トラフィックの交通整理

Kubernetes では、デフォルトで Pod 同士が自由に通信できます。柔軟性に優れている一方で、セキュリティの面では必ずしも理想的とは限りません。

Network Policies は Pod に対するファイアウォールのように機能し、許可するネットワークトラフィック(ingress)と、外へ出るネットワークトラフィック(egress)を制御します。

デフォルトではすべての Pod が通信可能

デフォルトでは、Pod をデプロイすると、namespace に関係なくクラスター内の他の Pod と通信できます。この「フラットネットワーク」モデルはセットアップを簡単にしますが、分離機能はありません。

本番環境では、セキュリティを高め、アプリケーションコンポーネント間の不正アクセスを防ぐために、通信を制限することがよくあります。

Ingress と Egress のルール

Network Policies は、Pod 間で許可する通信のルールを定義します。主に次の 2 種類のトラフィックを対象とします。

  • Ingress: Pod への受信トラフィック。
  • Egress: Pod からの送信トラフィック。

これらのルールはラベルを使って特定の Pod に適用し、他の Pod、namespace、または IP ブロックを対象にできます。

CNI プラグインの要件

Network Policies は魔法のように機能するわけではありません。動作させるには、クラスターに Network Policies をサポートする Container Network Interface (CNI) plugin が必要です。

Calico、Cilium、Weave Net などの代表的な CNI プラグインがこの機能を提供します。対応する CNI がなければ、Network Policies は効果を発揮しません。

Policy の構成

Network Policies は YAML を使って定義します。主なフィールドは次のとおりです。

  • metadata.name: Policy の一意な名前。
  • spec.podSelector: Policy を適用する Pod を選択します。
  • spec.policyTypes: Policy を Ingress、Egress、またはその両方に適用するかを指定します。
  • spec.ingress/spec.egress: 許可するトラフィックのルールを一覧で指定します。

すべての受信トラフィックをブロックする

現在の namespace で app: backend ラベルを持つ Pod への受信トラフィックをすべて拒否する Policy を作成しましょう。これは「デフォルト拒否」のセキュリティ方針を始める際によく使われる方法です。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-backend-ingress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress: [] # An empty ingress list denies all incoming traffic

Frontend からの Ingress を許可する

次に、app: frontend ラベルを持つ同じ namespace 内の Pod から、app: backend Pod への受信トラフィックだけを許可するように Policy を変更しましょう。

送信元の Pod を指定する from セクションに注目してください。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend

送信トラフィックを制御する

Ingress と同様に、Egress(送信)トラフィックも制御できます。ここでは、app: backend Pod が app: database ラベルを持つ Pod に対してのみ送信リクエストを行えるようにする Policy を作成します。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-egress-to-db
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: database

他の namespace を対象にする

Frontend が web-apps などの別の namespace にある場合はどうすればよいでしょうか?namespaceSelector を使うと、namespace をまたいで Pod を対象にできます。

この Policy は、web-apps namespace 内の任意の Pod から、app: backend Pod への Ingress を許可します。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web-apps-ingress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: web-apps
      podSelector: {} # All pods in the selected namespace

Policy チャレンジ

app: web と env: prod のラベルを持つ Pod を考えます。monitoring namespace 内の Pod からの受信トラフィックだけを許可する Network Policy はどれですか?

振り返り:ネットワークを保護する

よくできました!Kubernetes の Network Policies が、アプリケーションに重要なネットワーク分離を提供する仕組みを学びました。

  • Pod に対するファイアウォールとして機能します。
  • Ingress(受信)と Egress(送信)の両方のトラフィックを制御します。
  • Network Policies をサポートする CNI プラグインが必要です。
  • podSelector、policyTypes、ルール定義を使って YAML で定義します。
  • ラベルによって Pod を対象にしたり、namespace 全体を対象にしたりできます。

これらを使って、「最小権限」のネットワークモデルを適用しましょう。

無料で開始

AI チューターと学ぶ Kubernetes Basics — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
12
レッスン
48

よくある質問

「分離のためのNetwork Policy」レッスンは無料ですか?

はい。「分離のためのNetwork Policy」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。

「分離のためのNetwork Policy」で何を学びますか?

Kubernetes Network Policyを使って、Pod間およびNamespace間のネットワークトラフィックの流れを制御します。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kubernetes Basicsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「分離のためのNetwork Policy」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKubernetes Basicsレッスンでコードを書いて実行できますか?

はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Role-Based Access Control(RBAC)
  2. 分離のためのNetwork Policy
  3. Podセキュリティ標準
  4. サービスアカウントとワークロードアイデンティティ
← Kubernetes Basicsに戻る