[kubernetes] nginx ingress controller 란 무엇일까? - (1)
쿠버네티스를 사용하다보면 ingress controller 에 대해서 종종 접해봤을 것입니다. 그리고 그 ingress controller 가 그냥 ingress controller 가 아니고 앞에 "nginx" 가 붙은 형태로 nginx ingress controller 라고 불리는 것을 여지저기서 봤을 수 있습니다.
오늘은 이, ingress controller 가 무엇인가? 그리고 nginx ingress controller 란 무엇인가에 대해서 살펴보도록 하겠습니다.
(쿠버네티스의 기본 리소스들에 대한 이해가 선행되어야 합니다.)
ingress 란?
여기서 말하는 ingress 는, 쿠버네티스에서 사용되는 리소스 중에 하나로, 클러스터 내부에 있는 서버를 외부에서 접근 할 수 있도록 규칙을 정의함으로써 설정할 수 있습니다. 예를 들어, 특정 host 인 foo.example.com 를 test 라고 하는 sevice 에 연결하겠다는 규칙을 등록해놓으면, 외부에서 foo.example.com 로 접근했을때, 해당 serivce 에 연결할 수 있습니다.
인그레스(Ingress)
기능 상태: Kubernetes v1.19 [stable] 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함. 인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공
kubernetes.io
// ingress example
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath
pathType: Prefix
backend:
service:
name: test
port:
number: 80
그러면.. ingress controller 란?
아래의 공식 문서에 따르면, ingress controller 는 ingress 가 동작하기 위해 반드시 필요한 controller 라고 말하고 있습니다. 즉, 위의 ingress 리소스들을 등록해주면 실제로 그 규칙들을 적용해주고 관리해주는 건 이 ingress controller 에서 맡아서 하게 됩니다.
인그레스 컨트롤러
인그레스 리소스가 작동하려면, 클러스터는 실행 중인 인그레스 컨트롤러가 반드시 필요하다. kube-controller-manager 바이너리의 일부로 실행되는 컨트롤러의 다른 타입과 달리 인그레스 컨트롤러
kubernetes.io
우리는 쿠버네티스 클러스터를 생성해서, ingress 리소스 생성까지는 보다 손쉽게 진행할 수 있습니다. 하지만, 실제로 ingress 기능을 이용하기 위해서는 ingress controller 를 생성해야 하고 생성하는 많은 방법 중에 하나가 nginx 를 이용하는 방법입니다.
다음 글에서는 nginx ingress controller 가 어떻게 동작하는지에 대해서 살펴보도록 하겠습니다.
참고
- https://kubernetes.github.io/ingress-nginx/
- https://docs.nginx.com/nginx-ingress-controller/intro/overview/