본문 바로가기
INFRA/Operation

쿠버네티스 이론 STEP5 Service (3) Ingress - 1

by BTC_김쿼카 2022. 8. 18.

 

ABTCEFG ~ ♪
안녕하세요, 여러분. 
BTC_김쿼카입니다.

 

네트워크 트래픽는 Ingress와 egress로 구분되며, Ingress는 외부로부터 서버 내부로 유입되는 네트워크 트래픽을 의미합니다. 마찬가지로 쿠버네티스에서도 Ingress라는 이름의 리소스 오브젝트가 존재하는데요! 이번 시간에는 쿠버네티스의 Ingress에 대해 알아보는 시간을 가져보도록 할게요.

 


 

1. Ingress

쿠버네티스 서비스는 기본적으로 L4 레이어로 TCP 단에서 Pod를 로드밸런싱하는데요! MSA의 경우, 서비스가 하나의 URL로 대표되는 경우가 많습니다. MSA 서비스 간 라우팅을 하기 위해 API 게이트웨이를 넣는 경우가 많은데 URL 기반의 라우팅의 경우 L7 로드밸런서 정도로 라우팅이 가능하며, 이때 필요한 게 쿠버네티스 Ingress입니다.

> 외부에서 쿠버네티스 클러스터 내부로 들어오는 네트워크 요청, 즉 Ingress 트래픽을 어떻게 처리할지 정의함
> 트래픽 라우팅은 인그레스 리소스에 정의된 규칙에 의해 컨트롤 되며, 인그레스 컨트롤러가 있어야 인그레스를 충족할 수 있음
 

  • HTTP(S) 기반의 L7 로드밸런싱 기능을 제공하는 컴포넌트
  • 외부에서 쿠버네티스에서 실행 중인 Deployment와 Service에 접근하기 위한 Gateway와 같은 역할 담당
  • 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅 제공
  • 임의의 포트 또는 프로토콜을 노출시키지 않음 - HTTP(S) 외의 서비스를 인터넷에 노출하려면 NodePort나 LB 서비스 사용

 

 

사용 예제 : ing-svc.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ing-svc
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: node1.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: app-service
          servicePort: 80
  • node1.example.com 이라는 호스트 명으로 접근하는 네트워크 요청에 대해 Ingress 규칙 적용
  • http 프로토콜을 통해 / 경로로 접근하는 요청을 app-sevice라는 이름의 Service의 80 포트로 전달
  • kubectl apply -f ing-svc.yaml로 생성

 

위의 YAML 파일로부터 Ingress를 생성하더라도 Ingress 규칙을 정의하는 선언적인 오브젝트일 뿐 외부 요청을 받아들이는 실제 서버가 아니기 때문에 Ingress Controller가 적용되지 않으면 Ingress에 적용된 규칙이 활성화되지 않음.

 

 


 

2. Ingress Controller

> 클러스터에서 실행되고 수신 리소스에 따라 HTTP 로드 밸런서를 구성하는 응용 프로그램

  • Ingress의 규칙을 수행하고 Redirection을 관리함
  • 클러스터로 들어오는 요청은 모두 Ingress Controller Pod를 통해서 들어오게 되므로 Ingress Controller는 하나의 endpoint가 됨
  • 인그레스 컨트롤러는 자동으로 실행되지 않고 상황에 맞게 적합한 컨트롤러를 선택하여 설치해야 함
  • 쿠버네티스에서는 GCE와 NGINX를 오픈소스로 제공하고 있음

 

결론적으로 외부에서 사용자가 특정 경로로 접속하게 되면 인그레스를 통해 정의해둔 규칙에 따라 인그레스 컨트롤러가 동작하여 서비스에 맞는 파드로 연결해주는 흐름을 보입니다!

 

 

 

 

 

 

 

 

댓글