Helm Chart 를 통한 NGINX Ingress Controller 설치 가이드
이 가이드에서는 Helm Chart 를 사용하여 NGINX Ingress Controller 를 Kubernetes 클러스터에 설치하는 방법을 단계별로 설명합니다. Helm은 Kubernetes 애플리케이션의 설치 및 관리를 간편하게 해주는 패키지 관리 도구로, 복잡한 애플리케이션 설정을 손쉽게 배포할 수 있습 니다.
Kubernetes 클러스터에서 애플리케이션을 배포하고 관리할 때, 인그레스(ingress) 리소스를 통해 외부 트래픽을 클러스터 내부의 서비스로 라우팅하는 것이 중요합니다. NGINX Ingress Controller 는 이러한 인그레스 리소스를 관리하는 데 있어 널리 사용되는 솔루션으로, 다양한 기능과 유연성을 제공합니다.
목차
1. 사전 요구 사항
2. NGINX Ingress Controller CRD
2-1. NGINX Ingress Controller CRD 업그레이드
2-2. NGINX Ingress Controller CRD 제거
3. OCI Registry를 통한 Helm Chart 관리
3-1. Helm Chart 설치
3-2. Helm Chart 업그레이드
3-3. Helm Chart 제거
3-4. Edge 버전
4. Source를 통한 Helm Chart 관리
4-1. Helm Chart Pulling
4-2. Helm Chart 설치
4-3. Helm Chart 업그레이드
4-4. Helm Chart 제거
5. 무중단 업그레이드 가이드
5-1. Background 업그레이드
5-2. 업그레이드 단계
1. 사전 요구 사항
참고:
모든 문서는 최신 안정 릴리스에서만 사용해야 합니다.
NGINX Ingress Controller가 지원하는 Kubernetes 버전:
| NIC Version | Supported Kubernetes Version | NIC Helm Chart Version | NIC Operator Version | NGINX / NGINX Plus version |
|---|---|---|---|---|
| 3.6.1 | 1.25 – 1.30 | 1.3.1 | 2.3.1 | 1.27.0 / R32 |
| 3.5.2 | 1.23 – 1.30 | 1.2.2 | 2.2.2 | 1.27.0 / R32 |
| 3.4.3 | 1.23 – 1.29 | 1.1.3 | 2.1.2 | 1.25.4 / R31 P1 |
| 3.3.2 | 1.22 – 1.28 | 1.0.2 | 2.0.2 | 1.25.3 / R30 |
| 3.2.1 | 1.22 – 1.27 | 0.18.1 | 1.5.1 | 1.25.2 / R30 |
| 3.1.1 | 1.22 – 1.26 | 0.17.1 | 1.4.2 | 1.23.4 / R29 |
| 3.0.2 | 1.21 – 1.26 | 0.16.2 | 1.3.1 | 1.23.3 / R28 |
| 2.4.2 | 1.19 – 1.25 | 0.15.2 | 1.2.1 | 1.23.2 / R28 |
| 2.3.1 | 1.19 – 1.24 | 0.14.1 | 1.1.0 | 1.23.1 / R27 |
| 2.2.2 | 1.19 – 1.23 | 0.13.2 | 1.0.0 | 1.21.6 / R26 |
| 2.1.2 | 1.19 – 1.23 | 0.12.1 | 0.5.1 | 1.21.6 / R26 |
| 2.0.3 | 1.19 – 1.22 | 0.11.3 | 0.4.0 | 1.21.3 / R25 |
| 1.12.4 | 1.16 – 1.21 | 0.10.4 | 0.3.0 | 1.21.6 / R26 |
| 1.11.3 | 1.16 – 1.20 | 0.9.0 | 0.2.0 | 1.21.0 / R23 P1 |
| 1.10.1 | 1.16 – 1.19 | 0.8.0 | 0.1.0 | 1.19.8 / R23 |
| 1.9.1 | 1.16 – 1.18 | 0.7.1 | 0.0.7 | 1.19.3 / R22 |
- Helm 3.0+.
- NGINX Plus를 사용하려면:
- JWT 토큰을 사용하여 Docker Regisrty Secret을 구성하고 해당 지침을 따르세요.
controller.serviceAccount.imagePullSecretName또는controller.serviceAccount.imagePullSecretsNames매개변수를 사용하여 Secret을 지정하십시오. - 또는 이 지침을 따라 NGINX Plus가 포함된 NGINX Ingress Controller 이미지를 가져와서 개인 레지스트리에 Push 하십시오.
- 또는 NGINX를 빌드하여 NGINX Plus가 포함된 Ingress Controller 이미지를 생성하고 이를 개인 레지스트리에 Push할 수 있습니다.
values-plus.yaml의controller.image.repository필드를 적절하게 업데이트하십시오.
- JWT 토큰을 사용하여 Docker Regisrty Secret을 구성하고 해당 지침을 따르세요.
- App Protect DoS를 사용하려면 NGINX Ingress Controller와 동일한 네임스페이스에 App Protect DoS Arbitrator Helm Chart를 설치하십시오. 동일한 네임스페이스에 여러 NGINX Ingress Controller를 설치하는 경우 하나의 네임스페이스에 하나의 Arbitrator만 있을 수 있으므로 동일한 Arbitrator를 공유해야 합니다.
2. NGINX Ingress Controller CRD
2-1. NGINX Ingress Controller CRD 업그레이드
CRDs를 업그레이드하려면, ‘4-1. Helm Chart Pulling‘에서 설명한 대로 차트 소스를 가져온 다음 다음 명령을 실행하세요.
# kubectl apply -f crds/
또는 차트를 가져오지 않고 CRDs를 업그레이드하려면 다음 명령을 실행하세요.
# kubectl apply -f https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v3.6.1/deploy/crds.yaml
위 명령에서 v3.6.1은 Helm 버전이 아닌 NGINX Ingress Controller 릴리스의 버전을 나타냅니다.
참고:
다음 경고는 예상되는 것으로 무시해도 됩니다.Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply.
2-2. NGINX Ingress Controller CRD 제거
CRDs를 제거하려면, 4-1. Helm Chart Pulling‘에서 설명한 대로 차트 소스를 가져온 다음 다음 명령을 실행하세요.
kubectl delete -f crds/
참고:
이 명령은 모든 네임스페이스에서 클러스터의 해당 Custom Resource를 모두 삭제합니다. 유지하고 싶은 Custom Resource가 없고 클러스터에서 다른 Ingress Controller 릴리스가 실행 중이지 않은지 확인하세요.
3. OCI Registry를 통한 Helm Chart 관리
3-1. Helm Chart 설치
Helm을 릴리스 이름 my-release로 설치하려면 다음과 같이 진행하세요. (my-release는 사용자 지정 커스텀 이름입니다.)
- NGINX OSS용:
# helm install my-release oci://ghcr.io/nginxinc/charts/nginx-ingress --version 1.3.1
- NGINX Plus용: (Ingress Controller 이미지
nginx-plus-ingress를 개인 레지스트리myregistry.example.com에 푸시했다고 가정)
# helm install my-release oci://ghcr.io/nginxinc/charts/nginx-ingress --version 1.3.1 --set controller.image.repository=myregistry.example.com/nginx-plus-ingress --set controller.nginxplus=true
이 명령은 GitHub Container Registry에서 Ingress Controller의 최신 Edge 버전을 설치합니다.
Docker Hub를 사용하려면, ghcr.io/nginxinc/charts/nginx-ingress를 registry-1.docker.io/nginxcharts/nginx-ingress로 대체할 수 있습니다.
3-2. Helm Chart 업그레이드
Helm Chart 은 릴리스 업그레이드 중에 CRDs를 업그레이드하지 않습니다. 릴리스를 업그레이드하기 전에 CRDs 업그레이드를 참조하세요.
릴리스 my-release 업그레이드:
# helm upgrade my-release oci://ghcr.io/nginxinc/charts/nginx-ingress --version 1.3.1
3-3. Helm Chart 제거
릴리스 my-release 삭제 혹은 제거:
helm uninstall my-release
이 명령은 릴리스와 관련된 모든 Kubernetes 구성 요소를 제거하고 릴리스를 삭제합니다.
릴리스를 삭제해도 CRDs는 제거되지 않습니다. CRDs를 제거하려면 ‘2-2. NGINX Ingress Controller CRD 제거‘를 참조하세요.
3-4. Edge 버전
NGINX Ingress Controller의 최신 변경 사항을 새 릴리스 전에 테스트하려면 edge 버전을 설치할 수 있습니다. 이 버전은 NGINX Ingress Controller 리포지토리의 main 브랜치에서 빌드됩니다. edge 버전을 설치하려면 –version 플래그에 값 0.0.0-edge를 지정하십시오.
# helm install my-release oci://ghcr.io/nginxinc/charts/nginx-ingress --version 0.0.0-edge
경고:
edge 버전은 프로덕션 환경에서 사용하기 위한 것이 아닙니다. 테스트 및 개발 목적에만 사용하도록 설계되었습니다.
4. Source를 통한 Helm Chart 관리
이 단계는 Helm Chart 의 Source를 사용하여 설치할 때 필요합니다. 또한, Ingress Controller가 기본적으로 필요로 하는 커스텀 리소스 정의(CRD)를 관리하거나 CRD를 업그레이드/삭제하기 위해서도 이 단계가 필요합니다.
4-1. Helm Chart Pulling
1. 차트 소스를 가져오세요.
# helm pull oci://ghcr.io/nginxinc/charts/nginx-ingress --untar --version 1.3.1
2. 작업 디렉터리를 nginx-ingress로 변경하세요.
# cd nginx-ingress
4-2. Helm Chart 설치
Helm Chart 를 릴리스 이름 my-release로 설치하려면(my-release는 사용자 정의 이름입니다.)
- NGINX용:
# helm install my-release .
- NGINX Plus용:
# helm install my-release -f values-plus.yaml .
이 명령은 기본 설정으로 Kubernetes 클러스터에 Ingress Controller를 배포합니다. 설치 중 구성할 수 있는 매개변수는 구성 섹션에 나열되어 있습니다.
4-3. Helm Chart 업그레이드
Helm Chart 은 릴리스 업그레이드 중에 CRDs를 업그레이드하지 않습니다. 릴리스를 업그레이드하기 전에 2-1. NGINX Ingress Controller CRD 업그레이드를 참조하세요.
릴리스 my-release를 업그레이드하려면:
# helm upgrade my-release .
4-4. Helm Chart 제거
Helm Chart 릴리스 my-release를 삭제/제거하려면:
# helm uninstall my-release
이 명령은 릴리스와 관련된 모든 Kubernetes 구성 요소를 제거하고 릴리스를 삭제합니다.
릴리스를 삭제해도 CRDs는 제거되지 않습니다. CRDs를 제거하려면 2-2. NGINX Ingress Controller CRD 제거 를 참조하세요.
5. 무중단 업그레이드 가이드
5-1. Background 업그레이드
NGINX Ingress Controller 버전 3.1.0에서는 Helm Chart 모범 사례에 맞추어 Helm Resource 이름, Label 및 Annotation에 변경 사항이 도입되었습니다. 3.1.0 이전 버전에서 업그레이드할 때, Deployment, DaemonSet, Service와 같은 특정 리소스가 재생성되어 Downtime이 발생할 수 있습니다.
5-2. 업그레이드 단계
참고:
다음 단계는 2.x 및 3.0.x 릴리스에 모두 적용됩니다.
Helm 릴리스 이름에 따라 따라야 할 단계가 달라집니다.
HELM 릴리스 이름이 NGINX-INGRESS인 경우:
1. 배포/데몬셋에 대해 kubectl describe 명령을 사용하여 Selector 값을 가져옵니다:
# kubectl describe deployments -n <namespace>
Selector 아래의 key=value를 복사합니다. 예를 들어:
# Selector: app=nginx-ingress-nginx-ingress
2. git checkout v3.6.1 명령을 사용하여 최신 태그를 체크아웃합니다.
3. /kubernates-ingress/charts/nginx-ingress 디렉토리로 이동합니다.
4. /kubernates-ingress/charts/nginx-ingress에 위치한 values.yaml 파일의 selectorLabels: {} 필드를 복사한 Selector 값으로 업데이트합니다.
# selectorLabels: {app: nginx-ingress-nginx-ingress}
5. 다음 매개변수가 설정된 helm upgrade 명령을 실행합니다:
# --set serviceNameOverride="nginx-ingress-nginx-ingress"
--set controller.name=""
--set fullnameOverride="nginx-ingress-nginx-ingress"
전체 명령은 다음과 같이 보일 수 있습니다:
# helm upgrade nginx-ingress oci://ghcr.io/nginxinc/charts/nginx-ingress --version 0.19.0 --set controller.kind=deployment/daemonset --set controller.nginxplus=false/true --set controller.image.pullPolicy=Always --set serviceNameOverride="nginx-ingress-nginx-ingress" --set controller.name="" --set fullnameOverride="nginx-ingress-nginx-ingress" -f values.yaml
6. 업그레이드 프로세스가 완료되면 배포의 이벤트를 검토하여 변경 사항을 확인하기 위해 kubectl describe 명령을 사용합니다:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 9m11s deployment-controller Scaled up replica set nginx-ingress-nginx-ingress-<old_version> to 1
Normal ScalingReplicaSet 101s deployment-controller Scaled up replica set nginx-ingress-nginx-ingress-<new_version> to 1
Normal ScalingReplicaSet 98s deployment-controller Scaled down replica set nginx-in
HELM 릴리스 이름이 NGINX-INGRESS인 경우:
kubectl describe 명령을 사용하여 배포/데몬셋의 Selector 값을 가져오세요:
# kubectl describe deployment/daemonset -n <namespace>
Selector 아래의 key=value를 복사합니다. 예를 들어,
# Selector: app=<helm_release_name>-nginx-ingress
2. git checkout v3.6.1 명령을 사용하여 최신 태그를 체크아웃합니다.
3. /kubernates-ingress/charts/nginx-ingress 디렉토리로 이동합니다.
4. /kubernates-ingress/charts/nginx-ingress에 위치한 values.yaml 파일의 selectorLabels: {} 필드를 복사한 Selector 값으로 업데이트합니다.
# selectorLabels: {app: <helm_release_name>-nginx-ingress}
5. 다음 매개변수가 설정된 helm upgrade 명령을 실행합니다:
# --set serviceNameOverride="<helm_release_name>-nginx-ingress"
--set controller.name=""
6. 전체 명령은 다음과 같이 보일 수 있습니다:
# helm upgrade test-release oci://ghcr.io/nginxinc/charts/nginx-ingress --version 0.19.0 --set controller.kind=deployment/daemonset --set controller.nginxplus=false/true --set controller.image.pullPolicy=Always --set serviceNameOverride="test-release-nginx-ingress" --set controller.name="" -f values.yaml
업그레이드 프로세스가 완료되면 배포의 이벤트를 검토하여 변경 사항을 확인하기 위해 kubectl describe 명령을 사용합니다:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 9m11s deployment-controller Scaled up replica set test-release-nginx-ingress-<old_version> to 1
Normal ScalingReplicaSet 101s deployment-controller Scaled up replica set test-release-nginx-ingress-<new_version> to 1
Normal ScalingReplicaSet 98s deployment-controller Scaled down replica set test-releas
Helm Chart를 통해 설치하는 방법 이외에도 NGINX Ingress Controller를 다양한 방법으로 설치하고 싶으신가요?
NGINX STORE의 Kubernetes 카테고리를 참고하거나 NGINX STORE에 문의하여 사용 사례에 대해 상담 받아보세요.
NGINX 및 NGINX Plus에 대한 상담이 필요하다면 아래 폼으로 NGINX STORE에게 연락해주세요.