12주차 - Amazon VPC Lattice for Amazon EKS(1)

728x90

Amazon VPC Lattice란

  • AWS에서 제공하는 완전관리형 애플리케이션 네트워킹 서비스로, 다양한 컴퓨팅 환경에서 애플리케이션 서비스를 연결, 보호 및 모니터링하는 통합 솔루션

Amazon VPC Lattice 주요 구성 요소

  • Service
    Service는 특정 작업이나 기능을 수행하는 독립적으로 배포가능한 소프트웨어 단위입니다. 이는 어떤 Amazon Virtual Private Cloud(VPC)나 계정에도 존재할 수 있으며, 다양한 유형의 컴퓨팅 환경(가상머신, 컨테이너, 서버리스 함수)에서 실행할 수 있습니다. 서비스 구성은 다음과 같은 요소로 이루어집니다.
    • 리스너 : 리스너에서는 Service가 트래픽을 받아들일 포트와 프로포콜을 정의합니다. 지원되는 프로토콜은 HTTP/1.1, HTTP/2, gRPC이며, TLS가 활성화된 Service의 경우 HTTPS도 포함됩니다.
    • 규칙 : 리스너의 기본 구성 요소로, 요청을 대상 그룹의 대상들로 전달합니다. 각 규칙은 우선 순위, 하나 이상의 작업, 그리고 리스너가 클라이언트 요청을 라우팅하는 기준이 되는 하나 이상의 조건으로 구성됩니다.
    • 대상 그룹 : 애플리케이션이나 서비스를 실행하는 리소스들의 집합으로, 이를 대상 이라고도 합니다. 대상은 EC2 인스턴스, IP주소, Lambda 함수, 또는 Kubernetes Pod가 될 수 있습니다.

  • Service 특징
    • 고유한 VPC Lattice 도메인 네임 제공
    • 리스너를 통해 들어오는 연결 처리
    • 특정 경로나 헤더 값에 기반한 라우팅 규칙 정의
    • EC2, ECS, Lambda 등 다양한 AWS 컴퓨팅 서비스를 대상으로 설정 가능상태 확인을 통한 트래픽 안정성 보장
  • Service Network
    Service Network는 VPC Lattice의 핵심 구성 요소로, 여러 서비스를 논리적으로 그룹화하고 이들 간의 통신을 관리합니다. 하나 이상의 VPC를 Service Network에 연결하여 해당 네트워크 내의 서비스 간 통신을 가능하게 합니다.

  • Service Network의 주요 특징
    • 여러 VPC와 서비스를 단일 네트워크로 통합
    • 계정 간, 리전 간 서비스 연결 지원
    • 중앙 집중식 액세스 제어 및 모니터링 제공
    • VPC 연결을 통한 Service Network 내 서비스에 대한 접근 관리
  • Auth Policy
    Auth Policy는 VPC Lattice 서비스에 대한 액세스를 제어하는 IAM 기반 정책입니다. 이를 통해 특정 IAM 보안 주체나 역할이 서비스에 접근할 수 있는지 여부를 세밀하게 제어할 수 있습니다.

  • Auth Policy의 주요 기능
    • IAM 기반의 세분화된 접근 제어
    • 서비스 레벨 또는 서비스 네트워크 레벨에서 적용 가능
    • HTTP 메소드, 경로, 헤더 등을 기준으로 조건부 액세스 규칙 설정
    • AWS 리소스 간의 안전한 통신 보장
  • Service Directory
    Service Directory는 모든 VPC Lattice 서비스를 중앙에서 검색하고 관리할 수 있는 카탈로그입니다. 개발자와 운영팀이 사용 가능한 서비스를 쉽게 찾고 접근할 수 있도록 지원합니다.

 

  • Service Directory의 핵심 기능
    • 사용 가능한 모든 서비스의 중앙 집중식 카탈로그 제공
    • 서비스 메타데이터 및 설명 관리
    • 서비스 검색 및 필터링 기능
    • 접근 가능한 서비스에 대한 가시성 제공

