devnoong.log
article thumbnail
728x90

웹 서비스를 구성하는 백앤드, 프론트앤드를 Amazon EKS에 배포하는 방법에 대해 알아보도록 하겠습니다.

 

각 서비스를 배포하는 순서는 아래와 같습니다.

 

① 소스 코드 다운로드

② Amazon ECR에 각 서비스에 대한 리포지토리 생성

③ Dockerfile을 포함한 소스 코드 위치에서 컨테이너 이미지 빌드 후, 리포지토리에 푸시

④ 각 서비스에 대한 Deployment, Service, Ingress 매니페스트 파일 생성 및 배포

 

아래의 그림은 사용자가 실제 서비스를 접근하는 순서를 나타냅니다.

 

1.  

2. 1. 구성 파일 만들기

 

먼저 manifests 폴더 위치(/home/ec2-user/environment/manifests)로 이동하도록 하겠습니다.

<bash />
cd ~/environment/manifests/

 

위의 순서대로 진행하기 위해서 deployment , serviceIngress 파일을 생성해보도록 하겠습니다.

<bash />
vi flask-deployment.yaml
<bash />
--- apiVersion: apps/v1 kind: Deployment metadata: name: demo-flask-backend namespace: default spec: replicas: 3 selector: matchLabels: app: demo-flask-backend template: metadata: labels: app: demo-flask-backend spec: containers: - name: demo-flask-backend image: $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/demo-flask-backend:latest imagePullPolicy: Always ports: - containerPort: 8080

 

<bash />
vi flask-service.yaml
<bash />
apiVersion: v1 kind: Service metadata: name: demo-flask-backend annotations: alb.ingress.kubernetes.io/healthcheck-path: "/contents/aws" spec: selector: app: demo-flask-backend type: NodePort ports: - port: 8080 # 서비스가 생성할 포트 targetPort: 8080 # 서비스가 접근할 pod의 포트 protocol: TCP

 

<bash />
vi ingress.yaml
<bash />
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: "backend-ingress" namespace: default annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip spec: rules: - http: paths: - path: /contents pathType: Prefix backend: service: name: "demo-flask-backend" port: number: 8080

 

3. 2. 배포하기

 

이제 위에서 생성한 매니페스트를 아래의 순서대로 배포하도록 하겠습니다.

Ingress를 생성하면 AWS Application Load Balancer(ALB)가 프로비저닝됩니다.

<bash />
kubectl apply -f flask-deployment.yaml kubectl apply -f flask-service.yaml kubectl apply -f ingress.yaml

4. 3. 배포 확인하기

 

아래의 명령어를 통해 접속 url을 확인합니다.

<bash />
echo http://$(kubectl get ingress/backend-ingress -o jsonpath='{.status.loadBalancer.ingress[*].hostname}')/contents/aws

 

접속 url을 통해 배포가 되었는지 확인하면 됩니다.

추가적으로 ec2콘솔창 로드밸런싱탭에서도 활성화 여부를 확인 할 수 있습니다.

 

 

아래는 현재 아키텍처 구조입니다.

728x90