devnoong.log
article thumbnail
728x90

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

 

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

 

① 소스 코드 다운로드

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

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

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

 

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

 

 

1. 구성 파일 만들기

 

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

cd ~/environment/manifests/

 

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

vi flask-deployment.yaml
---
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

 

vi flask-service.yaml
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

 

vi ingress.yaml
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

 

2. 배포하기

 

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

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

kubectl apply -f flask-deployment.yaml
kubectl apply -f flask-service.yaml
kubectl apply -f ingress.yaml

3. 배포 확인하기

 

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

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

 

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

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

 

 

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

728x90