APP MESH 설치

이 실습은 오픈 소스 AWS App Mesh Controller for Kubernetes를 설치하고 사용하는 과정을 안내합니다. AWS App Mesh Controller for K8s는 Kubernetes 클러스터에 대한 AWS App Mesh 리소스를 관리하고 Kubernetes Pod에 사이드카를 주입하는 데 도움이 되는 컨트롤러입니다.

컨트롤러는 Mesh, VirtualNode, VirtualService, VirtualRouter, VirtualGateway 및 GatewayRoute와 같은 CRD(사용자 지정 리소스)를 유지관리합니다. App Mesh 컨트롤러를 사용할 때 servicedeployment와 같은 기본 Kubernetes 리소스를 관리하는 것과 동일한 방법으로 Kubernetes API를 통해 VirtualServiceVirtualNode와 같은 App Mesh 사용자 지정 리소스를 관리합니다.

컨트롤러는 Kubernetes 개체를 모니터링하며 App Mesh 리소스가 생성되거나 변경될 때 이러한 변경 사항을 AWS App Mesh에 반영합니다. App Mesh 리소스 사양은 App Mesh 컨트롤러 프로젝트에서 제공하는 CRD(사용자 지정 리소스 정의)를 사용하여 수행됩니다. 이러한 사용자 지정 리소스는 아래 App Mesh API 개체에 매핑됩니다.

어플리케이션의 Pod가 Mesh에 연결되려면 오픈 소스 Envoy 프록시 컨테이너가 포드 내에 사이드카 컨테이너로 실행되어야 합니다. 이렇게 하면 AWS App Mesh가 제어하는 데이터 영역이 설정됩니다. 따라서 Product Catalog App 배포의 각 포드 내에서 Emply 컨테이너를 실행해야 합니다. App Mesh는 기본 마이크로서비스로의 모든 ingress 와 egress 트래픽에 대한 Envoy sidecar 컨테이너를 사용합니다.

컨트롤러는 애플리케이션 포드에 Envoy 프록시 컨테이너를 만들고 주입하는 것과 같은 일상적인 App Mesh 작업을 처리합니다. 자동 sidecar injection 은 네임스페이스 단위로 webhook를 활성화함으로써 제어됩니다.

제품 카탈로그 애플리케이션 서비스는 아래 App Mesh 구성을 사용하며, 이를 생성하는 방법에 대해 자세히 알아보겠습니다.

1. App Mesh 설치

App Mesh를 설치하기 위해서 Helm Chart가 설치되어 있어야 합니다.

EKS Charts 레포지토리를 추가하여 AWS App Mesh를 설치합니다.

helm repo add eks https://aws.github.io/eks-charts

네임스페이스 appmesh-system 을 생성하고 OIDC 와 IRSA(IAM for Service Account) 를 생성합니다.

# Create the namespace
kubectl create ns appmesh-system

# Install the App Mesh CRDs
kubectl apply -k "github.com/aws/eks-charts/stable/appmesh-controller//crds?ref=master"

# Create your OIDC identity provider for the cluster
eksctl utils associate-iam-oidc-provider \
  --cluster eksworkshop-eksctl \
  --approve

# Download the IAM policy for AWS App Mesh Kubernetes Controller
curl -o controller-iam-policy.json https://raw.githubusercontent.com/aws/aws-app-mesh-controller-for-k8s/master/config/iam/controller-iam-policy.json

# Create an IAM policy called AWSAppMeshK8sControllerIAMPolicy
aws iam create-policy \
    --policy-name AWSAppMeshK8sControllerIAMPolicy \
    --policy-document file://controller-iam-policy.json

# Create an IAM role for the appmesh-controller service account
eksctl create iamserviceaccount --cluster eksworkshop-eksctl \
    --namespace appmesh-system \
    --name appmesh-controller \
    --attach-policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSAppMeshK8sControllerIAMPolicy  \
    --override-existing-serviceaccounts \
    --approve

App Mesh 컨트롤러를 appmesh-system 네임스페이스에 설치합니다.

helm upgrade -i appmesh-controller eks/appmesh-controller \
    --namespace appmesh-system \
    --set region=$AWS_REGION \
    --set serviceAccount.create=false \
    --set serviceAccount.name=appmesh-controller \
    --set tracing.enabled=true \
    --set tracing.provider=x-ray

Controller 버전이 v1.0.0 이상인지 확인합니다.

kubectl get deployment appmesh-controller \
    -n appmesh-system \
    -o json  | jq -r ".spec.template.spec.containers[].image" | cut -f2 -d ':'

App Mesh의 모든 CRD가 생성되었는지 확인합니다.

kubectl get crds | grep appmesh

모든 리소스가 appmesh-system 네임스페이스 내에 생성되었는지 확인합니다.

kubectl -n appmesh-system get all          

Last updated