Ssoon
AWS EKS - Security Groups for Pods 본문
CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 2주차
# EKS Workshop 참고
Security group
- 인스턴스 수준의 네트워크 방화벽 역할
- 기본적으로 Amazon VPC CNI는 노드의 기본 ENI와 연결된 보안 그룹을 사용
- 인스턴스와 연결된 모든 ENI는 동일한 EC2 보안 그룹을 갖게 됩니다. 따라서, 노드의 모든 파드는 실행 중인 노드와 동일한 보안 그룹을 공유
- 파드와 파드, 파드와 외부 AWS 서비스 트래픽을 아우르는 네트워크 보안 규칙은 EC2 보안 그룹을 통해 한 곳에서 정의할 수 있으며, Kubernetes 네이티브 API를 사용하는 애플리케이션에 적용할 수 있습니다.
- 파드에 대한 보안 그룹은 VPC CNI에 ENABLE_POD_ENI=true로 설정하여 활성화
- 파드 ENI를 활성화하면 컨트롤 플레인에서 실행 중인 VPC 리소스 컨트롤러(EKS에서 관리)가 "aws-k8s-trunk-eni"라는 트렁크 인터페이스를 생성하여 노드에 연결한다.
- 트렁크 인터페이스는 인스턴스에 연결된 표준 네트워크 인터페이스 역할을 한다.
- 컨트롤러는 또한 "aws-k8s-branch-eni"라는 이름의 브랜치 인터페이스를 생성하고 트렁크 인터페이스와 연결한다.
- 파드는 SecurityGroupPolicy 커스텀 리소스를 사용하여 보안 그룹이 할당되고 브랜치 인터페이스와 연결된다.
- 보안 그룹은 네트워크 인터페이스로 지정되므로, 이제 이러한 추가 네트워크 인터페이스에서 특정 보안 그룹이 필요한 파드를 예약할 수 있다.
✅ 실습
- catalog 구성 요소는 스토리지 백엔드로 MySQL 데이터베이스를 사용
- 현재 catalog API가 배포되는 방식은 EKS 클러스터에 파드로 배포된 데이터베이스를 사용
- catalog-mysql-0 파드는 MySQL 파드 임
- environment 을 검사하여 catalog 애플리케이션이 이를 사용하고 있는지 확인
✅ Using Amazon RDS
- RDS 데이터베이스 엔드포인트와 비밀번호를 검색
- Amazon RDS 데이터베이스를 사용하도록 catalog 서비스를 다시 구성
- 애플리케이션은 대부분의 구성을 ConfigMap 에서 로드
- 컨피그맵을 덮어쓰고 MySQL 엔드포인트를 변경하여 애플리케이션이 이미 생성된 Amazon RDS 데이터베이스에 연결하도록 환경 변수 CATALOG_RDS_ENDPOINT에서 가져온 것
- kustomization.yaml
- apiVersion: kustomize.config.k8s.io/v1beta1 사용 중인 Kustomize의 API 버전을 지정합니다.
- kind: Kustomization: 이 YAML 파일이 Kustomization 리소스를 정의
- resources: Kustomization이 포함해야 하는 기본 리소스(매니페스트 파일)의 목록을 지정
- ../../../../base-application/catalog: Kustomization에 포함할 기본 리소스 중 하나로, 상대 경로를 사용하여 base-application 디렉토리 내의 catalog 디렉토리를 지정
- nlb.yaml: Kustomization에 포함할 또 다른 기본 리소스로, 파일의 이름을 직접 지정
- patches: Kustomization에 적용할 패치 파일의 목록을 지정
- path: catalog-configMap.yaml: catalog-configMap.yaml라는 이름의 패치 파일을 지정 (기본 매니페스트에 적용할 수정 내용)
- path: secrets.yaml: secrets.yaml라는 이름의 패치 파일을 지정. (기본 매니페스트에 적용할 수정 내용)
- ConfigMap 이 새 값으로 업데이트되었는지 확인
이제 catalog 파드를 재활용하여 새 ConfigMap 콘텐츠를 가져와야 합니다:
- 오류가 발생 => 파드 로그를 확인하여 무슨 일이 발생했는지 확인
- 파드가 RDS 데이터베이스에 연결할 수 없음
- 다음과 같이 RDS 데이터베이스에 적용된 EC2 보안 그룹을 확인할 수 있습니다:
- AWS 콘솔을 통해 RDS 인스턴스의 보안 그룹을 볼 수도 있습니다:
- 이 보안 그룹은 특정 보안 그룹이 있는 소스에서 오는 트래픽(위의 예: sg-01c703969c71a71b5)만 포트 3306의 RDS 데이터베이스에 액세스할 수 있도록 허용합니다.
✅ Applying a Security Group
- catalog 파드가 RDS 인스턴스에 성공적으로 연결하려면 올바른 보안 그룹을 사용해야 합니다.
- 보안 그룹을 EKS 워커 노드 자체에 적용할 수 있지만, 이렇게 하면 클러스터의 모든 워크로드가 RDS 인스턴스에 대한 네트워크 액세스 권한을 갖게 됩니다.
- 대신 파드용 보안 그룹을 적용하여 catalog 파드가 RDS 인스턴스에 대한 액세스를 허용
- RDS 데이터베이스에 액세스할 수 있는 보안 그룹:
- 포트 8080에서 파드가 제공하는 HTTP API에 대한 인바운드 트래픽을 허용한다.
- 모든 egress 트래픽을 허용한다.
- RDS 데이터베이스에 대한 액세스가 허용된다.
파드가 이 보안 그룹을 사용하려면 SecurityGroupPolicy CRD를 사용하여 특정 파드 집합에 매핑할 보안 그룹을 EKS에 알려야 한다.
- policy.yaml
- metadata :리소스의 메타데이터를 정의.
- name: catalog-rds-access : 이 보안 그룹 정책의 이름을 나타냅니다.
- namespace: catalog: 이 리소스가 속하는 네임스페이스를 나타냅니다.
- spec : 리소스의 세부 사항을 정의
- podSelector: 보안 그룹 정책이 적용될 파드를 선택하.
- matchLabels: 파드의 라벨을 기반으로 선택하는 옵션입니다. (app.kubernetes.io/component: service 라벨을 가진 파드를 선택)
- securityGroups : 보안 그룹을 지정.
- groupIds: 보안 그룹 ID를 지정합니다. ( 환경 변수 ${CATALOG_SG_ID}로부터 가져오며, 보안 그룹 ID를 동적으로 설정)
- podSelector: 보안 그룹 정책이 적용될 파드를 선택하.
- 이를 클러스터에 적용한 다음 catalog 파드를 다시 한 번 배포
- 이번에는 catalog 파드가 시작되고 롤아웃이 성공합니다.
- 로그를 확인하여 RDS 데이터베이스에 연결되는 것을 확인
✅ Inspecting the Pod
- catalog 파드가 실행 중이고 Amazon RDS 데이터베이스를 성공적으로 사용하고 있으므로, 파드용 SG와 관련 정보 확인
- 파드의 어노테이션 확인
- vpc.amazonaws.com/pod-eni 어노테이션은 이 파드에 사용된 브랜치 ENI, 프라이빗 IP 주소 등과 같은 메타데이터를 보여준다.
- 쿠버네티스 이벤트는 또한 구성에 대한 응답으로 VPC 리소스 컨트롤러가 조치를 취하는 것을 보여줍니다:
- 콘솔에서 VPC 리소스 컨트롤러가 관리하는 ENI 확인
- 할당된 보안 그룹과 같은 지점 ENI에 대한 정보를 확인
'AWS EKS Workshop Study 2기' 카테고리의 다른 글
AWS EKS - Observability - Logging in EKS (0) | 2024.03.30 |
---|---|
AWS EKS - Storage - EFS (2) | 2024.03.23 |
AWS EKS - Storage - EBS (0) | 2024.03.17 |
AWS EKS - Network Policies (2) | 2024.03.16 |
AWS EKS - 최적화 AMI (0) | 2024.03.09 |
Comments