OPS

nginx-ingress-controller 보안 취약점, nginx-ingress-controller 업그레이드(v1.12.1) 여정

찻잔속청개구리 2025. 4. 2. 21:39
반응형

nginx-ingress-controller 보안 취약점

3월 25일, PHD 알람이 울렸다. 내용은 이러했다.

최근 nginx-ingress 컨트롤러가 CVE-2025-1098, CVE-2025-1974, CVE-2025-1097, CVE-2025-24514, 및 CVE-2025-24513 [1]의 영향을 받는 것으로 확인되어 고객님의 조치가 필요합니다. 고객님께서는 하나 이상의 Amazon Elastic Kubernetes Service(EKS) 클러스터에 이 컨트롤러를 구성하셨습니다. EKS 클러스터의 완화 및 업그레이드 방법을 포함한 이 문제에 대한 자세한 정보는 Kubernetes 공지사항을 검토하시기를 권장드립니다 [1][2].

영향을 받을 수 있는 고객님의 EKS 클러스터 목록은 AWS Health Dashboard의 '영향받는 리소스' 탭에서 확인하실 수 있습니다.

문의사항이나 우려사항이 있으시면 AWS Support에 연락해 주시기 바랍니다 [3].

[1] https://github.com/kubernetes/kubernetes/issues/131009
[2] https://kubernetes.github.io/ingress-nginx/deploy/upgrade/
[3] https://aws.amazon.com/support

영향받는 nginx-ingress-controller 버전

Affected Versions
< v1.11.0
v1.11.0 - 1.11.4
v1.12.0

보안 조치 방법:

  • ingress-nginx를 v1.11.5, v1.12.1 또는 이후 버전으로 업그레이드
  • 현재 쓰고 있는 1.7.0 버전은 취약한 버전에 속했다.
  • v1.11.5과 v1.12.1 중 전자는 머지않아 또 업그레이드해야 하므로 가장 최신 버전이었던 후자를 택했다.

나의 nginx-ingress-controller 업그레이드(v1.12.1) 여정

1. 현재 배포된 nginx-ingress-controller 리소스 현황 파악

# kubectl get all -A | grep nginx
# kubectl describe pod <nginx-ingress-controller POD명> -n <NS>

2. 기존 ingress-nginx 관련 YAML 및 설정 백업

ingress-nginx 관련 YAML 파일을 백업해놓자

3. TO-BE nginx-ingress-controller 권고사항 검토

https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.12.1

4. ECR docker-image 빌드 (1.7.0 -> 1.12.1)

Dockerfile, CI 파이프라인을 수정한 후 docker build를 실행했다.

docker-image가 저장되는 ECR에 버전이 바뀌었는지 확인한다.

5. ingress-nginx-controller 버전 변경 (1.7.0 -> 1.12.1)

  • nginx-ingress-controller.yaml 및 nginx-ingress-hpa.yaml에서 버전 변경 후 Pod 재배포시 field is immutable 오류가 발생할 수 있다. 이때 6.와 같이 기존 job을 삭제해보자.
- nginx-ingress-controller.yaml 및 nginx-ingress-hpa.yaml 버전 변경
AS-IS : app.kubernetes.io/version: 1.7.0
TO-BE : app.kubernetes.io/version: 1.12.1

6. 기존 Job 삭제

# kubectl delete job ingress-nginx-admission-create -n ingress-nginx
# kubectl delete job ingress-nginx-admission-patch -n ingress-nginx
  • field is immutable 오류:
    Job 리소스의 spec.template 필드는 불변(immutable)이다. 다시말해, Job의 spec.template은 한 번 생성된 후에는 수정할 수 없도록 설계되어 있다. 기존 Job에 패치를 적용하려고 할 때, spec.template에 변경 사항이 포함되어 있으면 이와 같은 오류가 뜬다.
    가장 간단한 해결책은 기존 Job을 삭제하고 새로운 설정으로 다시 생성하는 것이다.
    ingress-nginx-admission-create와 ingress-nginx-admission-patch job의 경우 인증서 생성 및 패치 작업을 수행하며, 일반적으로 설치/업데이트 시 한 번만 실행되는 리소스이다.

7. Kubernetes YAML 파일에서 ingress-nginx-controller 버전 수정 (5.와 동일)

5.와 동일한 부분으로, nginx-ingress-controller.yaml 및 nginx-ingress-hpa.yaml 변경사항을 git 파이프라인에 태우는 작업을 진행했다.

반응형