個々の pods にセキュリティグループを割り当てる - Amazon EKS

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

本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

個々の pods にセキュリティグループを割り当てる

適用対象: Amazon EC2 インスタンスを持つ Linux ノード

適用対象: プライベートサブネット

Pods のセキュリティグループは、Amazon EC2 セキュリティグループを Kubernetes Pods と統合します。Amazon EC2 セキュリティグループを使用して、多くの Amazon EC2 インスタンスタイプと Fargate で実行されているノードにデプロイする Pods との間のインバウンドおよびアウトバウンドのネットワークトラフィックを許可するルールを定義できます。この機能の詳細な説明については、「Introducing security groups for Pods」 (ポッドのセキュリティグループの紹介) のブログを参照してください。

Amazon VPC CNI plugin for Kubernetes 機能との互換性

Podsのセキュリティグループは以下の機能で使用できます。

考慮事項

Pods のセキュリティグループをデプロイする前に、次の制限事項と条件を考慮してください。

  • Pods のセキュリティグループは、Windows ノードでは使用できません。

  • Pods のセキュリティグループは、バージョン 1.16.0 以降の、Amazon VPC CNI プラグインを使用して、Amazon EC2 ノードを含む IPv6 ファミリー用に設定されたクラスターで使用できます。バージョン 1.7.7 以降の Amazon VPC CNI プラグインを使用すると、Fargate ノードのみを含むクラスター設定の IPv6 ファミリーで Pods のセキュリティグループを使用できます。詳細については、「クラスター、pods、サービスに IPv6 アドレスを割り当てる」を参照してください。

  • Pods のセキュリティグループは、ほとんどの Nitro ベースの Amazon EC2 インスタンスファミリーでサポートされていますが、ファミリーの全世代がサポートしているわけではありません。例えば、m5c5r5m6g、、c6gr6g インスタンスファミリーと世代ではサポートされています。t ファミリーのインスタンスタイプは一切サポートされていません。サポートされているインスタンスタイプの完全なリストについては、GitHub の limits.go ファイルを参照してください。ノードは、そのファイルで一覧表示されているインスタンスタイプのうち、IsTrunkingCompatible: true を含むものである必要があります。

  • Pod のセキュリティポリシーを使用して Pod 変更へのアクセスを制限している場合、eks:vpc-resource-controller Kubernetes ユーザーは、psp が割り当てられた role に対して Kubernetes ClusterRoleBinding で指定する必要があります。デフォルトの Amazon EKS の psprole および ClusterRoleBinding を使用している場合、これは eks:podsecuritypolicy:authenticated ClusterRoleBinding です。例えば、次の例に示すように、ユーザーを subjects: セクションに追加します。

    [...] subjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:authenticated - apiGroup: rbac.authorization.k8s.io kind: User name: eks:vpc-resource-controller - kind: ServiceAccount name: eks-vpc-resource-controller
  • カスタムネットワークと Pods のセキュリティグループを組み合わせて使用している場合、ENIConfig で指定されたセキュリティグループではなく、Pods のセキュリティグループによって指定されたセキュリティグループが使用されます。

  • Amazon VPC CNI プラグインのバージョン 1.10.2 以前を使用していて、Pod 仕様に terminationGracePeriodSeconds 設定を含める場合は、設定の値を「0」にすることはできません。

  • Amazon VPC CNI プラグインのバージョン 1.10 以前、またはデフォルト設定が 1.11=POD_SECURITY_GROUP_ENFORCING_MODE のバージョン strict を使用している場合、Kubernetes が NodePort に設定されたインスタンスターゲットを使用するタイプ LoadBalancer および externalTrafficPolicyLocal サービスは、セキュリティグループを割り当てる Pods ではサポートされていません。インスタンスターゲットでのロードバランサーの使用の詳細については、「Network Load Balancers で TCP および UDP トラフィックをルーティングする」を参照してください。

  • Amazon VPC CNI プラグインのバージョン 1.10 以降、またはデフォルト設定が POD_SECURITY_GROUP_ENFORCING_MODE=strict のバージョン 1.11 を使用している場合、セキュリティグループが割り当てられた Pods からのアウトバウンドトラフィックに対してソース NAT が無効になり、その結果アウトバウンドセキュリティグループルールが適用されます。インターネットにアクセスするには、セキュリティグループが割り当てられた Pods を、NAT ゲートウェイまたはインスタンスで構成されたプライベートサブネットにデプロイされたノードで起動する必要があります。パブリックサブネットにデプロイされたセキュリティグループが割り当てられた Pods は、インターネットにアクセスできません。

    POD_SECURITY_GROUP_ENFORCING_MODE=standard に設定されたプラグインのバージョン 1.11 以降を使用している場合、VPC の外部を送信先とする Pod トラフィックは、インスタンスのプライマリネットワークインターフェイスの IP アドレスに変換されます。このトラフィックには、Pod's のセキュリティグループ内のルールではなく、プライマリネットワークインターフェイスのセキュリティグループ内のルールが適用されます。

  • セキュリティグループが関連付けられている Pods で Calico ネットワークポリシーを使用するには、Amazon VPC CNI プラグインのバージョン 1.11.0 以降を使用し、かつ POD_SECURITY_GROUP_ENFORCING_MODE=standard に設定することが必要になります。それ以外の場合、関連付けられたセキュリティグループを持つ Pods との間のトラフィックフローに、Calico ネットワークポリシー は適用されず、Amazon EC2 セキュリティグループの適用のみに限定されます。Amazon VPC CNI バージョンを更新するには、「Amazon VPC CNI を使用してPodsに IP を割り当てる」を参照してください

  • NodeLocal DNSCache を使用するクラスターのセキュリティグループを使用する Amazon EC2 ノードで実行されているPodsは、Amazon VPC CNI プラグインのバージョンが 1.11.0 以降で POD_SECURITY_GROUP_ENFORCING_MODE=standard に設定されている場合にのみサポートされます。Amazon VPC CNI プラグインのバージョンを更新するには、「Amazon VPC CNI を使用してPodsに IP を割り当てる」を参照してください

  • Pods のセキュリティグループは、解約率が高い Pods の場合、Pod の起動レイテンシーより高くなる可能性があります。これは、リソースコントローラーのレート制限によるものです。

  • EC2 セキュリティグループのスコープはPodレベル - 詳細については、「セキュリティグループ」を参照してください。

    POD_SECURITY_GROUP_ENFORCING_MODE=standard および AWS_VPC_K8S_CNI_EXTERNALSNAT=false を設定した場合、VPC 外部のエンドポイント宛てのトラフィックは、Podのセキュリティグループではなくノードのセキュリティグループを使用します。