Kubernetes용 NGINX Agent가 포함된 NGINX Plus Docker 이미지 빌드

NGINX | 2023년 4월 18일

F5 NGINX Management Suite는 단일 통합 화면에서 NGINX 데이터 플레인을 관리할 수 있는 모듈 제품군입니다. NGINX Open Source 및 NGINX Plus 인스턴스 관리를 간소화함으로써 NGINX Management Suite는 애플리케이션과 API의 확장, 보안 및 모니터링 프로세스를 간소화합니다.

NGINX Management Suite에서 관리하려는 각 NGINX 인스턴스에 NGINX Agent를 설치해야 제어 플레인과 통신하고 원격으로 구성을 관리할 수 있습니다.

베어 메탈 또는 가상 머신(VM)에서 실행되는 NGINX 인스턴스의 경우, 설명서에서 설치 지침을 제공합니다. 이 게시물에서는 Kubernetes 또는 기타 마이크로서비스 인프라에 배포된 NGINX Plus 인스턴스까지 NGINX Management Suite의 관리 범위를 확장할 수 있도록 NGINX Plus 및 NGINX Agent용 Docker 이미지를 빌드하는 방법을 설명합니다.

결과 Docker 이미지에 포함하려는 항목에 따라 다음 세 가지 빌드 옵션을 사용할 수 있습니다:

[편집자 – 이 게시물은 지침을 명확히 하고 ACM_DEVPORTAL 필드를 추가하기 위해 2023년 4월에 Kubernetes에서 Docker 이미지 실행하기의 1단계에서 업데이트되었습니다.]

사전 요구 사항

NGINX Plus 및 NGINX Agent의 Docker 이미지를 만드는 데 필요한 리소스가 포함된 GitHub 리포지토리를 제공합니다. 이 리포지토리는 NGINX Management Suite의 Instance Manager 모듈 버전 2.8.0 이상을 지원합니다.

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

  • Linux 호스트(베어 메탈 또는 VM)
  • Docker 20.10+
  • 대상 Docker 이미지를 푸시할 수 있는 프라이빗 레지스트리
  • Instance Manager가 포함된 실행 중인 NGINX Management Suite 인스턴스. 개발자 포털 지원을 활용하려면 API Connectivity Manager도 필요합니다.
  • NGINX Plus 구독(또는 30일 무료 평가판) 및 선택 사항인 NGINX App Protect

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

  • 실행 중인 Kubernetes 클러스터
  • kubectl을(를) 사용하여 Kubernetes 클러스터에 액세스할 수 있어야 함

Docker 이미지 빌드하기

다음 지침에 따라 Docker 이미지를 빌드하세요.

  1. GitHub 리포지토리를 복제합니다:
$ git clone https://github.com/nginxinc/NGINX-Demos Cloning into 'NGINX-Demos'... 
remote: Enumerating objects: 126, done. 
remote: Counting objects: 100% (126/126), done. 
remote: Compressing objects: 100% (85/85), done. 
remote: Total 126 (delta 61), reused 102 (delta 37), pack-reused 0 
Receiving objects: 100% (126/126), 20.44 KiB | 1.02 MiB/s, done. 
Resolving deltas: 100% (61/61), done.
  1. 빌드 디렉터리로 이동합니다:
$ cd NGINX-Demos/nginx-agent-docker/
  1. Docker가 실행 중인지 확인하려면 docker ps 명령을 실행한 다음, Docker 이미지에 원하는 소프트웨어를 포함하도록 build.sh 스크립트를 실행합니다. 기본 옵션은 다음과 같습니다. 추가 옵션은 다음과 같습니다. 소프트웨어 조합별 명령은 다음과 같습니다. 다음은 기본 이미지의 빌드 추적 샘플입니다. 마지막에 표시되는 Build complete 메시지는 빌드가 성공했음을 나타냅니다.
$ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -n https://nim.f5.ff.lan => Target docker image is nginx-plus-with-agent:2.7.0 
[+] Building 415.1s (10/10) FINISHED 
=> [internal] load build definition from Dockerfile
=> transferring dockerfile: 38B
=> [internal] load .dockerignore 
=> transferring context: 2B 
=> [internal] load metadata for docker.io/library/centos:7
=> [auth] library/centos:pull token for registry-1.docker.io
=> CACHED [1/4] FROM docker.io/library /centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
=> [internal] load build context 
=> transferring context: 69B 
=> [2/4] RUN yum -y update  && yum install -y wget ca-certificates epel-release curl  && mkdir -p /deployment /etc/ssl/nginx  && bash -c 'curl -k $NMS_URL/install/nginx-agent | sh' && echo "A  299.1s 
=> [3/4] COPY ./container/start.sh /deployment/
=> [4/4] RUN --mount=type=secret,id=nginx-crt,dst=/etc/ssl/nginx/nginx-repo.crt  --mount=type=secret,id=nginx-key,dst=/etc/ssl/nginx/nginx-repo.key  set -x  && chmod +x /deployment/start.sh &  102.4s  
=> exporting to image 
=> exporting layers 
=> writing image sha256:9246de4af659596a290b078e6443a19b8988ca77f36ab90af3b67c03d27068ff 
=> naming to registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 
=> Build complete for registry.ff.lan:31005/nginx-plus-with-agent:2.7.0
  1. Kubernetes에서 Docker 이미지 실행하기 다음 지침에 따라 Deployment 매니페스트를 준비하고 Kubernetes에서 NGINX Agent가 포함된 NGINX Plus를 시작하세요. 시작하기 이 게시물에서 소개한 NGINX 솔루션을 사용해 보려면 지금 30일 무료 평가판을 시작하거나 사용 사례에 대해 논의하려면 문의해 주세요. 다운로드: NGINX Agent – 무료 오픈 소스입니다.
    • ‑C – NGINX Plus 라이선스 인증서 파일 이름(nginx-repo.crt 아래 예제 명령어에서 사용)
    • ‑K – NGINX Plus 라이선스 키 파일의 이름(nginx-repo.key은 아래 예제 명령에서 사용됨)
    • ‑t – 다음 형식의 레지스트리 및 대상 이미지: <registry_name>/<image_name>:<tag> (registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 아래 예제 명령에서 사용)
    • ‑n – NGINX Management Suite 인스턴스의 기본 URL(https://nim.f5.ff.lan 아래 예제 명령에서 사용)
    • ‑d – NGINX API Connectivity Manager 사용 시 개발자 포털에 대한 데이터 플레인 지원 추가
    • ‑w – NGINX App Protect WAF 추가
    • NGINX Plus 및 NGINX Agent:
$ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 \ -n https://nim.f5.ff.lan
  • NGINX Plus, NGINX Agent 및 NGINX App Protect WAF(‑w 옵션 추가):
$ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \-t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -w \ -n https://nim.f5.ff.lan
  • NGINX Plus, NGINX Agent 및 개발자 포털 지원(‑d 옵션 추가):
$ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -d \ -n https://nim.f5.ff.lan
  1. 선호하는 텍스트 편집기를 사용하여 manifests/1.nginx-with-agent.yaml 파일을 열고 다음과 같이 변경합니다(코드 조각에서 변경할 수 있거나 반드시 변경해야 하는 기본값은 주황색으로 강조 표시되어 있습니다):
    • In the spec.template.spec.containers 섹션에서 기본 이미지 이름(your.registry.tld/nginx-with-nim2-agent:tag)을 ‑t 옵션을 사용하여 Docker 이미지 빌드의 3단계에서 지정한 Docker 이미지 이름(이 예에서는 registry.ff.lan:31005/nginx-plus-with-agent:2.7.0)으로 바꿉니다.
spec:
  ...
  template:
    ...    
    spec:
      containers:
      - name: nginx-nim
        image: your.registry.tld/nginx-with-nim2-agent:tag
  • In the spec.template.spec.containers.env 섹션에서 표시된 각 value 필드의 name에 대해 다음과 같이 값을 바꿉니다.
spec:
  ...
  template:
    ...    
  spec:
    containers:
      ...
      env:
        - name: NIM_HOST
        ...
          value: "nginx-nim2.nginx-nim2"
        - name: NIM_GRPC_PORT
          value: "443"
        - name: NIM_INSTANCEGROUP
          value: "lab"
        - name: NIM_TAGS
          value: "preprod,devops"
  • NIM_HOST – (필수) 기본값(nginx-nim2.nginx-nim2)을 NGINX Management Suite 인스턴스의 FQDN 또는 IP 주소로 바꿉니다(이 예에서는 nim2.f5.ff.lan).
  • NIM_GRPC_PORT – (선택 사항) 기본값(443)을 gRPC 트래픽에 사용할 다른 포트 번호로 변경합니다.
  • NIM_INSTANCEGROUP – (선택 사항) 기본값(lab)을 NGINX Plus 인스턴스가 속한 인스턴스 그룹으로 바꿉니다.
  • NIM_TAGS – (선택 사항) 기본값(preprod,devops)을 NGINX Plus 인스턴스에 사용할 쉼표로 구분된 태그 목록으로 바꿉니다.
  • 또한 spec.template.spec.containers.env 섹션에서 해당 조건이 적용되는 경우 다음 name‑value 필드 쌍의 주석을 해제합니다.
spec:
  ...
  template:
    ...    
  spec:
    containers:
      ...
      env:
        - name: NIM_HOST
        ...
        #- name: NAP_WAF # value: "true" #- name: NAP_WAF_PRECOMPILED_POLICIES # value: "true"
        ...
        #- name: ACM_DEVPORTAL # value: "true"
  • NIM_WAF 및 NIM_WAF_PRECOMPILED_POLICIES – NGINX App Protect WAF가 이미지에 포함되어 있으므로(Docker 이미지 빌드의 3단계에서 -w 옵션을 포함함) 값은 "true"입니다.
  • ACM_DEVPORTAL – App Connectivity Manager 개발자 포털 지원이 이미지에 포함되어 있으므로(Step 3의 -d 옵션을 Docker 이미지 빌드에 포함함) 값은 "true"입니다.
  1. 다음과 같이 nginxwithAgentStart.sh 스크립트를 실행하여 매니페스트를 적용하고 두 개의 Pod를 시작합니다(매니페스트의 replicas: 2 지시문에 따라 지정됨). 각 Pod에는 NGINX Plus와 NGINX Agent가 포함됩니다: spec 섹션의
$ ./scripts/nginxWithAgentStart.sh start$ ./scripts/nginxWithAgentStart.sh stop
  1. 이제 두 개의 Pod가 실행 중인지 확인합니다. 각 Pod에서는 NGINX Management Suite 컨트롤 플레인과 통신하기 위해 NGINX Plus 인스턴스와 NGINX Agent가 실행됩니다.
$ kubectl get pods -n nim-test  NAME                        READY  STATUS   RESTARTS  AGE 
nginx-nim-7f77c8bdc9-hkkck  1/1    Running  0         1m 
nginx-nim-7f77c8bdc9-p2s94  1/1    Running  0         1m
  1. NGINX Management Suite에서 NGINX Instance Manager GUI에 접속하여 두 개의 NGINX Plus 인스턴스가 다음 상태로 실행 중인지 확인합니다. 온라인. 이 예에서는 NGINX App Protect WAF가 활성화되어 있지 않습니다.
    NGINX Management Suite Instance Manager 버전 2.7.0의 인스턴스 개요 창 스크린샷


공유
태그: F5 NGINX, Tech, 2023

작성자 소개

관련 블로그 게시물

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
NGINX | 2023. 11. 30.

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric

이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
NGINX | 2023. 03. 23.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법

앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
NGINX | 2021. 09. 27.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션

개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX | 2021. 07. 06.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법

NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX | 2021. 06. 30.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리

NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
NGINX | 2015. 03. 25.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유

Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.