NGINX Management Suite 를 Docker로 빌드하기

올해 초에 NGINX 소프트웨어 솔루션을 위한 Control Plane으로 NGINX Management Suite 를 도입하여 단일 창에서 NGINX Data Plane의 사용자 애플리케이션과 REST API를 구성, 확장, 보안 및 모니터링할 수 있습니다.

NGINX Management Suite는 모듈식 설계를 갖고 있습니다. 핵심은 Instance Manager 모듈로, NGINX Open Source 및 NGINX Plus 인스턴스 전체 플릿(fleet)에 대한 추적, 구성 및 가시성을 제공합니다. 작성 시점 기준으로 API Connectivity Manager는 다른 사용 가능한 모듈이며. API Gateway로 작동하는 NGINX Plus를 관리하고 조율하는 데 사용됩니다.

NGINX Management Suite는 베어 메탈, Linux 가상 머신 또는 컨테이너 환경에서 실행할 수 있습니다. Kubernetes에서 deployment 하는 권장 방법은 제공하는 Helm 차트를 사용하는 것이지만, 특정 목적에 따라 독자적인 Docker 이미지를 작성하고 Helm에 의존하지 않는 사용자 정의 CI/CD 파이프라인을 통해 이미지의 라이프사이클을 관리해야 할 수도 있습니다.

목차

1. 전제 조건
2. Docker 이미지 빌드
3. Kubernetes에서 NGINX Management Suite 실행
4. NGINX Management Suite에 액세스
5. NGINX Management Suite 중지
6. 시작하기

1. 전제 조건

NGINX Management Suite의 Docker 이미지를 생성하기 위해 필요한 자원들이 포함된 GitHub repository를 제공합니다. 해당 repository는 다음과 같은 Instance Manager와 API Connectivity Manager의 버전을 지원합니다.

  • Instance Manager 2.4.0+
  • API Connectivity Manager 1.0.0+
  • Security Monitoring 1.0.0+

Docker 이미지를 빌드하려면 다음이 필요합니다.

  • Linux host (베어 메탈 또는 VM)
  • Docker 20.10+
  • Kubernetes 클러스터에 대한 액세스 권한이 있는 kubectl
  • NGINX Plus 기반 NGINX Ingress Controller 구독(또는 30일 무료 평가판)

Docker 이미지를 실행하려면 다음이 필요합니다.

  • 실행중인 Kubernetes 클러스터
  • Kubernetes 클러스터에 대한 액세스 권한이 있는 kubectl
  • NGINX Plus 기반 NGINX Ingress Controller 구독(또는 30일 무료 평가판)

2. Docker 이미지 빌드

Docker 이미지를 빌드하려면 다음 지침을 따르십시오.

참고: 발행 시점에 NGINX Management Suite UI를 정확하게 나타내기 위해 모든 노력을 기울였으나, UI는 변경될 수 있습니다. 이 지침을 참고로 사용하고 필요에 따라 UI에 맞게 조정하십시오.

1. GitHub 리포지토리를 복제합니다.

$ git clone https://github.com/nginxinc/NGINX-Demos
Cloning into 'NGINX-Demos'... 
remote: Enumerating objects: 215, done. 
remote: Counting objects: 100% (215/215), done. 
remote: Compressing objects: 100% (137/137), done. 
remote: Total 215 (delta 108), reused 171 (delta 64), pack-reused 0 
Receiving objects: 100% (215/215), 2.02 MiB | 1.04 MiB/s, done. 
Resolving deltas: 100% (108/108), done.

2. 빌드 디렉토리로 변경합니다.

$ cd NGINX-Demos/nginx-nms-docker/

3. Docker가 실행 중인지 확인하기 위해 ‘docker ps’ 명령을 실행하고, 그런 다음 ‘buildNIM.sh‘ 스크립트를 사용하여 Docker 이미지를 빌드할 수 있습니다. ‘-i’ 옵션은 자동 빌드 모드를 설정하며, ‘-C’ 및 ‘-K’는 각각 NGINX Management Suite 인증서와 Key의 이름을 지정하는 필수 옵션입니다. ‘-t’ 옵션은 이미지를 푸시할 개인 레지스트리의 위치와 이름을 설정합니다.

$ ./scripts/buildNIM.sh -i -C nginx-repo.crt -K nginx-repo.key -t registry.ff.lan:31005/nginx-nms:2.5.1 
==> Building NGINX Management Suite docker image 
Sending build context to Docker daemon  92.19MB 
Step 1/18 : FROM ubuntu:22.04 
---> a8780b506fa4 
Step 2/18 : ARG NIM_DEBFILE 
---> Running in 0f2354280c34 
Removing intermediate container 0f2354280c34
[...]
---> 0588a050c852 
Step 18/18 : CMD /deployment/startNIM.sh 
---> Running in d0cc5466a43d 
Removing intermediate container d0cc5466a43d 
---> 25117ec0410a 
Successfully built 25117ec0410a 
Successfully tagged registry.ff.lan:31005/nginx-nms:2.5.1 
The push refers to repository [registry.ff.lan:31005/nginx-nms] 
9c4918474e3a: Pushed
42543d044dbb: Pushed
1621b2ec0a5e: Pushed
c6a464fc6a79: Pushed
75fa1d3c61bb: Pushed
3501fcf5dbd8: Pushed
d4a221057e67: Pushed
9ad05eafed57: Pushed
f4a670ac65b6: Pushed
2.5.1: digest: sha256:9a70cfdb63b71dc31ef39e4f20a1420d8202c85784cb037b45dc0e884dad74c9 size: 2425

