見出し画像

CiliumNetworkPolicy に関して

KubernetesでCiliumNetworkPolicyを使用すると、特定の名前空間に限ったネットワークポリシーを設定できますが、このポリシーを有効にするためには**`endpointSelector`が必須**です。この記事では、`endpointSelector`の役割と、その設定方法について詳しく説明します。また、名前空間ごとにネットワークポリシーを適用する利点についても解説します。


CiliumNetworkPolicyは名前空間ごとに適用される

CiliumNetworkPolicyは、通常Kubernetesの`metadata`で指定された名前空間(namespace)内でのみ適用されるように設計されています。これにより、ネットワークポリシーは指定された名前空間内のリソース(Podやサービス)にのみ有効となり、他の名前空間にあるリソースには影響を与えません。

`endpointSelector`の役割と必須性

CiliumNetworkPolicyを適用するためには、`spec`内に**`endpointSelector`を必ず指定する必要があります**。`endpointSelector`は、どのPodにこのポリシーを適用するかを決めるための設定であり、これを省略するとポリシーの対象が定義されないため、ポリシーが無効になります。

`endpointSelector`で対象となるPodを指定する際、`matchLabels: {}`を使えば、その名前空間内のすべてのPodを対象にすることができます。これにより、特定の名前空間内の全Podに対して一括でポリシーを適用することが可能です。

設定例:`example-namespace`内の全Podにポリシーを適用する

例えば、`example-namespace`という名前空間内のすべてのPodに通信を許可するポリシーを設定する場合、次のような`CiliumNetworkPolicy`の設定が必要です。

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: allow-all-in-namespace
  namespace: example-namespace  # この名前空間内のリソースに対してポリシーを適用
spec:
  endpointSelector:
    matchLabels: {}  # `example-namespace` 内の全Podを対象にする
  ingress:
  - fromEndpoints:
      - matchLabels: {}  # 同じ名前空間内のPodからの通信を許可

設定内容の解説

  • metadata.namespace: `example-namespace`という名前空間を指定しているため、このポリシーは`example-namespace`内のリソースにのみ適用されます。

  • endpointSelector: `matchLabels: {}`を指定することで、`example-namespace`内のすべてのPodを対象にポリシーが適用されます。`endpointSelector`は必須であり、これを省略するとポリシーが適用されません。

  • ingress: `fromEndpoints`で同じ名前空間内のPodからの通信を許可しています。この設定により、`example-namespace`内のPod同士の通信が可能になります。

名前空間ごとにネットワークを制御する利点

名前空間ごとにネットワークポリシーを設定することで、異なるアプリケーションや環境を1つのKubernetesクラスター内で分離して管理できます。以下のような利点があります。

  • アプリケーションごとの分離:異なるアプリケーションやチームごとに名前空間を分け、名前空間ごとに異なるポリシーを適用することで、不要な通信やデータのやり取りを防ぎ、セキュリティを強化できます。

  • 環境ごとのセキュリティ:開発用と本番用の環境を名前空間で分け、異なる通信ルールを設定することで、開発環境と本番環境が影響し合うリスクを回避できます。

まとめ

  • CiliumNetworkPolicyは指定された名前空間内でのみ適用される:`metadata.namespace`で定義された名前空間に限ってポリシーが実施されます。

  • `endpointSelector`は必須:対象となるPodを指定するために`endpointSelector`が必要です。省略するとポリシーが無効になります。

  • セキュリティと管理の利便性:名前空間ごとにネットワーク制御を行うことで、Kubernetesクラスター全体の安全性と管理のしやすさが向上します。

CiliumNetworkPolicyと`endpointSelector`を活用することで、Kubernetes内のリソースを名前空間ごとにしっかりと分離し、安全に管理することが可能です。

参考リンク



いいなと思ったら応援しよう!