블로그 | NGINX

NGINX Agent for Kubernetes를 사용하여 NGINX Plus의 Docker 이미지 빌드

NGINX-F5-수평-검정-유형-RGB의 일부
파브리지오 피오루치 썸네일
파브리지오 피오루치
2023년 4월 18일 게시

F5 NGINX 관리 제품군은 단일 창에서 NGINX 데이터 평면을 관리하기 위한 모듈 제품군입니다. NGINX Management Suite는 NGINX 오픈 소스 및 NGINX Plus 인스턴스 관리를 간소화하여 애플리케이션 및 API의 확장, 보안, 모니터링 프로세스를 간소화합니다.

NGINX Management Suite에서 관리하려는 각 NGINX 인스턴스에 NGINX 에이전트를 설치하여 제어 평면과 원격 구성 관리를 통한 통신을 활성화해야 합니다.

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

결과 Docker 이미지에 포함하려는 내용에 따라 세 가지 빌드 옵션이 있습니다.

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

필수 조건

NGINX Management Suite의 Instance Manager 모듈 버전 2.8.0 이상을 지원하여 NGINX Plus와 NGINX Agent의 Docker 이미지를 만드는 데 필요한 리소스의 GitHub 저장소를 제공합니다.

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

  • Linux 호스트(베어 메탈 또는 VM)
  • 도커 20.10+
  • 대상 Docker 이미지를 푸시할 수 있는 개인 레지스트리
  • 개발자 포털에 대한 지원을 활용하려는 경우 Instance Manager 및 API Connectivity Manager가 있는 실행 중인 NGINX Management Suite 인스턴스
  • NGINX Plus 및 선택적으로 NGINX App Protect에 대한 구독( 또는 30일 무료 평가판 )

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

  • 실행 중인 Kubernetes 클러스터
  • Kubernetes 클러스터에 액세스할 수 있는 kubectl

Docker 이미지 빌드

