NGINX 사용하기

Tier: Free, Premium, Ultimate Offering: Self-managed

우리는 Ingress Controller로 사용할 완전한 NGINX 배포를 제공합니다. 모든 Kubernetes 프로바이더가 기본적으로 NGINX Ingress를 지원하지는 않으므로 호환성을 보장합니다.

note
우리의 NGINX 차트 forkGitHub에서 가져왔습니다. 우리의 fork에서 어떤 부분을 수정했는지에 대한 자세한 내용은 우리의 NGINX fork를 참조하십시오.
note
global.hosts.domain 값은 하나만 가능합니다. 여러 도메인을 지원하는 기능은 이슈 3147에서 추적되고 있습니다.

NGINX 구성하기

구성 세부 정보는 NGINX 차트 문서를 참조하십시오.

Global 설정

우리의 차트들 사이에서 일부 공통된 글로벌 설정을 공유합니다. 일반적인 구성 옵션인 GitLab 및 Registry 호스트명과 같은 공통 구성 옵션에 대해서는 Globals 문서를 참조하십시오.

글로벌 설정을 사용하여 호스트 구성하기

GitLab 서버와 레지스트리 서버의 호스트명은 우리의 Global 설정 차트를 사용하여 구성할 수 있습니다.

GitLab Geo

두 번째 NGINX 서브차트가 GitLab Geo 트래픽을 위해 번들링되어 사전 구성되어 있으며 기본 컨트롤러와 동일한 설정을 지원합니다. 컨트롤러는 nginx-ingress-geo.enabled=true로 활성화할 수 있습니다.

이 컨트롤러는 수신되는 X-Forwarded-* 헤더를 수정하지 않도록 구성되어 있습니다. 만약 다른 제공 업체를 사용하여 Geo 트래픽을 사용하려면 동일한 옵션을 사용해야 합니다.

기본 컨트롤러 값(nginx-ingress-geo.controller.ingressClassResource.controllerValue)은 k8s.io/nginx-ingress-geo로 설정되어 있으며 IngressClass 이름은 {ReleaseName}-nginx-geo로 설정되어 있어 기본 컨트롤러와의 간섭을 피하기 위해 이 이름을 사용합니다. IngressClass 이름은 global.geo.ingressClass로 재정의할 수 있습니다.

사용자 정의 헤더 처리는 보조 Geo 사이트로부터 전달되는 트래픽을 처리하기 위해 주요 Geo 사이트에서만 필요합니다. 다른 서부에서 사용할 경우 이 기능을 사용해야 합니다.

변환시 IngressClass를 변경하면 다른 컨트롤러가 수신되는 트래픽을 처리하도록 설정됩니다. 다른 컨트롤러는 다른 로드 밸런서 IP가 할당되어 있기 때문에 DNS 구성에 추가 변경이 필요할 수 있습니다.

이를 방지하는 방법은 모든 Geo 사이트에서 Geo Ingress 컨트롤러를 활성화하고 기본 및 추가 웹서비스 Ingresses를 연결된 IngressClass(useGeoClass=true)를 사용하도록 구성하는 것입니다.

주석 값 워드 블록리스트

클러스터 운영자가 생성된 NGINX 구성에 대해 더 많은 제어가 필요한 경우, NGINX Ingress는 구성 조각을 허용하여 표준 주석 및 ConfigMap 항목으로 처리되지 않는 원시 NGINX 구성 “조각”을 삽입할 수 있습니다.

이 구성 조각의 단점은 클러스터 운영자가 LUA 스크립팅 및 유사한 구성을 포함하여 GitLab 설치 및 클러스터 자체의 보안을 compromise할 수 있는 Ingress 객체를 배포할 수 있다는 것입니다. 이는 serviceaccount token 및 비밀을 노출시키는 것을 포함합니다.

추가 정보는 CVE-2021-25742상위 ingress-nginx 이슈를 참조하십시오.

GitLab Helm 차트 배포에서 CVE-2021-25742를 완화하기 위해, 우리는 제안된 설정을 사용하여 annotation-value-word-blocklist를 설정했습니다.

GitLab Ingress 구성에서 구성 조각을 사용하거나 제3자 Ingress 객체에서 구성 조각을 사용하는 경우에는 GitLab 써드파티 도메인을 방문할 때 404 오류가 발생하거나 nginx-controller 로그에서 “invalid word” 오류가 발생할 수 있습니다. 이 경우, nginx-ingress.controller.config.annotation-value-word-blocklist 설정을 검토하고 조정하십시오.

또한 차트 문제 해결 문서의 “Invalid Word” errors in the nginx-controller logs and 404 errors도 참조하십시오.