
Ingress Controller 이미지 Build
이 문서에서는 소스 코드를 사용하여 Ingress Controller 이미지를 Build하는 방법을 설명합니다.
사전 Build된 이미지를 사용할 수도 있습니다. Docker Registry에서 NGINX Plus 기반 NGINX Ingress Controller를 가져오는 방법에 대한 자세한 내용은 여기 및 여기를 참조하십시오. NGINX OSS 기반 NGINX Ingress Controller의 경우 DockerHub 및 GitHub Container를 통해 이미지를 제공합니다.
목차
1. 필수 구성 요소
2. 이미지 Build 및 Private Registry에 Push
2-1. Makefile Target
2-2. Makefile 변수
1. 필수 구성 요소
이미지를 Build하기 전에 컴퓨터에 다음 소프트웨어가 설치되어 있는지 확인하십시오.
- Docker v18.09+
- GNU Make
- git
- OpenSSL, 선택적으로, 기본 서버에 대한 자체 서명 인증서 및 Key를 생성하려는 경우
- For NGINX Plus, NGINX Plus 라이선스 – 인증서(
nginx-repo.crt
)와 Key(nginx-repo.key
)가 있어야 합니다.
Ingress Controller가 Golang으로 작성되었지만 Golang은 필수는 아니지만 Binary를 다운로드하거나 Docker 컨테이너에 Ingress Controller를 Build하는 옵션이 있습니다.
2. 이미지 Build 및 Private Registry에 Push
Make Utility와 제공된 Makefile
을 사용하여 이미지를 Build합니다. Ingress Controller Binary를 생성하고, 이미지를 Build하고, 이미지를 Private Registry에 Push해 봅시다.
Note: Local Golang 환경이 있고 Binary를 Build하려는 경우 make
명령에서 TARGET=download
를 제거할 수 있습니다. Binary를 Build하고 싶지만 Local Golang 환경이 없는 경우 TARGET=container
를 사용할 수 있습니다.
1. 먼저 Docker Login
명령을 실행하여 Registry에 로그인해야 합니다.
Google Container Registry를 사용하는 경우 gcloud auth login
및 gcloud auth configure-docker
명령어를 실행하여 Gcloud 도구에 로그인했는지 확인하세요.
2. Ingress Controller Repo를 Clone합니다.
$ git clone https://github.com/nginxinc/kubernetes-ingress.git --branch v2.4.1
$ cd kubernetes-ingress
3. 이미지 Build
NGINX의 경우:
$ make debian-image PREFIX=myregistry.example.com/nginx-ingress TARGET=download
alpine을 사용하려는 경우:
$ make alpine-image PREFIX=myregistry.example.com/nginx-ingress TARGET=download
myregistry.example.com/nginx-ingress
는 이미지가 Push될 Private Registry를 정의합니다. 해당 값을 Private Registry로 대체하십시오.
결과적으로 myregistry.example.com/nginx-ingress:3.0.0 이미지가 Build됩니다. 태그 3.0.0
은 Makefile에 정의된 VERSION
변수에서 가져옵니다.
NGINX Plus의 경우 먼저 인증서(nginx-repo.crt
)와 라이선스의 Key(nginx-repo.key
)가 프로젝트 root에 있는지 확인합니다.
$ ls nginx-repo.*
nginx-repo.crt nginx-repo.key
다음을 실행합니다.
$ make debian-image-plus PREFIX=myregistry.example.com/nginx-plus-ingress TARGET=download
myregistry.example.com/nginx-plus-ingress
는 이미지가 Push될 Private Registry Repo를 정의합니다. 해당 값을 Private Registry Repo로 대체하십시오.
결과적으로 myregistry.example.com/nginx-plus-ingress:3.0.0 이미지가 Build됩니다. 태그 3.0.0은 Makefile에 정의된 VERSION 변수에서 가져옵니다.
Note: NGINX Plus의 패치 버전이 출시되는 경우 최신 버전을 얻으려면 이미지를 다시 Build해야 합니다. 시스템이 Docker Layer를 캐싱하고 패키지를 업데이트하지 않는 경우 make
명령에 DOCKER_BUILD_OPTIONS="--pull --no-cache"
를 추가합니다.
4. 이미지를 Push
$ make push PREFIX=myregistry.example.com/nginx-ingress
다른 태그를 사용하는 경우 위의 명령에 TAG=your-tag
를 추가하세요.
다음으로 사용 가능한 Makefile 대상 및 변수에 대한 세부 정보를 찾을 수 있습니다.
2-1. Makefile Target
Target이나 make help
없이 make
를 실행하면 모든 Target의 목록을 볼 수 있습니다.
아래에서 Makefile에서 가장 유용한 대상을 찾을 수 있습니다.
- build: Local Golang 환경을 사용하여 Ingress Controller Binary를 생성합니다(
TARGET
이container
인 경우 무시됨). - alpine-image: NGINX를 사용하여 alpine-based 이미지를 구축하기 위한 것입니다.
- alpine-image-plus: NGINX Plus를 사용하여 alpine-based 이미지를 구축하기 위한 것입니다.
- debian-image: NGINX로 debian-based 이미지를 구축하기 위한 것입니다.
- debian-image-plus: NGINX Plus로 debian-based 이미지를 구축하는 데 사용됩니다.
- debian-image-nap-plus: NGINX Plus와 app-protect-waf 모듈을 사용하여 debian-based 이미지를 구축합니다.
- debian-image-dos-plus: NGINX Plus 및 app-protect-dos 모듈을 사용하여 debian-based 이미지를 구축하기 위한 것입니다.
- debian-image-nap-dos-plus: NGINX Plus app-protect-waf 및 app-protect-dos 모듈을 사용하여 debian-based 이미지를 구축합니다.
- ubi-image: Openshift 클러스터용 NGINX로 ubi-based 이미지를 구축하기 위한 것입니다.
- ubi-image-plus: Openshift 클러스터용 NGINX Plus로 ubi-based 이미지를 구축하기 위한 것입니다.
- ubi-image-nap-plus: NGINX Plus 및 Openshift 클러스터용 app-protect-waf 모듈을 사용하여 ubi-based 이미지를 구축하기 위한 것입니다.
- ubi-image-dos-plus: NGINX Plus 및 Openshift 클러스터용 app-protect-dos 모듈을 사용하여 ubi-based 이미지를 구축하기 위한 것입니다.
- ubi-image-nap-dos-plus: Openshift 클러스터용 NGINX Plus, app-protect-waf 및 app-protect-dos 모듈을 사용하여 ubi-based 이미지를 구축하기 위한 것입니다. 참고: RHEL 조직 및 활성화 Key를 프로젝트 root의
rhel_license
라는 파일에 저장해야 합니다. - 예시:
RHEL_ORGANIZATION=1111111
RHEL_ACTIVATION_KEY=your-key
몇 가지 유용한 대상:
- push:
PREFIX
및TAG
변수에 지정된 Docker Registry에 이미지를 Push합니다. - all:
test
,lint
,verify-codegen
,update-crds
및debian-image
Test를 실행합니다. 대상 중 하나가 실패하면 실행 프로세스가 중지되고 오류가 보고됩니다. - test: 단위 테스트를 실행합니다.
- certificate-and-key: Ingress Controller에는 기본 HTTP/HTTPS 서버에 대한 인증서와 Key가 필요합니다. Ingress Controller에 대한 Command-Line Argument의 TLS 암호에서 이를 참조할 수 있습니다. 또는 인증서 및 Key가 포함된 PEM 형식의 파일을
/etc/nginx/secrets/default
로 이미지에 추가할 수 있습니다. 선택적으로 이 대상을 사용하여 자체 서명된 인증서와 Key를 생성할 수 있습니다. 인증서와 Key를 이미지에 복사하려면 Dockerfile에 ADD 명령을 추가해야 합니다.
2-2. Makefile 변수
Makefile에는 사용자 정의할 수 있는 다음과 같은 주요 변수가 포함되어 있습니다(Makefile을 변경하거나 Make 명령의 변수를 재정의함).
- ARCH – 이미지(및 binary)의 아키텍처. 기본값은
amd64
입니다. 가장 일반적인 아키텍처는amd64
및arm64
입니다. 다른 인기 있는 옵션으로는arm
,ppc64le
및s390x
가 있습니다. - PREFIX – 이미지의 이름입니다. 기본값은
nginx/nginx-ingress
입니다. - TAG – 이미지에 추가된 태그입니다. 기본값은 Ingress Controller 버전으로 설정됩니다.
- DOCKER_BUILD_OPTIONS –
docker build
명령에 대한 옵션입니다. 예를 들어--pull
. - TARGET – 기본값으로 Ingress Controller는 Local Golang 환경을 사용하여 Local로 컴파일됩니다.
local
Golang 환경을 사용하여 Ingress Controller를 컴파일하려면 Ingress Controller Repo가$GOPATH
에 있는지 확인하십시오. Docker Golang 컨테이너를 사용하여 Ingress Controller를 컴파일하려면TARGET=container
를 지정하십시오. 태그를 체크아웃했거나main
에서 최신 Commit에 있는 경우TARGET=download
를 지정하여 Binary 컴파일을 방지할 수 있습니다.