NGINX Ingress Controller Documentation

Ingress Controller 이미지 Build

이 문서에서는 소스 코드를 사용하여 Ingress Controller 이미지를 Build하는 방법을 설명합니다.

사전 Build된 이미지를 사용할 수도 있습니다. Docker Registry에서 NGINX Plus 기반 NGINX Ingress Controller를 가져오는 방법에 대한 자세한 내용은 여기여기를 참조하십시오. NGINX OSS 기반 NGINX Ingress Controller의 경우 DockerHubGitHub 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 logingcloud 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를 생성합니다(TARGETcontainer인 경우 무시됨).
  • 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-crdsdebian-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 컴파일을 방지할 수 있습니다.