我想在我的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群中为我的 AWS Fargate 容器组配置安全组。我想使用安全组来控制入站和出站网络流量。
简短描述
您可以使用单个容器组的安全组将您的自定义 Amazon Elastic Compute Cloud (Amazon EC2) 安全组连接到 Amazon EKS 集群中的 Fargate 容器组。这些附加的安全组限制了进出 Fargate 容器组的入站和出站网络流量。
默认情况下,Fargate 容器组会自动配置为使用集群安全组与 Kubernetes 控制面板通信。您可以使用安全组为进出 Fargate 容器组的入站和出站网络流量配置规则。
您为 Fargate 容器组指定的安全组必须满足以下条件:
- 它们必须有允许容器组与 Kubernetes 控制面板通信的规则。确保将集群安全组指定为其中一个安全组。
- 它们必须具备必要的入站和出站规则,才能与其他容器组或端点通信。例如,它们必须为带有 TCP/UDP 53 端口的 CoreDNS 容器组制定出站规则才能解析名称。
解决方法
要将安全组应用于您的 Fargate 容器组,请完成以下步骤:
-
将 Amazon EKS 安全组策略部署到您的集群。
示例:
apiVersion: vpcresources.k8s.aws/v1beta1
kind: SecurityGroupPolicy
metadata:
name: my-security-group-policy
namespace: my-namespace
spec:
podSelector:
matchLabels:
role: my-role
securityGroups:
groupIds:
- my_pod_security_group_id
**注意:**将 my-security-group-policy、my-namespace、my-role 和 my-pod-security-group-id 替换为配置中的值。您可以使用 serviceAccountSelector 代替 podSelector。
-
使用与 SecurityGroupPolicy 相匹配的标签部署应用程序。
示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: my-namespace
labels:
app: my-app
spec:
replicas: 4
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
role: my-role
spec:
terminationGracePeriodSeconds: 120
containers:
- name: nginx
image: public.ecr.aws/nginx/nginx:1.23
ports:
- containerPort: 80
-
确认您的容器组是否使用容器组安全组。如果使用,则注释中会包含 fargate.amazonaws.com/pod-sg。运行以下命令:
kubectl describe pod pod name -n <namespace> | grep fargate.amazonaws.com/pod-sg
fargate.amazonaws.com/pod-sg: my_pod_security_group_id,...
**注意:**将 pod-name 替换为您的容器组的名称,将 my_pod_security_group_id 替换为您的容器组的安全组 ID。
相关信息
Introducing security groups for Pods(容器组安全组简介)