Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Kubernetesネットワークポリシー

概要 ジュニパークラウドネイティブのContrail® Networking (CN2)では、Contrailファイアウォールセキュリティポリシーフレームワーク内にKubernetesネットワークポリシーを導入できます。ネットワークポリシーを展開するには、Contrailなどのサポートする NetworkPolicyコンテナネットワークインターフェイス(CNI)を使用する必要があります。このトピックでは、CN2を実行する環境にKubernetesネットワークポリシーを展開する方法について説明します。

Kubernetesネットワークポリシーの概要

Kubernetesネットワークポリシーでは、ポッドを他のポッドやネットワークエンドポイントと通信する方法を指定できます。Kubernetes NetworkPolicy リソースを使用すると、ポッドは次のように通信できます。

  • 許可リスト内の他のポッド(ポッドはそれ自体へのアクセスをブロックできません)。

  • 許可リスト内の名前空間。

  • IPブロック、またはクラスレスドメイン間ルーティング(CIDR)。

Kubernetesネットワークポリシーは、名前空間内のポッドにのみ適用され、イングレス(送信元)およびエグレス(宛先)ルールを定義します。Kubernetesネットワークポリシーは、ポッドに適用される場合、以下の特性を持っています。

  • ポッド固有で、1つのポッドまたはポッドのグループに適用されます。ネットワークポリシールールは、そのポッドへのトラフィックを決定します。

  • イングレストラフィック、エグレストラフィック、またはその両方のポッドのトラフィックルールを定義します。方向を明示的に指定しない場合、ポリシーはデフォルトでイングレス方向に適用されます。

  • イングレスおよびエグレス方向の許可リストからのトラフィックを指定する明示的なルールを含める必要があります。許可リストのルールに一致しないトラフィックは拒否されます。

  • 許可されるトラフィックには、ポッドに適用されたネットワークポリシーのいずれかに一致するトラフィックが含まれます。

Kubernetes ネットワーク ポリシーには、次のような追加の特性があります。

  • ポッドに適用されていない場合、そのポッドはすべてのソースからのトラフィックを受け入れます。

  • 個々のパケットではなく、接続に基づいて動作します。例えば、設定されたポリシーでポッドAからポッドBへのトラフィックが許可されている場合、そのポリシーがポッドBからポッドAへの接続を開始することを許可しない場合でも、ポッドBからポッドAへのパケットも許可されます。

Kubernetesネットワークポリシーは、以下のセクションで構成されています。

  • spec: Kubernetes オブジェクトの望ましい状態について説明します。ネットワークポリシーの場合、仕様内の podSelector および policyTypes フィールドは、そのポリシーのルールを指定します。

  • podSelector:ポリシーが適用されるポッドのグループを選択します。空 podSelector の場合、名前空間内のすべてのポッドが選択されます。

  • policyTypes: ポリシーが、選択したポッドからのイングレストラフィックに適用されるか、または選択したポッドへのエグレストラフィックに適用されるかを指定します。が指定されていない policyTypes 場合、イングレス方向がデフォルトで選択されます。

  • ingress: と ports セクションに一致するイングレス トラフィックをfrom許可します。以下の例では、イングレスルールにより、ラベルアプリを使用して名前空間内devのすべてのポッドへの接続を許可しています。webserver-devのTCPポート80では、

    • ラベル app: client1-devを持つデフォルト名前空間のポッド。

    • 10.169.25.20/32 範囲内のすべての IP アドレス。

    • ラベル project: jtacを持つデフォルト名前空間のポッド。

  • egress: および portsセクションに一致するエグレス トラフィックをto許可します。例1では、エグレスルールは、デフォルト名前空間の任意のポッドから、ラベルapp: dbserver-devを使用してTCP 80をポートに接続できます。

  • ipBlock:IP CIDR範囲を選択して、イングレスソースまたはエグレス宛先として許可します。 ipBlock ネットワーク ポリシーのセクションには、以下の 2 つのフィールドが含まれています。

    • cidr(ipBlock.cidr):ネットワークポリシーにより、指定されたIP範囲へのエグレストラフィック、またはからのイングレストラフィックが許可されます。

    • except (ipBlock.except): Kubernetes は、指定された IP 範囲のトラフィックがポリシーと一致しないことを想定しています。ネットワークポリシーは、 で except指定されたIP範囲へのイングレストラフィックを拒否するか、 からトラフィックをエグレスします。

      メモ:ネットワークポリシーで使用 exceptする場合、Kubernetesは、IP範囲内の except識別されたトラフィックがポリシーと一致しないことを期待します。CN2は、条件を使用するこの特定のシナリオを exceptサポートしていません。その結果、使用 exceptを避けるようにお勧めします.

NetworkPolicyのリソース例は、 および ルールをegress示していますingress

この例では、CIDR 10.169.25.20/32 port: 80内のIPからのイングレスTCPトラフィックが許可されています。が許可されているポッドmatchLabelsapp: dbserver-devにトラフィックをTCP port: 80送信します。

クラウドネイティブのContrail NetworkingにKubernetesネットワークポリシーを導入

CN2では、Kubernetesネットワークポリシーを設定して展開すると、そのポリシーがContrailで自動的に作成されます。Kubernetesネットワークポリシーの例を次に示します。

このポリシーにより、CN2で以下のオブジェクトが作成されます。

タグ

アドレス グループ

ファイアウォール ルール

ファイアウォール ポリシー

表 1: タグ
キー
役割 Db
名前 空間 既定
プロジェクト myproject
役割 フロント エンド
表 2:アドレス グループ
名前 プレフィックス
test-network-policy-except 172.17.1.0/24
テストネットワークポリシー 172.17.0.0/16
test-network-policy-egress 10.0.0.0/24
表 3:ファイアウォール ルール
ルール名 アクション サービス エンドポイント1 方向 エンドポイント2
default-ingress-test-network-policy-0-ipBlock-0-17x.xx.1.0/24-0 拒否 tcp:6379 role=db & 名前空間=デフォルト イングレス アドレス グループ:172.17.1.0/24
default-ingress-test-network-policy-0-ipBlock-0-cidr-17x.xx.0.0/16-0 渡す tcp:6379 role=db & 名前空間=デフォルト イングレス アドレス グループ:172.17.0.0/16
default-ingress-test-network-policy-0-namespaceSelector-1-0 渡す tcp:6379 role=db & 名前空間=デフォルト イングレス project=myproject
default-ingress-test-network-policy-0-podSelector-2-0 渡す tcp:6379 role=db & 名前空間=デフォルト イングレス 名前空間=default & role=フロントエンド
default-egress-test-network-policy-ipBlock-0-cidr-10.0.0.0/24-0 渡す tcp:5978 role=db & 名前空間=デフォルト 出口 アドレス グループ:10.0.0.0/24
表 4:ファイアウォール ポリシー
名前 ルール
default-test-network-policy

default-ingress-test-network-policy-0-ipBlock-0-172.17.1.0/24-0、default-ingress-test-network-policy-0-ipBlock-0-cidr-172.17.0.0/16-0

default-ingress-test-network-policy-0-namespaceSelector-1-0

default-ingress-test-network-policy-0-podSelector-2-0、default-egress-test-network-policy-ipBlock-0-cidr-10.0.0.0/24-0

Kubernetes ネットワーク ポリシー一致表現

クラウドネイティブのContrail Networking(CN2)バージョン22.3以降、CN2 matchExpressionsは.詳細については matchExpressions、Kubernetesのドキュメント の「セットベースの要件をサポートするリソース」 を参照してください。