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 이미지를 빌드하려면 다음이 필요합니다.
Docker 이미지를 실행하려면 다음이 필요합니다.
kubectl
Docker 이미지를 빌드하려면 다음 지침을 따르세요.
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), 완료.
빌드 디렉토리로 변경:
$ cd NGINX-데모/nginx-에이전트-도커/
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에서 NGINX Agent로 NGINX Plus를 시작하세요.
선호하는 텍스트 편집기를 사용하여 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_WAF
및 NIM_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 # 값: "참"
지정된 대로 nginxwithAgentStart.sh 스크립트를 실행하여 매니페스트를 적용하고 두 개의 포드를 시작합니다( 복제본에서 지정):
2
매니페스트의 사양
섹션에 있는 지침(각각 NGINX Plus 및 NGINX Agent 포함):
$ ./scripts/nginxWithAgentStart.sh 시작 $ ./scripts/nginxWithAgentStart.sh 중지
두 개의 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분
NGINX Management Suite에서 NGINX Instance Manager GUI에 액세스하고 두 개의 NGINX Plus 인스턴스가 Online 상태로 실행 중인지 확인합니다. 이 예에서는 NGINX App Protect WAF가 활성화되어 있지 않습니다.
이 게시물에서 논의된 NGINX 솔루션을 사용해보려면 오늘 30일 무료 체험판을 시작하거나 저희에게 연락하여 사용 사례에 대해 논의해 보세요 .
NGINX Agent를 다운로드하세요. 무료이며 오픈 소스입니다.
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."