NGINX Agent 사용하여 Kubernetes에서 NGINX Plus Docker 실행
Control Plane과의 통신 및 원격 구성 관리를 사용하려면 NGINX Management Suite에서 관리하려는 각 NGINX 인스턴스에 NGINX Agent 를 설치해야 합니다.
NGINX Management Suite는 단일 창에서 NGINX Data Plane을 관리하기 위한 모듈 제품군입니다. NGINX Management Suite는 NGINX Open Source 및 NGINX Plus 인스턴스 관리를 간소화하여 애플리케이션과 API를 확장, 보호, 모니터링하는 프로세스를 간소화합니다.
Bare Metal 또는 Virtual Machine(VM)에서 실행되는 NGINX 인스턴스의 경우 설명서에서 설치 지침을 제공합니다. 이 포스트에서는 Kubernetes 또는 기타 Microservices 인프라에 배포된 NGINX Plus 인스턴스로 NGINX Management Suite의 범위를 넓히기 위해 NGINX Plus 및 NGINX Agent 용 Docker 이미지를 빌드하는 방법을 보여드립니다.
Docker 이미지에 포함하려는 항목에 따라 세 가지 빌드 옵션이 있습니다.
- NGINX Plus 및 NGINX Agent 전용
- NGINX Plus, NGINX Agent 및 NGINX App Protect WAF
- NGINX Plus, NGINX Agent, NGINX Management Suite Connectivity Manager 개발자 포털 지원(API Gateway로 실행 중인 NGINX Plus 인스턴스)
목차
1. NGINX Agent 전제 조건
2. Docker 이미지 빌드
3. Kubernetes에서 Docker 이미지 실행
1. NGINX Agent 전제 조건
NGINX Management Suite의 인스턴스 관리자 모듈 버전 2.8.0 이상을 지원하는 NGINX Plus 및 NGINX Agent 의 Docker 이미지를 만드는 데 필요한 리소스가 포함된 GitHub Repository를 제공합니다.
Docker 이미지를 빌드하려면 다음이 필요합니다.
- Linux 호스트( Bare Metal 또는 VM)
- Docker 20.10+
- Docker 이미지를 Push할 수 있는 Private Registry
- 인스턴스 관리자와 함께 실행 중인 NGINX Management Suite 인스턴스, 개발자 포털 지원을 활용하려는 경우 API 연결 관리자가 필요합니다.
- NGINX Plus 구독(또는 30일 무료 평가판) 및 선택 사항인 NGINX App Protect 구독(또는 30일 무료 평가판)
Docker 이미지를 실행하려면 다음이 필요합니다.
- 실행 중인 Kubernetes 클러스터
- Kubernetes 클러스터에 대한 액세스 권한이 있는 kubectl
2. Docker 이미지 빌드
다음 지침에 따라 Docker 이미지를 빌드합니다.
1. GitHub Repository를 Clone합니다.
$ 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.
2. 빌드 디렉터리로 변경합니다.
$ cd NGINX-Demos/nginx-agent-docker/
3. docker ps를 실행하여 Docker가 실행 중인지 확인한 다음 build.sh
스크립트를 실행하여 원하는 소프트웨어를 Docker 이미지에 포함시킵니다. 기본 옵션은 다음과 같습니다.
-C
– NGINX Plus 라이선스 인증서 파일 이름(아래 샘플 명령의nginx-repo.crt
)-K
– NGINX Plus 라이선스 키 파일 이름(아래 샘플 명령의nginx-repo.key
)-t
– Registry 및 대상 이미지 형식
<registry_name>/<image_name>:<tag>
(아래 샘플 명령의registry.ff.lan:31005/nginx-plus-with-agent:2.7.0
)-n
– NGINX 관리 제품군 인스턴스의 기본 URL(아래 샘플 명령의 경우https://nim.f5.ff.lan
)
추가 옵션은 다음과 같습니다.
-d
– NGINX API Connectivity Manager 사용 시 개발자 포털에 Data Plane 지원 제공-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
다음은 기본 이미지에 대한 빌드의 샘플 Trace입니다. 마지막에 빌드 완료 메시지가 표시되면 빌드가 성공했음을 나타냅니다.
$ ./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
3. Kubernetes에서 Docker 이미지 실행
다음 지침에 따라 배포 Manifest를 준비하고 Kubernetes에서 NGINX Agent 로 NGINX Plus를 시작하세요.
1. 선호하는 텍스트 편집기를 사용하여 manifests/1.nginx-with-agent.yaml
을 열고 다음과 같이 변경합니다(코드 Snippet에는 변경할 수 있거나 변경해야 하는 기본값이 주황색으로 강조 표시되어 있습니다).
spec.template.spec.containers
섹션에서 기본 이미지 이름(your.registry.tld/nginx-with-nim2-agent:tag
)을 Donker 이미지 빌드 3단계에서 -t 옵션으로 지정한 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
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:
...
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"
또한 spec.template.spec.containers.env
섹션에서 표시된 조건이 적용되는 경우 이러한 name-value
필드 쌍의 주석 처리를 해제합니다.
NIM_WAF 및 NIM_WAF_PRECOMPILED_POLICIES
– NGINX App Protect WAF가 이미지에 포함되어 있으므로(Docker 이미지 빌드 3단계에서 -w 옵션을 포함시켰으므로) 값은"true"
입니다.ACM_DEVPORTAL
– App Connectivity Manager 개발자 포털에 대한 지원은 이미지에 포함되어 있으므로(Docker 이미지 빌드 3단계에서 -d 옵션을 포함시켰으므로) 값은"true"
입니다.
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"
2. 표시된 대로 nginxwithAgentStart.sh
스크립트를 실행하여 Manifest를 적용하고 Manifest의 사양 섹션에 있는 replicas: 2
명령어에 따라 각각 NGINX Plus 및 NGINX Agent 로 두 개의 Pod를 시작합니다.
$ ./scripts/nginxWithAgentStart.sh start
$ ./scripts/nginxWithAgentStart.sh stop
3. 이제 두 개의 Pod가 실행 중인지 확인합니다. 각 Pod는 NGINX Management Suite Control Panel과 통신하기 위해 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
4. NGINX Management Suite의 NGINX 인스턴스 관리자 GUI에 액세스하여 두 개의 NGINX Plus 인스턴스가 온라인 상태로 실행 중인지 확인합니다. 이 예제에서는 NGINX App Protect WAF가 사용하도록 설정되어 있지 않습니다.

NGINX Plus를 직접 사용해 보거나 테스트해 보려면 지금 30일 무료 평가판을 신청하거나 사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.
댓글을 달려면 로그인해야 합니다.