본문 바로가기

AWS

AWS - k8s Ingress를 활용한 Application Load Balancer(ALB) 생성

728x90

Application Load Balancer (ALB)

ALB란 AWS에서 사용되는 7계층의 로드밸런서 이다.

7계층에서 동작하기 때문에 HTTP, HTTPS 트래픽을 로드밸런싱 할 수 있으며 URL에 따라 트래픽을 서비스로 분기처리 할 수 있다. (반대로 NLB(Network Load Balancer)는 4계층에서 동작한다.)

 

Ingress Controller

쿠버네티스 환경에서 ALB를 생성하기 위해서는, 인그레스 컨트롤러가 필요하다.

보통 aws loadbalancer controller 를 많이 사용하며 클러스터에 설치하여 사용된다. 쿠버네티스 ingress 리소스를 감시하고 ingress yaml 설정에 따라 ALB를 생성하고 구성해준다. 

 

예를들어 아래와 같은 yaml이 있다고 가정해보자.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-alb-ingress
  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: /app1
        pathType: Prefix
        backend:
          service:
            name: my-app1-service
            port:
              number: 80
      - path: /app2
        pathType: Prefix
        backend:
          service:
            name: my-app2-service
            port:
              number: 8080

 

 

1. alb.ingress.kubernetes.io/scheme

해당 설정값에 따라 ALB는 public 또는 private ALB로 생성된다.

internet-facing의 경우 외부에서 접근 가능하도록 퍼블릭 IP 주소로 생성이 되며, internal 타입으로 지정할 경우 private ip가 할당되어 내부 통신 및 로드밸런싱 전용 ALB로 생성된다.

 

2. alb.ingress.kubernetes.io/target-type

해당 설정값을 ip로 지정할 경우 pod ip를 타겟으로 직접 라우팅되며, instance 타입의 경우 인스턴스의 ip 주소로 라우팅된다.

2-1. ip로 지정했을 때

ALB 트래픽을 특정 pod ip주소로 직접 전달하려고 한다. 이때 service가 필요하지 않다는 것이 아니다.

왜냐하면 service를 통해 pod ip를 알아내 ALB에게 전달하기 때문이다. aws loadbalancer controller는 서비스 명에 따라, 서비스가 가지고 있는 엔드포인트를 조회하게 되며 엔드포인트에는 pod의 아이피와 포트 정보가 담겨있다.

2-2. instance로 지정했을 때

ALB 트래픽을 워커노드 ip 주소와 포트로 라우팅하게 된다.

즉 ALB의 타겟그룹이 pod 주소가 아니라 워커노드 인스턴스가 되는 것이다.

다만 워커노드의 포트는 30000 ~ 32767이기 때문에 서비스를 nodeport 또는 loadbalancer 타입으로 생성해줘야 연결될 수 있다.

또한 파드 단위에서 헬스체크를 하지 않기 때문에 단순 로드밸런싱 용도로 사용할 경우 적합하다. 

 

+ 추가 고려사항들

3. alb.ingress.kubernetes.io/group-name

해당 옵션은 여러 개의 ingress를 하나의 ALB로 그룹화 하는 것을 도와준다.

즉 동일한 ALB에 규칙이 여러개 적용되는 것이며, DNS 주소까지 동일하다. 

 

4. alb.ingress.kubernetes.io/security-groups

ALB에 특정 인바운드/아웃바운드 규칙을 적용해야 할 때 사용한다.

예를 들어, 특정 IP 대역에서만 접근을 허용하거나 특정 포트만 개방하는 보안 그룹을 연결할 수 있다.

 

+ 인그레스 규칙에 따라, /app1 /app2 경로를 확인하여 특정 서비스로 전달해준다.

728x90

'AWS' 카테고리의 다른 글

AWS - CIDR block  (0) 2022.09.03
AWS - 윈도우에서 Instance 접속  (0) 2021.05.11
AWS - EC2, Instance 생성  (0) 2021.05.09
AWS - 지역과 가용구역  (0) 2021.05.09