상세 컨텐츠

본문 제목

K8S ingress에 대하여

Ops/Kubernetes

by 크리두 2021. 6. 24. 00:56

본문

반응형

인그레스 (ingress)

보통 일반적으로 ingress의 의미는 외부에서 내부로 들어오는 것을 뜻하는 단어이다. 네트워크에서는 외부에서 서버로 유입되는 트래픽을 의미하며, 인그레스 네트워크는 인그레스 트래픽을 처리하기 위한 네트워크를 의미한다.

외부 요청을 어떻게 처리할 것인지 네트워크 7 계층 (OSI 7 layer)에서 정의하는 쿠버네티스 오브젝트이다. 인그레스 오브젝트가 담당하는 기본적인 기능은 다음과 같다.

  • 외부 요청의 라우팅
    • /readyz, /auth 등과 같이 특정 경로로 들어오는 요청을 어떠한 서비스로 전달하지 정의하는 라우팅 규칙 설정
  • 가상 호스트 기반의 요청 처리
    • 같은 IP에 대해 다른 도메인 이름으로 요청이 들어오면 어떻게 처리할지 정의
  • SSL/TLS 보안 연결 처리
    • 여러 개의 서비스로 요청을 라우팅할 때 보안 연결을 위한 인증서 적용

사용 이유

NodePort, LoadBalancer 타입의 서비스를 사용해도 구현하는 것이 불가능하지는 않지만 인그레스를 왜 이용해야 하는지 알아보자.

예를 들어 application 3개의 deployment로 생성되어 있다고 가정해 본다. 각 deployment를 외부에 노출해야 한다면 NodePort 또는 LoadBalancer 타입의 서비스 3개를 생성하는 방법이 있다. 각 deployment에 대응하는 서비스를 하나하나씩 연결해주는 방법이다.

이렇게도 기능 구현은 가능하겠지만, 서비스마다 세부적인 설정을 할 때 굉장히 귀찮아진다. 접근 도메인 및 클라이언트 상태, SSL/TLS 보안 연결을 기반한 라우팅 등을 구현한다고 할 때 각 deployment에 일일히 설정을 해야 하기 때문이다.

이러한 복잡성을 해결하기 위해 ingress 오브젝트를 사용하면 URL 엔드포인트를 단 하나만 생성하여 관리를 할 수 있다.

다시 정리하자면 라우팅 정의나 보안 연결 등과 같은 세부 설정은 서비스와 deployment가 아닌 ingress에 의해 수행이 된다. 외부 요청에 대한 처리 규칙을 쿠버네티스가 제공하는 ingress 오브젝트를 통하여 관리를 편하게 할 수 있다.

ingress 구조

apiVersion: v1
kind: Ingress
metadata:
  name: ingress-sample
  annotaions:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: example.com                         # (1)
    http:
      paths:
      - path: /hostname                       # (2)
        backend:
          serviceName: hostname-service       # (3)
          servicePort: 80

위 예제 yaml을 통해 ingress 구조를 간단히 살펴보자. [1] example.com 이라는 호스트 명으로 접근하는 네트워크 요청에 대해서 Ingress 규칙을 적용하되, [2] /hostname이라는 경로로 접근하는 요청을 [3] hostname-service 라는 이름의 Service의 80 포트로 전달하라는 뜻이다. hostname-service는 미리 생성되어 있다고 가정한다.

그러나 위 YAML 파일로부터 Ingress만 생성해서는 아무 일도 일어나지 않는다. Ingress는 단지 Ingress 규칙을 정의하는 선언적인 오브젝트일 뿐, 외부 요청을 받아들이는 처리하게 되는 실제 서버가 아니기 때문이다. Ingress를 활성화하기 위해서는 Ingress Controller라고 하는 특수한 서버 컨테이너에 적용되어야만 적용된 규칙이 활성화된다. 즉, Ingress Controller가 외부로부터 네트워크 요청을 수신했을 때, Ingress 규칙에 기반해 이 요청을 어떻게 처리할지를 결정한다.

반응형

'Ops > Kubernetes' 카테고리의 다른 글

Elastic Cloud on Kubernetes 설치  (0) 2022.10.23
RBAC Authorization  (0) 2021.10.20
Private 도커 Registry 설치 및 설정  (0) 2020.11.10
K8S Master Clustering 설치 및 구성  (0) 2020.05.28
K8S node Internal IP 변경  (0) 2020.04.23

관련글 더보기

댓글 영역