APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

KubernetesのNetworkPolicy解説:AI Copilotとの対話

KubernetesのNetworkPolicyの意味を、Copilotに解説してもらった。

はじめに

KubernetesのNetworkPolicyは、簡単なようで難しいです。マニフェストの内容を、日本語で解説してもらえるとわかりやすいのですが。Copilotを使ってNetworkPolicy定義の意味を、言葉で解説することを試みました。

KubernetesとNetworkPolicyの基本

Kubernetesとは

Kubernetes(クバネティス)は、コンテナ化されたアプリケーションの管理と自動化を行うためのソフトウェアです。コンテナとは、アプリケーションやミドルウェア、複数のOSを実行できる独立した環境のことで、これにより、異なるOSの実行が可能になり、複数のOSが実行しているシステムを1つにまとめられます。しかし、コンテナには、アプリケーションを実行する機能はありますが、コンテナを管理したり、他のサーバーと連携させたりする機能を持ってはいません。そこで、「連携できない」という問題点を解決してくれるのがKubernetesです。

NetworkPolicyとは

NetworkPolicyは、Pod間の通信や外部のエンドポイントへの通信を制御するためのリソースです。Podとは、Kubernetesで実行できるアプリケーションの最小単位で、基本的にPodは1つのコンテナから構成されますが、複数のコンテナを共存させることもできます。NetworkPolicyは、Podに対して、Pod間の通信や外部のエンドポイントへの通信を制御するためのリソースで、labelを用いてPodを選択し、選択されたPodのtrafficのruleを設定します。このように、KubernetesとNetworkPolicyは、アプリケーションの運用管理を効率的に行うための重要なツールです。これらの知識は、ITトレンドを追従する全ての人々にとって欠かせません。

NetworkPolicyの解説

NetworkPolicyの設定例

Copilotに以下を問い合わせます。

Kubernetes環境で、test-postgresプロジェクトに、以下のNetworkPolicyを作成します。このNetworkPolicyを適用した場合に、どのようなトラフィック制御が行われるのか、教えてください。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-operator
spec:
  podSelector:
    matchLabels:
      cnpg.io/cluster: cluster-example # The label value must be the cluster name
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: cnpg-system # Namespace where the operator is deployed
          podSelector:
            matchLabels:
              app.kubernetes.io/name: cloudnative-pg # Matches the Operator pod
      ports:
        - port: 8000
        - port: 5432

参考:

https://cloudnative-pg.io/documentation/1.22/samples/networkpolicy-example.yaml

NetworkPolicyの解説

Copilotの回答は以下の通りです。

このNetworkPolicyは、allow-operatorという名前で定義されており、以下のようなトラフィック制御を行います:

  1. Pod Selector:このポリシーは、cnpg.io/cluster ラベルが cluster-example と一致するPodに適用されます。これは、このポリシーが特定のクラスタ内のPodに影響を与えることを意味します。

  2. Ingress Rules:このポリシーは、以下の条件を満たすIngressトラフィックを許可します:

    • Namespace Selector:送信元のNamespaceが kubernetes.io/metadata.name ラベルが cnpg-system と一致する場合。これは、オペレータがデプロイされているNamespaceからのトラフィックを意味します。
    • Pod Selector:送信元のPodが app.kubernetes.io/name ラベルが cloudnative-pg と一致する場合。これは、オペレータのPodからのトラフィックを意味します。
  3. Ports:このポリシーは、ポート 80005432 へのIngressトラフィックを許可します。

したがって、このNetworkPolicyは、cnpg-system Namespaceの cloudnative-pg ラベルを持つオペレータPodから、cnpg.io/cluster ラベルが cluster-example と一致するPodへの、ポート 80005432 へのトラフィックを許可します。それ以外のすべてのIngressトラフィックは、デフォルトでブロックされます。これにより、特定のオペレータからのみアクセスを許可し、他のすべての不要なトラフィックを防ぐことができます。これは、クラスタのセキュリティを強化するのに役立ちます。

やってみた感想

  • 完璧な回答を得ることができました。
  • AIは、このような設定ファイルから言語への変換は、得意中の得意のようです。
  • 逆に、言葉で伝えて、このような設定ファイルを作成することもおそらくできると思います。
  • すばらしく仕事に役立つ使い方を、また一つ発見しました。
  • 複数のNetworkPolicyの矛盾点を発見するのに使えないかと、さらなる期待が高まりました。