ALB Ingress Controller 사용 전에 필요한 선수지식
이라고 쓰고
정확하게 말하자면 AWS EKS에서 Fargate 사용 중에 Ingress와 ALB의 역할 궁금해서 정리한 내용
이라고 읽으면 된다.
AWS Elastic Load Balancing
AWS에서 지원하는 ELB(Elastic Load Balancing)에는 4가지 종류가 있다.
- ALB(Application Load Balancer)
- NLB(Network Load Balancer)
- GLB(Gateway Load Balancer)
- CLB(Classic Load Balancer)
여기서 ALB는
L7 Load Balancer 라고도 하는데, OSI 7 Layer(Application) 계층에서 작동하기 때문임
그러면 NLB는
L4 Load Balancer 라고도 하는데, OSI 4 Layer(Network) 계층에서 작동하기 때문임
정확히는 4 계층은 Transport Layer이기 때문에, L4 로드 밸런서는 네트워크 계층(IP, IPX) 이나 전송 계층(TCP, UDP)의 정보(IP, Port)를 바탕으로 분산함
4가지 밸런서들 특징을 다 알아야 하나?
주관적인 생각인데 로드 밸런서 개념만 알고 있고 상황에 맞게 찾아보고 선택해서 사용하면 될 것 같음.AWS에서는 기본적으로 아래처럼 다른 타입을 사용함
- Kubernetes Ingress를 사용할 때는, Application Load Balancer로 프로 비저닝
- Kubernetes Service를 사용할 때는, Network Load Balncer로 프로 비정닝
ALB와 NLB의 가장 큰 차이점도 알고 있으면 좋아 보임
- ALB의 프로토콜 리스너는 HTTP/HTTPS
- NLB의 프로토콜 리스너는 TCP/UDP
AWS Application Load Balancer(ALB)
애플리케이션 계층(Layer 7)에서 들어오는 트래픽을 K8s 클러스터에서 실행되는 파드 같은 대상에 걸쳐 로드 밸런싱 하는 AWS 서비스
Fargate on EKS와 ALB
- EKS 클러스터에서 Fargate를 사용해서 Pod를 배포한다면 “Fargate 포드에 대한 Ingress 기반 로드 밸런싱”을 할 상황이 있는데, 그러기 위해서는 ALB Ingress Controller를 사용해 ALB를 적용할 수 있다
- 즉, Fargate 형태로 서비스를 구성하고 특정 URL과 해당 서비스를 매칭시켜서 사용자들의 요청을 받기를 원한다면 AWS에서 ALB Ingress Controller를 사용한다라고 알면 될 것 같다.
AWS ALB Ingress controller
- 2가지 트래픽(인스턴스 모드, IP 모드)을 지원함
- 인스턴스 모드 : 클러스터 내 Node를 ALB 대상으로 함. ALB에 도달한 트래픽을 NodePort로 라우팅 후 Pod로 프락시함
- IP 모드 : 파드를 ALB 대상으로 함. ALB에 도달한 트래픽은 POD의 IP로 직접 라우팅함
아래 그림에서 mode IP(파란색 모드)를 보면 파드 부분으로 직접 라우팅 하고
mode Instance(초록, 보라)를 보면 NP(NodePort)로 라우팅 중인 것을 볼 수 있음
그러면 Ingress가 뭔데?
- 클러스터 서비스(일반적으로 HTTP)에 대한 외부 액세스를 관리하는 API 개체
- Ingress는 클러스터 외부에서 클러스터 내 서비스에 연결할 수 있는 URL 제공, 트래픽 부하 분산, SSL/TLS 종료 및 이름 기반 가상 호스팅 제공
Ingress controller는 뭐고?
- Ingress는 사실 규칙 모음이고 저 규칙을 보고 실제 라우팅하는 게 controller 이 놈이다.
- 인그레스 컨트롤러 - 공식문서
예시
- path 경로가 /nginx 요청 시 nignx-service 서비스로 연결
- path 경로가 /hgom 요청 시, hgom-service 서비스로 연결
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: "nginx-ingress"
namespace: "default"
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
labels:
app: nginx-ingress
spec:
rules:
- http:
paths:
- path: /nginx
backend:
serviceName: "nginx-service"
servicePort: 80
- path: /hgom
backend:
serviceName: "hgom-service"
servicePort: 123
처음에 헷갈린 것은 Ingress와 Service의 차이점이었다.
- Service는 Pod를 로드 밸런싱 함. Pod를 묶는 상위 객체
- Ingress는 Service를 로드 밸런싱함. Service를 묶는 상위 객체
참고
'Study > 도커씨와쿠버씨' 카테고리의 다른 글
Docker Compose vs Docker Swarm (0) | 2023.03.08 |
---|---|
내가 볼라고 쓰는 CUDA 부터 pytorch 설치 까지 (2) | 2022.09.16 |
[K8s] 컨테이너 특징 및 리소스 설정, 1 컨테이너 N 프로세스 가능? (0) | 2022.08.06 |
[쿠도읽]쿠버네티스 레이블? 레이블 셀렉터? - (7) (0) | 2022.03.15 |
[쿠도읽] 쿠버네티스 네임스페이스? namespace? - (6) (0) | 2022.03.07 |