쿠버네티스

[kubernetes] nginx ingress controller 란 무엇일까? - (1)

hayz 2022. 11. 8. 01:39

쿠버네티스를 사용하다보면 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/

- https://github.com/kubernetes/ingress-nginx