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를 구성의 값으로 바꾸십시오. podSelector 대신 serviceAccountSelector를 사용할 수 있습니다.
-
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로 바꾸십시오.
관련 정보
포드에 대한 보안 그룹 소개