Amazon VPC Lattice의 장점

  • 여러 VPC, EC2 인스턴스, 컨테이너, 서버리스로 구성한 애플리케이션의 네트워크 구성을 중앙 집중화 할 수 있습니다.
  • 별도의 사이드카 프록시를 구성할 필요가 없습니다. (+ 완전 관리형 서비스)
  • 복잡한 네트워크 구성을 단순화 해서 쉽게 사용할 수 있습니다.
  • IAM 및 SigV4를 통해 각 애플리케이션으로의 보안 구성을 손쉽게 적용 할 수 있습니다.
  • CloudWatch, S3, Kinesis Data Firehose를 통해 쉽게 로깅, 트래픽 패턴 분석 등을 수행할 수 있습니다.

 

[실습 1] Simple Client to Server communication

  • Terraform 코드 준비 및 프로비저닝
git clone https://github.com/aws-ia/terraform-aws-eks-blueprints.git

cd terraform-aws-eks-blueprints/patterns/vpc-lattice/client-server-communication

#main.tf 파일 내의 29번째 라인에서 region 값을 ap-northeast-2로 수정

 27 locals {
 28   name   = basename(path.cwd)
 29   region = "ap-northeast-2"
 30 
 31   cluster_vpc_cidr = "10.0.0.0/16"
 32   client_vpc_cidr  = "10.1.0.0/16"
 33   azs              = slice(data.aws_availability_zones.available.names, 0, 3)
 ..
 ..
 
 #실습 인프라를 프로비저닝
 
 terraform init
 
terraform apply -target="module.client_vpc" -auto-approve
terraform apply -target="module.cluster_vpc" -auto-approve
terraform apply -target=aws_route53_zone.primary -auto-approve

terraform apply -target="module.client_sg" -auto-approve
terraform apply -target="module.endpoint_sg" -auto-approve

terraform apply -target="module.client" -auto-approve
terraform apply -target="module.vpc_endpoints" -auto-approve

terraform apply -target="module.eks" -auto-approve
terraform apply -target="module.addons" -auto-approve
 
 
 terraform apply -auto-approve
 
 #kubectl config 설정
 aws eks update-kubeconfig --name client-server-communication --alias client-server-communication --region ap-northeast-2
 
 kubectl get pods -A

 

  • client vpc가 10.1.0.0/16 CIDR 주소 범위로 구성
  • cluster vpc가 10.0.0.0/16 CIDR 주소 범위로 구성

  • client vpc의 서브넷은 private subnet 3개로 구성
  • cluster vpc의 서브넷은 public subnet 3개, private subnet 3개로 구성

  • client 측 워크로드로 1개의 ec2 인스턴스가 구성되어 있습니다.
  • cluster 측 워크로드로 3개의 ec2 인스턴스(워커 노드)가 구성되어 있습니다.

  • example.com Route53 구성

  • EKS 생성 확인

  • 3개 Node 확인
  • 전체 Pod 확인

 

  • 10.0.0.119 pod: server-6d44dd47-4gs8z
  • 10.0.24.51 pod: server-6d44dd47-qn4c4

  • Lattice 대상그룹에 Pod가 등록되어 있는 것을 확인

 

  • VPC Lattice를 통한 Client to Server 통신 테스트

Client EC2와 EKS Pod간 별다른 설정 없이 통신 가능한 것을 확인 → Lattice
nslookup 명령을 수행: Amazon VPC Lattice로 구성된 엔드포인트가 조회
Lattice Services: server-apps의 도메인 이름: server-apps-08369f51f3081b084.7d67968.vpc-lattice-svcs.ap-northeast-2.on.aws

 

  • AWS Gateway API Controller의 동작 체크
    • VPC Lattice를 통해 EKS 클러스터 내의 server pod로 라우팅 할 수 있는 환경을 구성하기 위해서는 EKS 클러스터 내에 GatewayClass, Gateway, Route 리소스를 생성해야 한다.
    • AWS Gateway API Controller는 생성된 GatewayClass, Gateway, Route 리소스를 참조하여 필요한 VPC Lattice 네트워크 환경을 구성하게 된다.

 

  • AWS Gateway API Controller의 로그를 lattice.log라는 파일로 저장
kubectl logs deployment/aws-gateway-api-controller-aws-gateway-controller-chart -n aws-application-networking-system --all-containers=true > lattice.log

 

  • EKS 클러스터 내에 GatewayClass, Gateway, Route에 대한 오브젝트가 추가되면 AWS Gateway API Controller에서 이를 감지하여 조정(reconcile)
{"level":"debug","ts":"2025-04-27T13:57:56.867Z","logger":"controller.target-group-policy","caller":"policyhelper/policy.go:252","msg":"add watchers for types: [{ Service}]"}
{"level":"debug","ts":"2025-04-27T13:57:56.867Z","logger":"controller.vpc-association-policy","caller":"policyhelper/policy.go:252","msg":"add watchers for types: [{gateway.networking.k8s.io Gateway}]"}
{"level":"info","ts":"2025-04-27T13:57:56.867Z","logger":"setup","caller":"workspace/main.go:217","msg":"starting manager"}
{"level":"info","ts":"2025-04-27T13:57:56.867Z","logger":"runtime.controller-runtime.metrics","caller":"server/server.go:185","msg":"Starting metrics server"}
{"level":"info","ts":"2025-04-27T13:57:56.867Z","logger":"runtime","caller":"manager/server.go:50","msg":"starting server","kind":"health probe","addr":"[::]:8081"}
I0427 13:57:56.867863       1 leaderelection.go:250] attempting to acquire leader lease aws-application-networking-system/amazon-vpc-lattice.io...
..
..
..
{"level":"debug","ts":"2025-04-27T14:11:56.928Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"tagging","operation":"GetResources","params":"{\n  ResourceARNList: [\"ar    n:aws:vpc-lattice:ap-northeast-2:890742582773:targetgroup/tg-0801dd4146dc6b81a\"]\n}"}
{"level":"info","ts":"2025-04-27T14:11:57.031Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:122","msg":"Setting customer-domain-name: server.example.com for route se    rver-apps"}
{"level":"debug","ts":"2025-04-27T14:11:57.131Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:141","msg":"Added service server-apps to the stack (ID server-apps)"}
{"level":"debug","ts":"2025-04-27T14:11:57.131Z","logger":"controller.route","caller":"gateway/model_build_listener.go:23","msg":"Listener parentRef SectionName is http"}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_listener.go:26","msg":"Building Listener for Route server-apps"}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_listener.go:113","msg":"Added listener server-apps to the stack (ID id-30e2286f178f6d12b813    39b408a83399dfca872e50a93aa718b1bdc94a4891ae)"}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:84","msg":"Building rules for 1 listeners"}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_rule.go:35","msg":"Processing 1 rules"}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_rule.go:47","msg":"Processing rule match"}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_rule.go:109","msg":"Examining pathmatch type PathPrefix value / for for httproute server-ap    ps "}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_rule.go:119","msg":"Using PathMatchPathPrefix for httproute server-apps "}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_rule.go:226","msg":"Processing Service backendRef server-apps"}
{"level":"debug","ts":"2025-04-27T14:11:57.132Z","logger":"controller.route","caller":"gateway/model_build_targetgroup.go:298","msg":"buildTargetGroupSpec, kind Service"}
{"level":"debug","ts":"2025-04-27T14:11:57.339Z","logger":"controller.route","caller":"gateway/model_build_targetgroup.go:264","msg":"Added target group for backendRef server to the stack id-04a226f    32a613389675e703df595c17351b8e9b3a2c73bebba6b151dc58951f4"}
{"level":"debug","ts":"2025-04-27T14:11:57.339Z","logger":"controller.route","caller":"gateway/model_build_targets.go:87","msg":"Processing targets for service server-apps"}
{"level":"debug","ts":"2025-04-27T14:11:57.440Z","logger":"controller.route","caller":"gateway/model_build_rule.go:91","msg":"Added rule 1 to the stack (ID id-5610ea550f80f98120e82830db4bdf3b9dce19f    8074baba6d2e694f6d5dd8d7f)"}
{"level":"debug","ts":"2025-04-27T14:11:57.440Z","logger":"controller.route","caller":"lattice/target_group_synthesizer.go:321","msg":"Route TargetGroup arn:aws:vpc-lattice:ap-northeast-2:8907425827    73:targetgroup/tg-0801dd4146dc6b81a (k8s-apps-server-lvbhxhudni) is up to date"}
{"level":"debug","ts":"2025-04-27T14:11:57.440Z","logger":"controller.route.tg-gc","caller":"deploy/stack_deployer.go:178","msg":"gc stats","delete_attempts":0,"delete_success":0,"duration":0.583860    072}
{"level":"debug","ts":"2025-04-27T14:12:26.909Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"VPC Lattice","operation":"ListTargetGroups","params":"{\n\n}"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"tagging","operation":"GetResources","params":"{\n  ResourceARNList: [\"ar    n:aws:vpc-lattice:ap-northeast-2:890742582773:targetgroup/tg-0801dd4146dc6b81a\"]\n}"}
{"level":"info","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:122","msg":"Setting customer-domain-name: server.example.com for route se    rver-apps"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:141","msg":"Added service server-apps to the stack (ID server-apps)"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_listener.go:23","msg":"Listener parentRef SectionName is http"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_listener.go:26","msg":"Building Listener for Route server-apps"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_listener.go:113","msg":"Added listener server-apps to the stack (ID id-30e2286f178f6d12b813    39b408a83399dfca872e50a93aa718b1bdc94a4891ae)"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:84","msg":"Building rules for 1 listeners"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_rule.go:35","msg":"Processing 1 rules"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_rule.go:47","msg":"Processing rule match"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_rule.go:109","msg":"Examining pathmatch type PathPrefix value / for for httproute server-ap    ps "}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_rule.go:119","msg":"Using PathMatchPathPrefix for httproute server-apps "}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_rule.go:226","msg":"Processing Service backendRef server-apps"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_targetgroup.go:298","msg":"buildTargetGroupSpec, kind Service"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_targetgroup.go:264","msg":"Added target group for backendRef server to the stack id-04a226f    32a613389675e703df595c17351b8e9b3a2c73bebba6b151dc58951f4"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_targets.go:87","msg":"Processing targets for service server-apps"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"gateway/model_build_rule.go:91","msg":"Added rule 1 to the stack (ID id-5610ea550f80f98120e82830db4bdf3b9dce19f    8074baba6d2e694f6d5dd8d7f)"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route","caller":"lattice/target_group_synthesizer.go:321","msg":"Route TargetGroup arn:aws:vpc-lattice:ap-northeast-2:8907425827    73:targetgroup/tg-0801dd4146dc6b81a (k8s-apps-server-lvbhxhudni) is up to date"}
{"level":"debug","ts":"2025-04-27T14:12:26.925Z","logger":"controller.route.tg-gc","caller":"deploy/stack_deployer.go:178","msg":"gc stats","delete_attempts":0,"delete_success":0,"duration":0.069680    874}
{"level":"debug","ts":"2025-04-27T14:12:56.916Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"VPC Lattice","operation":"ListTargetGroups","params":"{\n\n}"}
{"level":"debug","ts":"2025-04-27T14:12:56.937Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"tagging","operation":"GetResources","params":"{\n  ResourceARNList: [\"ar    n:aws:vpc-lattice:ap-northeast-2:890742582773:targetgroup/tg-0801dd4146dc6b81a\"]\n}"}
{"level":"info","ts":"2025-04-27T14:12:56.937Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:122","msg":"Setting customer-domain-name: server.example.com for route se    rver-apps"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:141","msg":"Added service server-apps to the stack (ID server-apps)"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_listener.go:23","msg":"Listener parentRef SectionName is http"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_listener.go:26","msg":"Building Listener for Route server-apps"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_listener.go:113","msg":"Added listener server-apps to the stack (ID id-30e2286f178f6d12b813    39b408a83399dfca872e50a93aa718b1bdc94a4891ae)"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_lattice_service.go:84","msg":"Building rules for 1 listeners"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_rule.go:35","msg":"Processing 1 rules"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_rule.go:47","msg":"Processing rule match"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_rule.go:109","msg":"Examining pathmatch type PathPrefix value / for for httproute server-ap    ps "}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_rule.go:119","msg":"Using PathMatchPathPrefix for httproute server-apps "}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_rule.go:226","msg":"Processing Service backendRef server-apps"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_targetgroup.go:298","msg":"buildTargetGroupSpec, kind Service"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_targetgroup.go:264","msg":"Added target group for backendRef server to the stack id-04a226f    32a613389675e703df595c17351b8e9b3a2c73bebba6b151dc58951f4"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_targets.go:87","msg":"Processing targets for service server-apps"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"gateway/model_build_rule.go:91","msg":"Added rule 1 to the stack (ID id-5610ea550f80f98120e82830db4bdf3b9dce19f    8074baba6d2e694f6d5dd8d7f)"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route","caller":"lattice/target_group_synthesizer.go:321","msg":"Route TargetGroup arn:aws:vpc-lattice:ap-northeast-2:8907425827    73:targetgroup/tg-0801dd4146dc6b81a (k8s-apps-server-lvbhxhudni) is up to date"}
{"level":"debug","ts":"2025-04-27T14:12:56.938Z","logger":"controller.route.tg-gc","caller":"deploy/stack_deployer.go:178","msg":"gc stats","delete_attempts":0,"delete_success":0,"duration":0.081598    838}
{"level":"debug","ts":"2025-04-27T14:13:26.902Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"VPC Lattice","operation":"ListTargetGroups","params":"{\n\n}"}
{"level":"debug","ts":"2025-04-27T14:13:26.925Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"tagging","operation":"GetResources","params":"{\n  ResourceARNList: [\"ar    n:aws:vpc-lattice:ap-northeast-2:890742582773:targetgroup/tg-0801dd4146dc6b81a\"]\n}"}
{"level":"debug","ts":"2025-04-27T14:13:26.925Z","logger":"controller.route","caller":"lattice/target_group_synthesizer.go:184","msg":"TargetGroup arn:aws:vpc-lattice:ap-northeast-2:890742582773:tar    getgroup/tg-0801dd4146dc6b81a (k8s-apps-server-lvbhxhudni) is referenced by lattice service"}
{"level":"debug","ts":"2025-04-27T14:13:26.925Z","logger":"controller.route.tg-gc","caller":"deploy/stack_deployer.go:178","msg":"gc stats","delete_attempts":0,"delete_success":0,"duration":0.068585    611}
{"level":"debug","ts":"2025-04-27T14:13:56.908Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"VPC Lattice","operation":"ListTargetGroups","params":"{\n\n}"}
{"level":"debug","ts":"2025-04-27T14:13:56.932Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"tagging","operation":"GetResources","params":"{\n  ResourceARNList: [\"ar    n:aws:vpc-lattice:ap-northeast-2:890742582773:targetgroup/tg-0801dd4146dc6b81a\"]\n}"}
{"level":"debug","ts":"2025-04-27T14:13:56.933Z","logger":"controller.route","caller":"lattice/target_group_synthesizer.go:184","msg":"TargetGroup arn:aws:vpc-lattice:ap-northeast-2:890742582773:tar    getgroup/tg-0801dd4146dc6b81a (k8s-apps-server-lvbhxhudni) is referenced by lattice service"}
{"level":"debug","ts":"2025-04-27T14:13:56.933Z","logger":"controller.route.tg-gc","caller":"deploy/stack_deployer.go:178","msg":"gc stats","delete_attempts":0,"delete_success":0,"duration":0.076571    246}
{"level":"debug","ts":"2025-04-27T14:14:26.907Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"VPC Lattice","operation":"ListTargetGroups","params":"{\n\n}"}
{"level":"debug","ts":"2025-04-27T14:14:26.925Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"tagging","operation":"GetResources","params":"{\n  ResourceARNList: [\"ar    n:aws:vpc-lattice:ap-northeast-2:890742582773:targetgroup/tg-0801dd4146dc6b81a\"]\n}"}
{"level":"debug","ts":"2025-04-27T14:14:26.925Z","logger":"controller.route","caller":"lattice/target_group_synthesizer.go:184","msg":"TargetGroup arn:aws:vpc-lattice:ap-northeast-2:890742582773:tar    getgroup/tg-0801dd4146dc6b81a (k8s-apps-server-lvbhxhudni) is referenced by lattice service"}
{"level":"debug","ts":"2025-04-27T14:14:26.925Z","logger":"controller.route.tg-gc","caller":"deploy/stack_deployer.go:178","msg":"gc stats","delete_attempts":0,"delete_success":0,"duration":0.069091    471}
{"level":"debug","ts":"2025-04-27T14:14:56.907Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"VPC Lattice","operation":"ListTargetGroups","params":"{\n\n}"}
{"level":"debug","ts":"2025-04-27T14:14:56.933Z","logger":"cloud","caller":"aws/cloud.go:65","msg":"response","serviceName":"tagging","operation":"GetResources","params":"{\n  ResourceARNList: [\"ar    n:aws:vpc-lattice:ap-northeast-2:890742582773:targetgroup/tg-0801dd4146dc6b81a\"]\n}"}
{"level":"debug","ts":"2025-04-27T14:14:56.933Z","logger":"controller.route","caller":"lattice/target_group_synthesizer.go:184","msg":"TargetGroup arn:aws:vpc-lattice:ap-northeast-2:890742582773:tar    getgroup/tg-0801dd4146dc6b81a (k8s-apps-server-lvbhxhudni) is referenced by lattice service"}
  • 로그를 보면, server라는 이름의 service와 my-services라는 이름의 gateway의 생성을 감지하여, reconcile 작업을 수행하는 것을 확인할 수 있습니다.
  • 이어서 server-apps라는 이름(HTTPRoute의 metadata.name 및 metadata.namespace를 사용)으로 구성된 Route 대상에 라우팅 하기 위해 server.example.com이라는 사용자 지정 도메인 이름을 세팅하고, VPC Lattice Service를 구성합니다.
  • 그리고 VPC Lattice Service에 대해 Listener rule을 생성하고 HTTPRoute 매니페스트 내용에 맞춰 PathPrefix를 구성하고, backendRefs에 대한 대상 그룹을 생성합니다.
  • 대상 그룹에는 Service를 참조하여 라우팅 대상 Pod의 IP 주소 및 Port 번호를 세팅합니다.
  • 실습 리소스 정리
terraform destroy -target="module.client_vpc" -auto-approve
terraform destroy -target="module.cluster_vpc" -auto-approve
terraform destroy -target=aws_route53_zone.primary -auto-approve

terraform destroy -target="module.client_sg" -auto-approve
terraform destroy -target="module.endpoint_sg" -auto-approve

terraform destroy -target="module.client" -auto-approve
terraform destroy -target="module.vpc_endpoints" -auto-approve

terraform destroy -target="module.eks" -auto-approve
terraform destroy -target="module.addons" -auto-approve

terraform destroy -auto-approve

 

728x90