[EKS] 3Tier 구성 - 프론트엔드 서버 구성

이정훈·2023년 7월 10일
0

EKS

목록 보기
6/9
post-thumbnail

1. 엔드포인트

  • 프론트엔드에서 백엔드로 데이터를 요청할 때는 서비스의 엔드포인트 주소로 요청을 보낼 수 있게 설정한다

  • 단일 클러스터 설정의 경우 서비스의 엔드포인트는 다음과 같다

http://[Service].[Namespace].svc.cluster.local:[Port]
  • 예를 들어, nginx config proxy 주소 설정 시 아래와 같이 입력한다

2. 프론트 엔드 구성!

  • 프론트엔드 서버를 구동할 이미지를 가지고 Deployment를 생성
  • 먼저 네임스페이스 생성
kubectl create namespace web
  • yaml 파일을 작성한다. 파일 이름은 create-front-pod.yaml로 생성
# create-front-pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  namespace: web
spec:
  selector:
    matchLabels:
			# 아래 template.metadata.labels의 key, value와 통일시켜준다
      type: web
  replicas: 4
  strategy:
    type: RollingUpdate
  minReadySeconds: 10
  template:
    metadata:
      labels:
        type: web
    spec:
      containers:
      - name: frontend
				# 아래 주소는 백엔드 디플로이먼트 생성할 때와 같이, ECR에서 사용할 이미지의 URI를 입력한다
        image: 673489540568.dkr.ecr.ap-northeast-2.amazonaws.com/web:23
        ports:
				# 웹서버의 기본 포트인 80번을 listening한다
        - containerPort: 80
      terminationGracePeriodSeconds: 3
  • Deploy 적용
kubectl apply -f create-front-pod.yaml

  • 백엔드 서버와 통신이 잘 되는지 확인
  • 생성한 웹서버 파드 중 한 개로 접속해, curl 명령어로 통신이 잘 되는지 확인
  • web 서버 파드에 접근
kubectl exec -it [파드 이름] -n web -- /bin/bash
  • curl 명령어 실행
  • 주소는 처음 nginx config에 입력한 것처럼, 백엔드 파드에 연결된 서비스의 엔드포인트와, 그 다음 url의 path까지 입력
curl http://svc-back.app.svc.cluster.local:8000/postings/feed/public
  • 아래와 같이 데이터가 전달되는 내용이 확인되어야 한다

  • 서비스 생성
  • ingress를 통해 트래픽을 전달 받을 서비스를 생성
  • 타입은 내부 통신만을 위해 ClusterIP로 생성
  • 타입을 별도로 지정하지 않으면, 기본적으로 ClusterIP 타입의 서비스가 생성된다
# create-front-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-web
  namespace: web
spec:
  selector:
    type: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  • Sevice 작동
kubectl apply -f create-front-svc.yaml

  • Application Loadbalancer ingress 생성
  • 외부에서 트래픽을 전달해줄 ingress를 생성해야한다
  • ingress를 위치 시킬 서브넷을 지정하기 위해, 각각의 서브넷에 태그를 입력해줘야 한다
Public SubnetPrivate Subnet
kubernetes.io/role/elbkubernetes.io/role/internal-elb
11
  • Worker node에 적용된 보안그룹에도 아래와 같이 태그를 입력한다
---Security Group
kubernetes.io/cluster/[EKS Cluster Name]
shared 또는 owned

이후, 인그레스를 생성할 yaml 파일을 작성한다

# ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-web
  namespace: web
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - pathType: Prefix
            path: /
            backend:
              service:
                name: svc-web
                port:
                  number: 80
kubectl apply -f ingress.yaml

  • 만약, 정상적으로 ingress가 생성됐다면, 아래와 같이 ALB가 생성되어야 한다

  • ALB의 DNS로 접속했을 때, 웹서버가 정상적으로 동작하는지 확인

  • 여기서 이름이 다를 것이다. 왜냐하면 나는 이파일들을 전부 helm으로 묶어서 진행했다. 이건 CICD 부분에서 확인바람!

profile
싱숭생숭늉

0개의 댓글