Amazon VPC Lattice는 AWS의 애플리케이션 네트워킹 서비스로, 서로 다른 VPC와 계정에 걸쳐 있는 서비스들을 안전하게 연결하고 관리할 수 있게 해줍니다. 이 문서에서는 VPC Lattice의 개념, 아키텍처, Amazon EKS와의 통합 방법, 그리고 모범 사례에 대해 설명합니다.
Amazon VPC Lattice는 서비스 간 연결, 보안 및 모니터링을 위한 완전 관리형 애플리케이션 네트워킹 서비스입니다. 주요 특징은 다음과 같습니다:
서비스 네트워크: 여러 VPC와 계정에 걸쳐 서비스를 연결하는 논리적 경계
서비스 디스커버리: 서비스 네트워크 내에서 서비스를 자동으로 검색
트래픽 관리: 라우팅 규칙, 가중치 기반 라우팅, 경로 기반 라우팅 지원
인증 및 권한 부여: AWS IAM, 리소스 정책을 통한 액세스 제어
관찰성: 통합된 모니터링, 로깅 및 추적 기능
주요 사용 사례
마이크로서비스 아키텍처: 마이크로서비스 간의 통신을 간소화하고 보안 강화
멀티 계정 환경: 여러 AWS 계정에 걸쳐 있는 서비스 간의 안전한 통신
하이브리드 워크로드: 컨테이너화된 워크로드와 비컨테이너화된 워크로드 간의 통신
서비스 메시 대체: 경량 서비스 메시 기능을 제공하여 복잡성 감소
멀티 클러스터 연결: 여러 EKS 클러스터 간의 서비스 통신 간소화
VPC Lattice vs 다른 서비스
VPC Lattice vs API Gateway
기능
VPC Lattice
API Gateway
주요 용도
내부 서비스 간 통신
외부 API 노출
네트워크 위치
VPC 내부
인터넷 연결
프로토콜
HTTP/HTTPS, gRPC
HTTP/HTTPS, WebSocket, REST, GraphQL
인증
AWS IAM, 리소스 정책
IAM, Lambda 권한 부여자, Cognito
확장성
자동 확장
자동 확장
가격 책정
시간당 + 데이터 처리량
요청 수 + 데이터 처리량
VPC Lattice vs AWS App Mesh
기능
VPC Lattice
AWS App Mesh
아키텍처
관리형 서비스
사이드카 프록시 기반
복잡성
낮음
중간
프로토콜
HTTP/HTTPS, gRPC
HTTP/HTTPS, gRPC, TCP
서비스 디스커버리
내장
AWS Cloud Map 통합
트래픽 제어
기본 라우팅 규칙
고급 트래픽 제어
관찰성
CloudWatch 통합
Envoy 기반 상세 메트릭
VPC Lattice vs Transit Gateway
기능
VPC Lattice
Transit Gateway
주요 용도
서비스 간 통신
VPC 간 네트워크 연결
추상화 수준
서비스 수준
네트워크 수준
프로토콜
애플리케이션 계층 (L7)
네트워크 계층 (L3)
라우팅
서비스 이름 기반
IP 기반
보안
서비스 수준 정책
보안 그룹, NACL
아키텍처
VPC Lattice 구성 요소
VPC Lattice는 다음과 같은 주요 구성 요소로 이루어져 있습니다:
서비스 네트워크(Service Network): 서비스 간 통신을 위한 논리적 경계
서비스(Service): 애플리케이션 또는 마이크로서비스를 나타내는 엔드포인트
대상 그룹(Target Group): 서비스로 트래픽을 라우팅할 대상 집합
리스너(Listener): 서비스에 대한 연결 요청을 처리하는 프로세스
규칙(Rule): 리스너가 트래픽을 라우팅하는 방법을 정의
VPC 연결(VPC Association): VPC를 서비스 네트워크에 연결
서비스 네트워크 아키텍처
서비스 네트워크는 VPC Lattice의 핵심 구성 요소로, 여러 VPC와 계정에 걸쳐 있는 서비스들을 연결합니다.
트래픽 흐름
VPC Lattice에서 트래픽이 흐르는 방식은 다음과 같습니다:
클라이언트가 VPC Lattice 서비스 DNS 이름으로 요청을 보냄
VPC Lattice가 요청을 수신하고 리스너 규칙에 따라 처리
리스너 규칙이 요청을 적절한 대상 그룹으로 라우팅
대상 그룹이 요청을 등록된 대상(EC2, EKS 파드, Lambda 등)으로 전달
대상이 응답을 처리하고 클라이언트에게 반환
서비스 디스커버리
VPC Lattice는 서비스 네트워크 내에서 서비스 디스커버리를 자동으로 제공합니다:
각 서비스는 고유한 DNS 이름을 가짐 (service-name.vpc-lattice-svcs.region.on.aws)
클라이언트는 이 DNS 이름을 사용하여 서비스에 접근
VPC Lattice가 DNS 확인 및 라우팅을 처리
서비스 네트워크에 연결된 모든 VPC에서 서비스에 접근 가능
보안 모델
VPC Lattice는 다음과 같은 보안 메커니즘을 제공합니다:
네트워크 격리: 서비스 네트워크는 논리적으로 격리된 환경 제공
인증 및 권한 부여: AWS IAM을 통한 서비스 액세스 제어
리소스 정책: 서비스 및 서비스 네트워크에 대한 세분화된 액세스 제어
TLS 암호화: 서비스 간 통신의 암호화
VPC 보안 그룹: 대상에 대한 추가적인 보안 계층
EKS와 VPC Lattice 통합
통합 아키텍처
Amazon EKS와 VPC Lattice의 통합은 다음과 같은 구성 요소로 이루어집니다:
AWS Gateway API Controller: Kubernetes Gateway API를 VPC Lattice 리소스로 변환
Kubernetes Gateway API: 서비스 라우팅을 위한 표준 Kubernetes API
VPC Lattice 서비스 네트워크: EKS 클러스터가 연결되는 서비스 네트워크
VPC Lattice 서비스: Kubernetes 서비스에 매핑되는 VPC Lattice 서비스
VPC Lattice 대상 그룹: Kubernetes 파드에 매핑되는 대상 그룹
통합의 이점
EKS와 VPC Lattice를 통합하면 다음과 같은 이점이 있습니다:
표준화된 API: Kubernetes Gateway API를 통한 일관된 서비스 관리
크로스 클러스터 통신: 여러 EKS 클러스터 간의 원활한 통신
하이브리드 워크로드: EKS 파드와 비컨테이너화된 워크로드 간의 통신
중앙 집중식 관리: AWS 콘솔에서 모든 서비스 네트워크 관리
통합된 관찰성: CloudWatch, CloudTrail을 통한 통합 모니터링 및 로깅
간소화된 서비스 메시: 사이드카 없이 서비스 메시 기능 제공
서비스 메시 대안으로서의 VPC Lattice
VPC Lattice는 다음과 같은 이유로 전통적인 서비스 메시(Istio, Linkerd 등)의 대안이 될 수 있습니다:
낮은 복잡성: 사이드카 프록시 없이 서비스 메시 기능 제공
관리 오버헤드 감소: AWS에서 완전히 관리되는 서비스
리소스 효율성: 사이드카 프록시가 없어 리소스 사용량 감소
AWS 서비스와의 통합: AWS 서비스 생태계와 원활하게 통합
기능
VPC Lattice
전통적인 서비스 메시
서비스 디스커버리
내장
별도 구성 필요
트래픽 라우팅
지원
지원
트래픽 분할
지원
지원
상세한 트래픽 제어
제한적
광범위
사이드카 프록시
불필요
필요
관리 복잡성
낮음
높음
리소스 오버헤드
낮음
높음
관찰성
CloudWatch 통합
다양한 도구 지원
설치 및 구성
사전 요구 사항
VPC Lattice와 EKS를 통합하기 위한 사전 요구 사항은 다음과 같습니다:
Amazon EKS 클러스터: Kubernetes 버전 1.23 이상
IAM 권한: VPC Lattice 리소스를 생성하고 관리할 수 있는 권한
VPC 설정: 프라이빗 서브넷이 있는 VPC
AWS CLI: 최신 버전의 AWS CLI
kubectl: 최신 버전의 kubectl
Helm: (선택 사항) AWS Gateway API Controller 설치를 위한 Helm 3
AWS Gateway API Controller 설치
AWS Gateway API Controller는 Kubernetes Gateway API 리소스를 VPC Lattice 리소스로 변환하는 역할을 합니다.
Helm을 사용한 설치
YAML 매니페스트를 사용한 설치
서비스 계정 및 RBAC 설정:
컨트롤러 배포:
IAM 역할 설정
AWS Gateway API Controller가 VPC Lattice 리소스를 관리하려면 적절한 IAM 권한이 필요합니다.
IRSA(IAM Roles for Service Accounts) 설정
VPC Lattice 서비스 네트워크 생성
VPC Lattice 서비스 네트워크는 AWS Management Console, AWS CLI 또는 AWS CloudFormation을 통해 생성할 수 있습니다.
AWS CLI를 사용한 생성
AWS CloudFormation을 사용한 생성
Gateway API 리소스 구성
Kubernetes Gateway API 리소스를 구성하여 VPC Lattice와 통합합니다.
1. GatewayClass 생성
GatewayClass는 Gateway 리소스의 구현을 정의합니다.
2. Gateway 생성
Gateway는 트래픽이 클러스터로 들어오는 방법을 정의합니다.
3. HTTPRoute 생성
HTTPRoute는 HTTP 트래픽을 서비스로 라우팅하는 방법을 정의합니다.
서비스 및 파드 구성
VPC Lattice와 통합할 Kubernetes 서비스 및 파드를 구성합니다.
1. 서비스 생성
2. 배포 생성
서비스 관리
VPC Lattice 서비스 생성
VPC Lattice 서비스는 AWS Management Console, AWS CLI 또는 AWS CloudFormation을 통해 직접 생성하거나, Kubernetes Gateway API를 통해 간접적으로 생성할 수 있습니다.
AWS CLI를 사용한 직접 생성
Kubernetes Gateway API를 사용한 간접 생성
Gateway API 리소스를 생성하면 AWS Gateway API Controller가 자동으로 VPC Lattice 리소스를 생성합니다.
서비스 검색 및 액세스
VPC Lattice 서비스는 자동으로 DNS 이름을 할당받아 서비스 네트워크 내에서 검색 가능합니다.
DNS 이름 형식
서비스 액세스 예제
서비스 업데이트 및 삭제
AWS CLI를 사용한 서비스 업데이트
AWS CLI를 사용한 서비스 삭제
Kubernetes Gateway API를 사용한 서비스 관리
Gateway API 리소스를 업데이트하거나 삭제하면 AWS Gateway API Controller가 자동으로 VPC Lattice 리소스를 업데이트하거나 삭제합니다.
라우팅 및 트래픽 관리
기본 라우팅
VPC Lattice는 경로 기반 라우팅, 헤더 기반 라우팅, 가중치 기반 라우팅 등 다양한 라우팅 옵션을 제공합니다.
경로 기반 라우팅
헤더 기반 라우팅
트래픽 분할 및 카나리 배포
VPC Lattice는 가중치 기반 라우팅을 통해 트래픽 분할 및 카나리 배포를 지원합니다.
AWS CLI를 사용한 가중치 기반 라우팅
Kubernetes Gateway API를 사용한 가중치 기반 라우팅
현재 Kubernetes Gateway API는 가중치 기반 라우팅을 직접 지원하지 않지만, AWS Gateway API Controller는 주석을 통해 이 기능을 지원합니다.
상태 확인 구성
VPC Lattice는 대상 그룹에 대한 상태 확인을 지원합니다.
AWS CLI를 사용한 상태 확인 구성
Kubernetes Gateway API를 사용한 상태 확인 구성
AWS Gateway API Controller는 주석을 통해 상태 확인 구성을 지원합니다.
보안 및 인증
인증 방법
VPC Lattice는 다음과 같은 인증 방법을 지원합니다:
AWS IAM: AWS Identity and Access Management를 사용한 인증
인증 없음: 인증 없이 모든 요청 허용
AWS IAM 인증 구성
Kubernetes Gateway API를 사용한 IAM 인증 구성
리소스 정책
VPC Lattice는 리소스 정책을 통해 서비스 및 서비스 네트워크에 대한 세분화된 액세스 제어를 제공합니다.
서비스 리소스 정책 설정
서비스 네트워크 리소스 정책 설정
크로스 계정 액세스
VPC Lattice는 서비스 네트워크를 통해 여러 AWS 계정에 걸쳐 있는 서비스 간의 통신을 지원합니다.
크로스 계정 서비스 네트워크 공유
AWS RAM(Resource Access Manager)을 사용하여 서비스 네트워크 공유:
대상 계정에서 공유된 서비스 네트워크 수락:
대상 계정에서 VPC를 공유된 서비스 네트워크에 연결:
TLS 구성
VPC Lattice는 서비스에 대한 TLS 암호화를 지원합니다.
AWS CLI를 사용한 TLS 구성
Kubernetes Gateway API를 사용한 TLS 구성
모니터링 및 로깅
CloudWatch 메트릭
VPC Lattice는 다양한 CloudWatch 메트릭을 제공하여 서비스 성능 및 상태를 모니터링할 수 있습니다.
주요 메트릭
메트릭 이름
설명
차원
RequestCount
처리된 요청 수
ServiceId, ServiceName, TargetGroupId
HTTP_4XX_Count
4XX HTTP 응답 코드 수
ServiceId, ServiceName, TargetGroupId
HTTP_5XX_Count
5XX HTTP 응답 코드 수
ServiceId, ServiceName, TargetGroupId
ProcessedBytes
처리된 바이트 수
ServiceId, ServiceName, TargetGroupId
TargetProcessingTime
대상 처리 시간(ms)
ServiceId, ServiceName, TargetGroupId
HealthyTargetCount
정상 대상 수
TargetGroupId
UnhealthyTargetCount
비정상 대상 수
TargetGroupId
CloudWatch 대시보드 생성
CloudWatch 경보
VPC Lattice 메트릭에 대한 CloudWatch 경보를 설정하여 문제를 조기에 감지할 수 있습니다.
액세스 로깅
VPC Lattice는 서비스에 대한 액세스 로그를 Amazon S3, Amazon CloudWatch Logs 또는 Amazon Kinesis Data Firehose로 전송할 수 있습니다.
S3 액세스 로깅 구성
CloudWatch Logs 액세스 로깅 구성
AWS X-Ray 통합
VPC Lattice는 AWS X-Ray와 통합하여 분산 추적을 지원합니다.
X-Ray 추적 활성화
Kubernetes Gateway API를 사용한 X-Ray 추적 활성화
모범 사례
설계 및 아키텍처
서비스 네트워크 설계
논리적 경계에 따라 서비스 네트워크 분리
환경별(개발, 스테이징, 프로덕션) 서비스 네트워크 분리
보안 요구 사항에 따라 서비스 네트워크 분리
서비스 명명 규칙
일관된 명명 규칙 사용
환경, 서비스 유형, 버전 등을 이름에 포함
예: <env>-<service-name>-<version>
대상 그룹 설계
유사한 특성을 가진 대상을 동일한 대상 그룹에 배치
상태 확인 경로 및 간격 최적화
적절한 비정상 임계값 설정
성능 최적화
상태 확인 최적화
적절한 상태 확인 간격 설정 (너무 짧지 않게)
가벼운 상태 확인 엔드포인트 구현
상태 확인 경로가 중요한 종속성을 확인하도록 구성
연결 재사용
클라이언트 측 연결 풀링 구현
Keep-Alive 헤더 사용
연결 제한 시간 최적화
캐싱 전략
정적 콘텐츠에 대한 클라이언트 측 캐싱 구현
Cache-Control 헤더 최적화
필요한 경우 CDN 통합
보안 강화
최소 권한 원칙
필요한 최소한의 권한만 부여
서비스별 IAM 정책 생성
정기적인 권한 검토 및 감사
네트워크 보안
보안 그룹을 사용하여 트래픽 제한
필요한 포트만 개방
VPC 엔드포인트 사용 고려
암호화
전송 중 데이터 암호화를 위한 TLS 사용
최신 TLS 버전 및 암호 제품군 사용
인증서 자동 갱신 구성
모니터링 및 관찰성
포괄적인 모니터링
모든 서비스에 대한 CloudWatch 대시보드 생성
주요 메트릭에 대한 경보 설정
로그 분석 및 이상 탐지 구현
로깅 전략
모든 서비스에 대한 액세스 로깅 활성화
로그 보존 정책 설정
로그 분석 도구 통합
분산 추적
X-Ray 추적 활성화
서비스 간 추적 상관 관계 구현
추적 데이터 분석 및 시각화
비용 최적화
리소스 사용량 모니터링
서비스 및 대상 그룹 사용량 추적
미사용 리소스 식별 및 제거
비용 할당 태그 사용
트래픽 최적화
불필요한 요청 감소
응답 크기 최적화
배치 처리 구현 (가능한 경우)
자동 확장
트래픽 패턴에 따른 대상 자동 확장
예약된 확장 구현 (예측 가능한 트래픽 패턴의 경우)
확장 임계값 최적화
문제 해결
일반적인 문제 및 해결 방법
1. 연결 문제
문제: 클라이언트가 VPC Lattice 서비스에 연결할 수 없음
해결 방법:
VPC와 서비스 네트워크 간의 연결 확인
보안 그룹 규칙 확인
DNS 확인 확인
대상 상태 확인
2. 인증 문제
문제: 클라이언트가 인증 오류를 수신함
해결 방법:
IAM 정책 및 권한 확인
리소스 정책 확인
서명 버전 및 헤더 확인
임시 자격 증명 만료 확인
3. 라우팅 문제
문제: 요청이 잘못된 대상으로 라우팅됨
해결 방법:
리스너 규칙 및 우선 순위 확인
경로 패턴 및 일치 조건 확인
대상 그룹 구성 확인
가중치 기반 라우팅 설정 확인
4. 상태 확인 실패
문제: 대상이 상태 확인에 실패함
해결 방법:
상태 확인 엔드포인트 가용성 확인
상태 확인 구성 확인
대상 애플리케이션 로그 확인
네트워크 연결 확인
로깅 및 디버깅
1. 액세스 로그 분석
VPC Lattice 액세스 로그를 분석하여 문제를 진단할 수 있습니다.
2. CloudWatch 메트릭 분석
CloudWatch 메트릭을 분석하여 성능 문제를 진단할 수 있습니다.
3. X-Ray 추적 분석
AWS X-Ray를 사용하여 분산 추적을 분석할 수 있습니다.
AWS 지원 및 문제 해결 도구
1. AWS 지원 사례 생성
심각한 문제의 경우 AWS 지원 사례를 생성할 수 있습니다.
2. AWS 리소스 상태 확인
AWS Health Dashboard를 확인하여 AWS 서비스 상태를 확인할 수 있습니다.
결론
Amazon VPC Lattice는 AWS의 애플리케이션 네트워킹 서비스로, 서로 다른 VPC와 계정에 걸쳐 있는 서비스들을 안전하게 연결하고 관리할 수 있게 해줍니다. EKS와의 통합을 통해 Kubernetes 환경에서 서비스 메시 기능을 간소화된 방식으로 제공합니다.
이 문서에서는 다음 내용을 다루었습니다:
개요: VPC Lattice의 개념, 주요 사용 사례 및 다른 서비스와의 비교
아키텍처: VPC Lattice의 구성 요소, 서비스 네트워크 아키텍처 및 트래픽 흐름
EKS와 VPC Lattice 통합: AWS Gateway API Controller를 통한 통합 및 이점
설치 및 구성: AWS Gateway API Controller 설치, IAM 역할 설정 및 서비스 네트워크 생성
서비스 관리: VPC Lattice 서비스 생성, 검색, 액세스, 업데이트 및 삭제
라우팅 및 트래픽 관리: 기본 라우팅, 트래픽 분할, 카나리 배포 및 상태 확인
보안 및 인증: 인증 방법, 리소스 정책, 크로스 계정 액세스 및 TLS 구성
모니터링 및 로깅: CloudWatch 메트릭, 경보, 액세스 로깅 및 X-Ray 통합
모범 사례: 설계, 성능, 보안, 모니터링 및 비용 최적화
문제 해결: 일반적인 문제 및 해결 방법, 로깅 및 디버깅
VPC Lattice를 효과적으로 구현하고 관리하면 마이크로서비스 아키텍처의 복잡성을 줄이고, 서비스 간 통신의 보안을 강화하며, 관찰성을 향상시킬 수 있습니다. AWS의 관리형 서비스로서 운영 오버헤드를 최소화하면서 서비스 메시의 이점을 제공합니다.
# IAM 정책 생성
cat <<EOF > vpc-lattice-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"vpc-lattice:*",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DeregisterTargets"
],
"Resource": "*"
}
]
}
EOF
aws iam create-policy \
--policy-name AmazonGatewayControllerPolicy \
--policy-document file://vpc-lattice-policy.json
# IAM 역할 생성 및 서비스 계정 연결
eksctl create iamserviceaccount \
--name aws-gateway-controller \
--namespace aws-gateway-controller \
--cluster <CLUSTER_NAME> \
--attach-policy-arn arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AmazonGatewayControllerPolicy \
--approve \
--override-existing-serviceaccounts
# 서비스 네트워크 생성
aws vpc-lattice create-service-network \
--name my-service-network \
--auth-type AWS_IAM
# 서비스 네트워크 ID 저장
SERVICE_NETWORK_ID=$(aws vpc-lattice list-service-networks \
--query "items[?name=='my-service-network'].id" \
--output text)
# VPC를 서비스 네트워크에 연결
aws vpc-lattice create-service-network-vpc-association \
--service-network-identifier $SERVICE_NETWORK_ID \
--vpc-identifier <VPC_ID> \
--security-group-ids <SECURITY_GROUP_ID>
# 서비스 네트워크 리소스 정책 설정
aws vpc-lattice put-resource-policy \
--resource-arn arn:aws:vpc-lattice:<REGION>:<ACCOUNT_ID>:servicenetwork/<SERVICE_NETWORK_ID> \
--policy '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<ACCOUNT_ID>:role/MyRole"
},
"Action": [
"vpc-lattice:CreateServiceNetworkVpcAssociation",
"vpc-lattice:CreateServiceNetworkServiceAssociation"
],
"Resource": "arn:aws:vpc-lattice:<REGION>:<ACCOUNT_ID>:servicenetwork/<SERVICE_NETWORK_ID>"
}
]
}'
# 서비스 네트워크 공유
aws ram create-resource-share \
--name my-service-network-share \
--resource-arns arn:aws:vpc-lattice:<REGION>:<ACCOUNT_ID>:servicenetwork/<SERVICE_NETWORK_ID> \
--principals arn:aws:organizations::o-<ORGANIZATION_ID>:organization
# 또는 특정 계정과 공유
aws ram create-resource-share \
--name my-service-network-share \
--resource-arns arn:aws:vpc-lattice:<REGION>:<ACCOUNT_ID>:servicenetwork/<SERVICE_NETWORK_ID> \
--principals <TARGET_ACCOUNT_ID>
# 공유 초대 수락
aws ram accept-resource-share-invitation \
--resource-share-invitation-arn arn:aws:ram:<REGION>:<ACCOUNT_ID>:resource-share-invitation/<INVITATION_ID>
# VPC 연결 확인
aws vpc-lattice list-service-network-vpc-associations \
--service-network-identifier $SERVICE_NETWORK_ID
# 대상 상태 확인
aws vpc-lattice list-targets \
--target-group-identifier $TARGET_GROUP_ID
# 리소스 정책 확인
aws vpc-lattice get-resource-policy \
--resource-arn arn:aws:vpc-lattice:<REGION>:<ACCOUNT_ID>:service/<SERVICE_ID>
# 리스너 규칙 확인
aws vpc-lattice list-listeners \
--service-identifier $SERVICE_ID
# 대상 그룹 확인
aws vpc-lattice get-target-group \
--target-group-identifier $TARGET_GROUP_ID
# 상태 확인 구성 확인
aws vpc-lattice get-target-group \
--target-group-identifier $TARGET_GROUP_ID \
--query "config.healthCheck"
# 대상 상태 확인
aws vpc-lattice list-targets \
--target-group-identifier $TARGET_GROUP_ID