본문 바로가기

DevOps/NGINX

NGINX MSA 디지털 트레이닝 - 5강 : Kubernetes NGINX Ingress Controller

반응형

강의 동영상 : https://www.youtube.com/watch?v=7jzZAUUReMg
원본 동영상 : https://www.youtube.com/watch?v=Q2iGx3iW-Mg
NGINX 공식 문서 : https://docs.nginx.com/nginx-ingress-controller
NGINX Ingress Controller Github : https://github.com/nginxinc/kubernetes-ingress

1. Ingress Controller

  • Ingress
    • Kubernetes Cluster내에서 동작하는 Service들의 Load Balancer 역할을 하는 Kubernetes Cluster의 한 요소
    • 주요 기능
      • Routing 지원 : Host-based Routing이나 Path-based Routing을 통해 Client의 Request들이 알맞은 Service POD들로 전달.
      • TLS/SSL termination 지원
  • NGINX Ingress Controller
    • 기능의 차이는 있지만 NGINX, NGINX Plus 모두 Routing 기능과 TLS/SSL Termination을 지원하는 Ingress Controller 기능을 제공.
    • HTTP 외에 gRPC, Websocket, TCP/UDP Load Balancing 지원.

2. Building the Ingress Controller Image

2.1 Building the Image

1. Clone the ingress controller repo

   $ git clone https://github.com/nginxinc/kubernetes-ingress/
   $ cd kubernetes-ingress
   $ git checkout v2.1.1 // 2022/3/25 현재 2.1.1 이 최신 버전. 동영상에서는 v1.11.2

 

2. Build

   # NGINX case (Debian or Alpine)
   $ make debian-image PREFIX=registry.brwandwarf.com/nginx-ingress TARGET=download
   $ make alpine-image PREFIX=registry.brwandwarf.com/nginx-ingress TARGET=download
  • Remark : registry.brwandwarf.com는 Image가 올라갈 Private Registry의 예이다.
   # NGINX Plus case
   $ cp nginx-repo.* .../kubernetes-ingress
   $ make debian-image PREFIX=registry.brwandwarf.com/nginx-ingress TARGET=download
  • Remark : NGINX Plus image로 Build 하려면 certificate 와 license key file을 Project Root Path에 복사한 후에 Build 해야 한다.
  • 참고 : NGINX와 NGINX Plus의 차이는 간단하게 여기에서 확인할 수 있다 - [Link]

3. Push the image

  • Image Repository에 Image를 Push
    $ make push PREFIX=registry.brwandwarf.com/nginx-ingress
  • Demo에서는 Local Image repository만을 사용하기 때문에 다음 명령과 비슷하게 Build
    $ make debian-image-plus PREFIX=nginx-ingress TARGET=container

3. Installation with Helm

  • Helm은 Kubernetes Package Management Tool로 Chart라 불리는 쿠버네티스 리소스 명세 파일들을 통해 패키지들을 관리한다. Node.js에서 npm과 같은 개념으로 생각하면 된다.
  • Chart : Kubernetes Resource 명세 파일
  • Repository : Chart 저장소
  • [참조]

 

3.1 설치

1. Helm Repository 추가

$ helm repo add nginx-stable https://helm.nginx.com/stable
$ helm repo update

 

2. Installing via Helm Repository ([Link])

  • 'my-release'라는 명칭으로 Install. NGINX Plus의 경우에는 registry.brwandwarf.com라는 이름의 Private Repository에서 Image를 pull 하는 것으로 가정.
  • # For NGINX $ helm install my-release nginx-stable/nginx-ingress ... # For NGINX Plus $ helm install my-release nginx-stable/nginx-ingress --set controller.image.repository=registry.brwandwarf.com/nginx-plus-ingress --set controller.nginxplus=true
  • 동영상 에서는 Local Repository를 사용하기 때문에 아래 Command 사용
  • controller.nginxplus=true는 각종 설정값 중에 하나의 사용 예. Link 하단 참조.
  • $ helm install my-release nginx-stable/nginx-ingress --set controller.image.repository=nginx-plus-ingress --set controller.nginxplus=true
  • 위에까지 실행하면 Nginx ingress controller POD가 동작하는 것을 확인할 수 있다.

 

3.3 Demo

  • 영상에서는 2개의 Coffe Service와 1개의 Tea Service를 실행
  • Pod 확인
  • Service 확인
  • 실행 예