Kubernetes ネットワークポリシーにより Pod トラフィックを制限する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

Kubernetes ネットワークポリシーにより Pod トラフィックを制限する

デフォルトでは、Kubernetes の IP アドレス、ポート、クラスター内の Pod 間の接続、またはポッドと他のネットワークのリソースの接続に制限はありません。Kubernetes ネットワークポリシーを使用して、自分の Pod 間で送受信されるネットワークトラフィックを制限できます。詳細については、Kubernetes ドキュメントの「ネットワークポリシー」を参照してください。

クラスターの Amazon VPC CNI plugin for Kubernetes のバージョンが 1.13 以前の場合、Kubernetes ネットワークポリシーをクラスターに適用するには、サードパーティーソリューションを実装する必要があります。バージョン 1.14 以降のプラグインではネットワークポリシーを実装できるため、サードパーティソリューションを使用する必要はありません。このトピックでは、サードパーティーのアドオンを使用せずにクラスターの Kubernetes ネットワークポリシーを使用するようにクラスターを構成する方法を説明します。

Amazon VPC CNI plugin for Kubernetes のネットワークポリシーは、次の構成でサポートされています。

  • バージョン 1.25 以降の Amazon EKS クラスター。

  • クラスター上の Amazon VPC CNI plugin for Kubernetes のバージョン 1.14 以降。

  • IPv4 または IPv6 アドレス用に設定されたクラスター。

  • ポッド用のセキュリティグループでネットワークポリシーを使用できます。ネットワークポリシーを使用すると、クラスター内の通信をすべて制御できます。Pod 用のセキュリティグループを使用すると、Pod 内のアプリケーションから AWS サービスへのアクセスを制御できます。

  • カスタムネットワークおよびプレフィクス委任でネットワークポリシーを使用できます。

考慮事項

アーキテクチャ

  • Amazon VPC CNI plugin for Kubernetes を含むクラスターに Amazon VPC CNI plugin for Kubernetes ネットワークポリシーを適用する場合、Amazon EC2 Linux ノードにのみポリシーを適用できます。Fargate または Windows ノードにはポリシーを適用できません。

  • ネットワークポリシーはIPv4 または IPv6 アドレスのいずれかのみを適用しますが、両方は適用しません。IPv4 クラスターではVPC CNI は IPv4 アドレスをポッドに割り当て、IPv4 ポリシーを適用します。IPv6 クラスターではVPC CNI は IPv6 アドレスをポッドに割り当て、IPv6 ポリシーを適用します。IPv6 クラスターに適用された IPv4 ネットワークポリシールールは無視されます。IPv4 クラスターに適用された IPv6 ネットワークポリシールールは無視されます。

ネットワークポリシー

  • ネットワークポリシーはデプロイの一部である Pod にのみ適用されます。metadata.ownerReferences セットを持たないスタンドアロンの Pod ではネットワークポリシーを適用できません。

  • 同じ Pod に複数のネットワークポリシーを適用できます。同じ Pod を選択するポリシーが 2 つ以上設定されている場合、すべてのポリシーが Pod に適用されます。

  • ネットワークポリシーの各 ingress: または egress: セレクターの各プロトコルにおけるポートの一意の組み合わせの最大数は 24 です。

  • どの Kubernetes サービスでも、サービスポートはコンテナポートと同じでなければなりません。名前付きポートを使用している場合はサービス仕様でも同じ名前を使用してください。

移行

  • クラスターが現在サードパーティーソリューションを使用して Kubernetes ネットワークポリシーを管理している場合、同じポリシーを Amazon VPC CNI plugin for Kubernetes で使用できます。ただし、同じポリシーを管理しないように、既存のソリューションを削除する必要があります。

インストール

  • ネットワークポリシー機能ではpolicyendpoints.networking.k8s.aws と呼ばれる PolicyEndpoint カスタムリソース定義  (CRD が作成され、必要になります。カスタムリソースの PolicyEndpoint オブジェクトは Amazon EKS によって管理されます。これらのリソースを変更または削除しないでください。

  • インスタンスロールの IAM 認証情報を使用するポッドを実行するか、EC2 IMDS に接続するポッドを実行する場合はEC2 IMDS へのアクセスをブロックするネットワークポリシーがないか慎重に確認してください。EC2 IMDS へのアクセスを許可するネットワークポリシーを追加する必要がある場合があります。詳細については「Amazon EC2 ユーザーガイド」の「インスタンスメタデータとユーザーデータ」を参照してください。

    サービスアカウントの IAM ロールまたは EKS Pod Identity を使用するポッドはEC2 IMDS にアクセスしません。

  • Amazon VPC CNI plugin for Kubernetes は、各ポッドの追加のネットワークインターフェイスにはネットワークポリシーを適用せず、各ポッドのプライマリインターフェイス (eth0) のみにネットワークポリシーを適用します。これは以下のアーキテクチャに影響します:

    • ENABLE_V4_EGRESS 変数が true に設定された IPv6 ポッド。この変数により、IPv4 エグレス機能が IPv6 ポッドをクラスター外のエンドポイントなどの IPv4 エンドポイントに接続できるようになります。IPv4 エグレス機能は、ローカルループバック IPv4 アドレスを持つ追加のネットワークインターフェースを作成することで機能します。

    • Multus などのチェーンネットワークプラグインを使用する場合。これらのプラグインは各ポッドにネットワークインターフェースを追加するため、ネットワークポリシーはチェーンネットワークプラグインには適用されません。