Docker 이미지를 빌드하려면 다음 지침을 따르세요.

  1. GitHub 저장소를 복제합니다.

    $ git clone https://github.com/nginxinc/NGINX-Demos 'NGINX-Demos'에 복제... 원격: 객체 열거: 126, 완료. 원격: 사물 세기: 100% (126/126), 완료. 원격: 객체 압축: 100% (85/85), 완료. 원격: 총 126개(델타 61개), 재사용 102개(델타 37개), 팩 재사용 0개 수신 객체: 100% (126/126), 20.44 KiB | 1.02 MiB/s, 완료. 
    델타 해결: 100% (61/61), 완료.
    
  2. 빌드 디렉토리로 변경:

    $ cd NGINX-데모/nginx-에이전트-도커/
    
  3. docker ps를 실행하여 Docker가 실행 중인지 확인한 다음 build.sh 스크립트를 실행하여 원하는 소프트웨어를 Docker 이미지에 포함합니다. 기본 옵션은 다음과 같습니다.

    • ‑C – NGINX Plus 라이선스 인증서 파일의 이름(아래 샘플 명령의 nginx-repo.crt )
    • ‑K – NGINX Plus 라이선스 키 파일의 이름(아래 샘플 명령의 nginx-repo.key )
    • ‑t – 형식의 레지스트리 및 대상 이미지

      <레지스트리_이름> / <이미지_이름> : <태그>

      (아래 샘플 명령의 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 레지스트리.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 레지스트리.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 레지스트리.ff.lan:31005/nginx-plus-with-agent:2.7.0 -d \ -n https://nim.f5.ff.lan
      

    기본 이미지에 대한 빌드 추적 샘플은 다음과 같습니다. 마지막에 나오는 빌드 완료 메시지는 빌드가 성공적으로 완료되었음을 나타냅니다.

    $ ./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 => 대상 docker 이미지는 nginx-plus-with-agent:2.7.0입니다. [+] 빌드 415.1초(10/10) 완료 => [내부] Dockerfile에서 빌드 정의 로드 => dockerfile 전송: 38B => [내부] .dockerignore 로드 => 컨텍스트 전송: 2B => [내부] docker.io/library/centos:7에 대한 메타데이터 로드 => [인증] registry-1.docker.io에 대한 library/centos:pull 토큰 => docker.io/library /centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4에서 캐시됨 [1/4] => [내부] 빌드 컨텍스트 로드 => 컨텍스트 전송: 69B => [2/4] 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.1초 => [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.4초 => 이미지로 내보내기 => 레이어 내보내기 => 이미지 쓰기 sha256:9246de4af659596a290b078e6443a19b8988ca77f36ab90af3b67c03d27068ff => 이름 지정 registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 => registry.ff.lan:31005/nginx-plus-with-agent:2.7.0에 대한 빌드가 완료되었습니다.
    

    Kubernetes에서 Docker 이미지 실행

    다음 지침에 따라 배포 매니페스트를 준비하고 Kubernetes에서 NGINX Agent로 NGINX Plus를 시작하세요.

    1. 선호하는 텍스트 편집기를 사용하여 manifests/1.nginx-with-agent.yaml을 열고 다음과 같이 변경합니다(코드 조각에는 변경 가능하거나 변경해야 하는 기본값이 주황색으로 강조 표시되어 있음).

      • spec.template.spec.containers 섹션에서 기본 이미지 이름( your.registry.tld/nginx-with-nim2-agent:tag )을 Docker 이미지 빌드 3단계에서 ‑t 옵션으로 지정한 Docker 이미지 이름(이 경우, registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 )으로 바꿉니다.

        spec: ... 템플릿: ... spec: 컨테이너: - 이름: nginx-nim 이미지: your.registry.tld/nginx-with-nim2-agent:tag
        
      • spec.template.spec.containers.env 섹션에서 표시된 각 이름 에 대한 필드에 다음과 같이 대체합니다.

        • 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: ... 템플릿: ... spec: 컨테이너: ... env: - 이름: NIM_HOST ... 값: " nginx-nim2.nginx-nim2 " - 이름: NIM_GRPC_PORT 값: "443 " - 이름: NIM_INSTANCEGROUP 값: " lab " - 이름: NIM_TAGS 값: " preprod,devops "
        
      • 또한 spec.template.spec.containers.env 섹션에서 표시된 조건이 적용되는 경우 다음 이름 - 필드 쌍의 주석 처리를 제거합니다.

        • NIM_WAFNIM_WAF_PRECOMPILED_POLICIES – NGINX App Protect WAF가 이미지에 포함되어 있습니다( Docker 이미지 빌드 의 3단계에서 -w 옵션을 포함했습니다). 따라서 값은 "true" 입니다.
        • ACM_DEVPORTAL – App Connectivity Manager 개발자 포털에 대한 지원이 이미지에 포함되어 있습니다( Docker 이미지 빌드 의 3단계에서 -d 옵션을 포함했습니다). 따라서 값은 "true" 입니다.
        spec: ... 템플릿: ... spec: 컨테이너: ... env: - 이름: NIM_HOST ... #- 이름: NAP_WAF # 값: "true" #- 이름: NAP_WAF_PRECOMPILED_POLICIES # 값: "참" ... #- 이름: ACM_DEVPORTAL # 값: "참"
        
    2. 지정된 대로 nginxwithAgentStart.sh 스크립트를 실행하여 매니페스트를 적용하고 두 개의 포드를 시작합니다( 복제본에서 지정):2 매니페스트의 사양 섹션에 있는 지침(각각 NGINX Plus 및 NGINX Agent 포함):

      $ ./scripts/nginxWithAgentStart.sh 시작 $ ./scripts/nginxWithAgentStart.sh 중지
      
    3. 두 개의 Pod가 실행 중인지 확인합니다. 각 Pod는 NGINX Plus 인스턴스와 NGINX Agent를 실행하여 NGINX Management Suite 제어 평면과 통신합니다.

      $ kubectl get pods -n nim-test 이름 준비 상태 재시작 나이 nginx-nim-7f77c8bdc9-hkkck 1/1 실행 중 0 1분 nginx-nim-7f77c8bdc9-p2s94 1/1 실행 중 0 1분
      
    4. NGINX Management Suite에서 NGINX Instance Manager GUI에 액세스하고 두 개의 NGINX Plus 인스턴스가 Online 상태로 실행 중인지 확인합니다. 이 예에서는 NGINX App Protect WAF가 활성화되어 있지 않습니다.

      NGINX Management Suite Instance Manager 버전 2.7.0의 인스턴스 개요 창 스크린샷

    시작하기

    이 게시물에서 논의된 NGINX 솔루션을 사용해보려면 오늘 30일 무료 체험판을 시작하거나 저희에게 연락하여 사용 사례에 대해 논의해 보세요 .

    NGINX Agent를 다운로드하세요. 무료이며 오픈 소스입니다.


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."