メインコンテンツまでスキップ

安全なPod間通信の有効化

デフォルトでは、KubernetesはすべてのPodが制限なく自由に通信できるようになっています。Kubernetesのネットワークポリシーを使用すると、Pod間、Namespace間、およびIPブロック(CIDR範囲)間のトラフィックフローに関するルールを定義および適用できます。これらは仮想ファイアウォールとして機能し、Podラベル、Namespace、IPアドレス、ポートなどのさまざまな基準に基づいて、ingress(受信)およびegress(送信)のネットワークトラフィックルールを指定することで、クラスターをセグメント化して保護できます。

以下は、いくつかの主要な要素の説明を含むネットワークポリシーの例です:

~/environment/eks-workshop/modules/networking/network-policies/apply-network-policies/example-network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
A

他のKubernetesオブジェクトと同様に、metadataを使用すると、指定されたネットワークポリシーの名前とNamespaceを指定できます

B

spec.podSelectorを使用すると、指定されたネットワークポリシーが適用されるNamespace内の特定のPodをラベルに基づいて選択できます。仕様で空のPodセレクターまたはmatchLabelsが指定されている場合、ポリシーはNamespace内のすべてのPodに適用されます。

C

spec.policyTypesは、選択されたPodに対してポリシーがingressトラフィック、egressトラフィック、またはその両方に適用されるかを指定します。このフィールドを指定しない場合、デフォルトの動作では、ネットワークポリシーがegressセクションを持たない限り、ingressトラフィックのみにネットワークポリシーが適用されます。egressセクションがある場合、ネットワークポリシーはingressとegressの両方のトラフィックに適用されます。

D

ingressを使用すると、どのPod(podSelector)、Namespace(namespaceSelector)、またはCIDR範囲(ipBlock)からのトラフィックが選択されたPodへ許可されるか、およびどのポートまたはポート範囲を使用できるかを指定するingressルールを設定できます。ポートまたはポート範囲が指定されていない場合、任意のポートを通信に使用できます。

E

egressを使用すると、選択されたPodからどのPod(podSelector)、Namespace(namespaceSelector)、またはCIDR範囲(ipBlock)へのトラフィックが許可されるか、およびどのポートまたはポート範囲を使用できるかを指定するegressルールを設定できます。ポートまたはポート範囲が指定されていない場合、任意のポートを通信に使用できます。

Kubernetesネットワークポリシーで許可または制限される機能の詳細については、Kubernetesドキュメントを参照してください。

ネットワークポリシーに加えて、Amazon VPC CNIのIPv4モードには「Security Groups for Pods」と呼ばれる強力な機能があります。この機能により、Amazon EC2セキュリティグループを使用して、ノードにデプロイされたPodへの、およびPodからのインバウンドおよびアウトバウンドネットワークトラフィックを管理する包括的なルールを定義できます。Security Groups for Podsとネットワークポリシーの間には機能の重複がありますが、いくつかの重要な違いがあります。

  • セキュリティグループはCIDR範囲へのingressおよびegressトラフィックの制御を可能にしますが、ネットワークポリシーはPod、Namespace、およびCIDR範囲へのingressおよびegressトラフィックの制御を可能にします。
  • セキュリティグループは他のセキュリティグループからのingressおよびegressトラフィックの制御を可能にしますが、これはネットワークポリシーでは利用できません。

Amazon EKSでは、Pod間のネットワーク通信を制限し、攻撃対象領域を減らし、潜在的な脆弱性を最小限に抑えるために、セキュリティグループと併せてネットワークポリシーを使用することを強く推奨しています。