nginx-ingress-controller nginx.conf 반영 방법

작성자 박형춘 수정일 2024-05-27 09:05

들어가며

  • 스파클링소다 4.0에서 각 어플리케이션(notebook, restapp_notebook, restapp_server, gitlab, portal 등…  ) 모든 어플리케이션은 메인도메인(ex https://devportal.sparklingsoda.ai/ ) 하위 uri 경로로  구분되어 접속됩니다.
  • k8s 클러스터에서 각 경로마다 통신 룰에 대한 설정은 ingress 리소스가 담당합니다. (ex proxy-send-timeout , upstream-keepalive-time … )
  • 각 경로에 해당하는 ingress 룰 설정시 최종적으로 클러스터의 트래픽 진입점인 nginx-ingress-controller 파드 내부 nginx.conf 파일에 반영됩니다.
  • nginx-ingress-controller 파드 내부에는 nginx 프로세스가 실행되고 있으며, nginx.conf 파일 변경시 변경 사항을 탐지하여 반영합니다.
  • 이번 아티클은 생성되는 모든 uri 경로에 대해 전역적(default) 설정이 필요한 경우 반영하는 가이드입니다.

내용

  • default 룰 설정
    1. nginx-ingress-controller 컨피그맵 생성
apiVersion: v1
kind: ConfigMap
metadata:
  name: sodaflow-nginx-ingress-controller
  namespace: sodaflow


2. default 반영할 옵션을 컨피그맵 data에 추가

apiVersion: v1
kind: ConfigMap
metadata:
  name: sodaflow-nginx-ingress-controller
  namespace: sodaflow
data:
  proxy-read-timeout: "55555"
  proxy-send-timeout: "66666"

3. ingress-controller 파드 로그에서 반영 확인 (컨피그맵 갱신시 몇초안에 반영)

I0526 23:52:42.082889       7 event.go:278] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"sodaflow", Name:"sodaflow-nginx-ingress-controller", UID:"ac1ed7a5-7702-491e-bc6d-0d3ca664dbd4", APIVersion:"v1", ResourceVersion:"3087428", FieldPath:""}): type: 'Normal' reason: 'UPDATE' ConfigMap sodaflow/sodaflow-nginx-ingress-controller
I0526 23:52:42.090861       7 controller.go:141] Configuration changes detected, backend reload required.
I0526 23:52:42.259589       7 controller.go:157] Backend successfully reloaded.


ingress-controller 파드 내부 접속후 /etc/nginx/nginx.conf 파일에서도 반영됨을 확인 할 수 있습니다.
    
... 생략 ...
# https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/                               
proxy_set_header Proxy                  "";
                                                                                                                                    
# Custom headers to proxied server                                                            

proxy_connect_timeout                   5s;                                        
proxy_send_timeout                      66666s;   
proxy_read_timeout                      55555s;                                                          
                
proxy_buffering                         off;                       
proxy_buffer_size                       4k;    
... 생략 ...

nginx-ingress-controller 파드에서 읽어오는 컨피그맵 설정은 nginx 프로세스가 실행되는 부분에서 정의됩니다.
    
... 생략 ...
    Args:
      /nginx-ingress-controller
      --default-backend-service=sodaflow/sodaflow-nginx-ingress-default-backend
      --election-id=ingress-controller-leader
      --ingress-class=nginx
      --configmap=sodaflow/sodaflow-nginx-ingress-controller
      --default-ssl-certificate=sodaflow/sodaflow-https-secret
... 생략...






마치며

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300