Product Catalog App 배포
AWS App Mesh를 이해하려면 위에서 실행되는 모든 애플리케이션을 이해하는 것이 가장 좋습니다. 이 실습에서는 애플리케이션 설정 및 배포의 다음 부분에 대해 설명합니다.
애플리케이션 아키텍처에 대해 설명합니다.
Application Services 컨테이너 이미지를 작성합니다.
컨테이너 이미지를 Amazon ECR에 푸시합니다.
처음에는 AWS 앱 메시 없이 Amazon EKS 클러스터에 애플리케이션 서비스를 배포합니다.
서비스 간의 연결을 테스트합니다.
1. Application Architecture
App Mesh를 생성하는 과정을 안내할 애플리케이션 아키텍처의 예는 Product Catalog라고 하며 모든 eCommerce 애플리케이션에 사용됩니다. 이 애플리케이션은 세 가지 마이크로 서비스로 구성됩니다.

프런트엔드
프런트엔드 서비스
frontend-node는 제품 카탈로그 기능에 대한 UI를 보여줍니다.ejs 템플레이팅과 함께 Nodejs에서 개발되었습니다.
EKS 관리 노드 그룹에 배포되었습니다.
제품 카탈로그 백엔드
백엔드 서비스
prodcatalog는 다음 작업을 수행하는 REST API 서비스입니다.제품 카탈로그에 제품을 추가합니다.
제품 카탈로그에서 제품을 가져옵니다.
카탈로그 세부 정보 백엔드 서비스
proddetail를 호출하여 벤더와 같은 제품 카탈로그 세부 정보를 가져옵니다.제품 카탈로그에서 모든 제품을 가져옵니다.
Python Fask Restplus와 Rest API용 Swagger UI가 함께 제공됩니다.
EKS 파게이트에 배치되었습니다.

Catalog Detail 백엔드
백엔드 서비스
proddetail은 다음 작업을 수행하는 REST API 서비스입니다.버전 번호 및 공급업체 이름이 포함된 카탈로그 세부 정보를 가져옵니다.
Nodejs로 배포됩니다.
EKS 관리 노드 그룹에 배포되었습니다.

위의 다이어그램에서 Product Catalog 애플리케이션의 서비스 간 service-call 관계를 다음과 같이 요약할 수 있습니다.  
Frontend
frontend-node»»> calls »»> Product Catalog backendprodcatalog.Product Catalog backend
prodcatalog»»> calls »»> Catalog Detail backendproddetail.
2. Catalog 애플리케이션 생성
3가지 서비스에 대한 Container 이미지를 빌드하여 ECR에 푸시합니다. (약 5분 소요됩니다.)
cd eks-app-mesh-polyglot-demo
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
PROJECT_NAME=eks-app-mesh-demo
export APP_VERSION=1.0
for app in catalog_detail product_catalog frontend_node; do
  aws ecr describe-repositories --repository-name $PROJECT_NAME/$app >/dev/null 2>&1 || \
  aws ecr create-repository --repository-name $PROJECT_NAME/$app >/dev/null
  TARGET=$ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$PROJECT_NAME/$app:$APP_VERSION
  docker build -t $TARGET apps/$app
  docker push $TARGET
done
콘솔에서 ECR내의 이미지를 확인할 수 있습니다.

애플리케이션을 EKS 클러스터에 배포합니다. (Fargate pod 가 생성되기 까지는 약 4분이 소요됩니다.)
envsubst < ./deployment/base_app.yaml | kubectl apply -f -배포된 정보를 확인합니다.
kubectl get deployment,pods,svc -n prodcatalog-ns -o wideProduct Catalog 서비스는 Fargate에 배포되어야 하며(네임스페이스 productlog-ns, label : app= productlog) 백엔드와 Catalog Product Detail은 Mnaged Nodegroup에 배포됩니다.

fargate pod가 service account role을 사용하는지 확인합니다.
export BE_POD_NAME=$(kubectl get pods -n prodcatalog-ns -l app=prodcatalog -o jsonpath='{.items[].metadata.name}') 
kubectl describe pod ${BE_POD_NAME} -n  prodcatalog-ns | grep 'AWS_ROLE_ARN\|AWS_WEB_IDENTITY_TOKEN_FILE\|serviceaccount' 

fargate pod 로깅이 활성화 되었는지 확인합니다.
kubectl describe pod ${BE_POD_NAME} -n  prodcatalog-ns | grep LoggingEnabled

3. 애플리케이션 테스트
Fargate 와 Nodegroup 간에 연결을 확인하여 위해 frontend-node 컨테이너에 접속하여 prodcatalog 백엔트 서비스 엔드포인트를 호출합니다.
export FE_POD_NAME=$(kubectl get pods -n prodcatalog-ns -l app=frontend-node -o jsonpath='{.items[].metadata.name}') 
kubectl -n prodcatalog-ns exec -it ${FE_POD_NAME} -c frontend-node bash
curl http://prodcatalog.prodcatalog-ns.svc.cluster.local:5000/products/ 

이번에는 prodcatalog와 proddetail 간의 연결을 확인합니다. (ctrl+d 로 container에서 빠져나옵니다.)
export BE_POD_NAME=$(kubectl get pods -n prodcatalog-ns -l app=prodcatalog -o jsonpath='{.items[].metadata.name}') 
kubectl -n prodcatalog-ns exec -it ${BE_POD_NAME} -c prodcatalog bash
curl http://proddetail.prodcatalog-ns.svc.cluster.local:3000/catalogDetail

Last updated
Was this helpful?