본문 바로가기

✋ 개념이해/인프라 관련

EKS, ALB, Ingress의 Gateway 역할에 대한 정리

# 쿠버네티스에서 MSA를 구현하기 위해서는 API 게이트웨이 역할을 해주는 ALB와 Ingress가 존재 하는데, 어떤 방식과 구조로 분기를 해주는지 정리 한다.

예시) 아래와 같은 정보를 조회 했을때, Ingress는 ALB에서 받는 트래픽이라고 볼 수 있다.

보통 ALB는 퍼블릭 서브넷에 존재 하므로 사용자들의 트래픽을 받는 최초의 통로라고 볼 수 있을 것이다.

그렇다면 어떻게 ALB가 80으로만 트래픽을 받는데 포트별로 나누어진 서비스를 호출할 수 있을까?

$ kubectl get ingress -n new-app                                                                                                                 
NAME      CLASS    HOSTS   ADDRESS                   PORTS   AGE
new-app   <none>   *       12345.elb.amazonaws.com   80      47h

$ kubectl get svc -n new-app
NAME          TYPE           CLUSTER-IP       EXTERNAL-IP                              PORT(S)          AGE
new-app-elb   LoadBalancer   172.20.114.83    12345.ap-northeast-2.elb.amazonaws.com   7778:31917/TCP   46h
new-app       NodePort       172.20.149.155   <none>                                   3000:30548/TCP   47h

그것은 EKS에서 pod를 생성할때 deplotment.yaml에 정의하는 port를 기준으로 해당 서비스를 호출하게 된다.

예시로 아래의 deplotment.yaml 파일을 eks에서 실행 한다고 가정한다.

아래의 파일 내용 하단에 존재하는 container port를 기준으로 해당 서비스가 실행 된다고 볼 수 있다.

- Deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: new-app
  labels:
    app: new-app
  namespace: new-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: new-app
  template:
    metadata:
      labels:
        app: new-app
    spec:
      containers:
      - image: image_address
        imagePullPolicy: Always
        name: new-app
        ports:
            - containerPort: 3000
              protocol: TCP

- Service.yaml

apiVersion: v1
kind: Service
metadata:
  name: new-app
  annotations:
    alb.ingress.kubernetes.io/healthcheck-path: "/healthy"
  namespace: new-app
spec:
  selector:
     app: new-app
  type: NodePort
  ports:
  - port: 3000
    protocol: TCP
    targetPort: 3000

- Ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: new-app
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: instance
  namespace: new-app
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "new-app"
                port:
                  number: 3000

그렇다면 간단하게 구성 절차와 flow를 보면서 정리를 하면 아래와 같다.

- 구성절차 : 1. Pod 생성 / Deployment.yaml 정의 → 2. Service 생성 / Service.yaml → 3. Ingress 생성 / Ingress.yaml

- Workflow

EKS + ALB 정리.drawio
0.03MB

※ Ingress 서비스 확인하기

https://catalog.us-east-1.prod.workshops.aws/workshops/9c0aa9ab-90a9-44a6-abe1-8dff360ae428/ko-KR/70-deploy-service/100-flask-backend

 

Workshop Studio

 

catalog.us-east-1.prod.workshops.aws

Ingress 서비스 적용 후 정리 예정...!

 

끝.