들어가며
- 스파클링소다 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 ... 생략...
마치며
- nginx-ingress-controller github (스파클링소다 ingress-controller 버전 v0.34.1 ) https://github.com/kubernetes/ingress-nginx/tree/controller-v0.34.1?tab=readme-ov-file
- nginx-ingress-controller 컨피그맵 반영 가능한 모듈 리스트 및 설명
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#configuration-options
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.