3. Kubernetes에서 NGINX Management Suite 실행

다음 지침에 따라 Deployment manifest를 준비하고 Kubernetes에서 NGINX Management Suite를 시작하세요.

1. 다운로드한 NGINX Management Suite 라이선스를 Base64로 인코딩하고 출력을 클립보드에 복사합니다.

$ base64 -w0 nginx-mgmt-suite.lic
TulNRS1WZXJz...

2. 선호하는 편집기를 사용하여 manifests/1.nginx-nim.yaml을 열고 다음과 같이 변경합니다.

  • ‘spec.template.spec.containers’ 섹션에서, 이전 섹션의 3단계에서 ‘-t’ 옵션으로 지정한 Docker 이미지를 이름으로 기본 이미지 이름(‘your.registry.tld/nginx-nim2:tag’)을 대체하십시오. (예시의 경우 ‘registry.ff.lan:31005/nginx-nms:2.5.1‘입니다.)
spec:
  ...
  template:
	...
	spec:
  	containers:
      - name: nginx-nim2
	    image: your.registry.tld/nginx-nim2:tag
  • ‘spec.template.spec.containers.env’ 섹션에서, 각 지정된 이름에 대해 값을 필드의 값으로 대체하여 인증 자격 증명을 구성하십시오.
    • NIM-USERNAME – (선택 사항) 기본값인 “admin”을 관리자 계정 이름으로 대체하십시오.
    • NIM_PASSWORD – (필수) 기본값인 “nimadmin”을 강력한 비밀번호로 대체하십시오.
    • NIM_LICENSE – (필수) 이전 단계에서 생성한 base64 인코딩 라이선스로 <BASE_ENCODED_LICENSE_FILE>을 대체하십시오.
spec:
  ...
  template:
    ...
      spec:
        containers:
          ...
          env:
            ...
            - name: NIM_USERNAME
              value: admin
            - name: NIM_PASSWORD
              value: nimadmin
            - name: NIM_LICENSE
              value: "<BASE64_ENCODED_LICENSE_FILE>"

3. manifest/certs 디렉토리 내의 파일을 확인하고 수정하여 TLS offload에 사용되는 TLS 인증서 및 Key를 사용할 FQDN(Fully Qualified Domain Name)을 설정하여 사용자 정의할 수 있습니다. 기본적으로 nimDockerStart.sh 시작 스크립트는 NGINX Ingress Controller를 통해 컨테이너화된 NGINX Management Suite를 게시합니다.

4. 선택적으로, manifests/3.vs.yaml 파일을 편집하고 NGINX Management Suite에 접근하는 데 사용되는 호스트명을 사용자 정의할 수 있습니다. 해당 파일을 열어서 필요한 수정을 진행하십시오.

5. NGINX Management Suite를 kubernetes 클러스터에서 시작하기 위해 nimDockerStart.sh를 실행하십시오. 트레이스에 표시된 대로, 이는 nginx-nim2 pod으로 실행됩니다. 이 스크립트는 백엔드 데이터베이스로 ClickHouse와 분석 시각화를 위한 Grafana를 초기화하는 pod도 생성합니다. 자세한 내용은 GitHub 저장소의 README를 참조하십시오.

$ ./scripts/nimDockerStart.sh start 
namespace/nginx-nim2 created 
~/NGINX-NIM2-Docker/manifests/certs ~/NGINX-NIM2-Docker 
Generating a RSA private key 
.....................................+++++ 
.....................................+++++ 
writing new private key to 'nim2.f5.ff.lan.key' 
----- 
secret/nim2.f5.ff.lan created 
configmap/clickhouse-conf created 
configmap/clickhouse-users created 
persistentvolumeclaim/pvc-clickhouse created 
deployment.apps/clickhouse created 
service/clickhouse created 
deployment.apps/nginx-nim2 created 
service/nginx-nim2 created 
service/nginx-nim2-grpc created 
persistentvolumeclaim/pvc-grafana-data created 
persistentvolumeclaim/pvc-grafana-log created 
deployment.apps/grafana created 
service/grafana created 
virtualserver.k8s.nginx.org/nim2 created 
virtualserver.k8s.nginx.org/grafana created 
~/NGINX-NIM2-Docker

6. 3개의 pods가 현재 실행중인지 확인합니다.

$ kubectl get pods -n nginx-nim2 
NAME                        READY     STATUS    RESTARTS   AGE 
clickhouse-759b65db8c-74pn5   1/1     Running   0          63s 
grafana-95fbbf5c-jczgk        1/1     Running   0          63s 
nginx-nim2-5f54664754-lrhmn   1/1     Running   0          63s

4. NGINX Management Suite에 액세스

NGINX Management Suite에 액세스하려면 브라우저에서 https://nim2.f5.ff.lan (또는 이전 섹션의 4단계에서 설정한 대체 호스트명)으로 이동하십시오. 이전 섹션의 2단계에서 설정한 자격 증명을 사용하여 로그인하십시오.

5. NGINX Management Suite 중지

NGINX Management Suite의 Docker 인스턴스를 중지하고 제거하려면 다음 명령을 실행합니다.

6. 시작하기

이 포스트에서 설명한 NGINX 솔루션을 사용해 보려면 지금 30일 무료 평가판을 시작하거나 NGINX STORE에 연락하여 사용 사례에 대해 논의하십시오.

또한 아래 뉴스레터를 구독하고 NGINX의 최신 정보들을 빠르게 전달 받아보세요.