관리 메뉴

피터의 개발이야기

[kubernetes] Kubernetes Ingress에서 SSL 리디렉션을 비활성화하는 방법 본문

Kubernetes/트러블슈팅&장애대응

[kubernetes] Kubernetes Ingress에서 SSL 리디렉션을 비활성화하는 방법

기록하는 백앤드개발자 2025. 6. 30. 07:56
반응형

ㅁ 들어가며

  Kubernetes 환경에서 Ingress는 클러스터 외부의 트래픽을 내부 서비스로 라우팅하는 중요한 역할을 한다. 특히 NGINX Ingress Controller는 가장 널리 사용되는 Ingress 구현체 중 하나이며, HTTPS 보안 연결을 위한 설정도 비교적 간단하게 구성할 수 있다. 하지만 경우에 따라 HTTPS 리디렉션을 비활성화해야 하는 요구사항이 생기기도 한다.  이번 글에서는 실제 장애 대응 사례를 통해 알게된 nginx.ingress.kubernetes.io/ssl-redirect 애노테이션의 의미와 사용 방법을 정리하였다.

 

장애 대응


ㅁ 장애 상황 요약

#<RestClient::PermanentRedirect: 308 Permanent Redirect>
	/config/initializers/request.rb:85:in `block in transmit'
	/usr/local/lib/ruby/2.5.0/net/http.rb:910:in `start'

  최근 운영 중인 서비스에서 외부 시스템이 http:// 기반의 API를 호출하면서 예상치 못한 308 Permanent Redirect 오류가 발생했다. API 서버 측에서는 별다른 변경을 하지 않았음에도 불구하고, 클라이언트는 응답을 받지 못하고 실패 처리되고 있었다.

  로그를 통해 확인해보니, NGINX Ingress가 해당 요청을 https://로 리디렉션하고 있었고, 이로 인해 Ruby의 RestClient가 308 응답을 처리하지 못하고 예외를 발생시키고 있었다.

 

ㅁ 원인 분석

Ingress 리소스에는 다음과 같이 tls: 항목이 설정되어 있었고, 이에 따라 NGINX는 HTTP 요청을 자동으로 HTTPS로 리디렉션하고 있었다:

tls:
  - hosts:
      - xxxxxxxxx.peterica.com
    secretName: i-peterica-com

하지만 외부 시스템은 리디렉션을 따라가지 못하는 구조였고, 이에 따라 장애가 발생했다.

 

ㅁ 해결 방법

이 문제를 해결하기 위해 아래와 같이 Ingress 설정에 nginx.ingress.kubernetes.io/ssl-redirect: "false" 애노테이션을 추가했다:

metadata:
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"

해당 설정을 배포한 뒤, HTTP 요청이 그대로 처리되며 더 이상 308 오류가 발생하지 않았다. 동시에 HTTPS 요청은 여전히 TLS로 정상 처리되었기 때문에 기존 보안 설정에는 영향이 없었다.

 

 

 

nginx.ingress.kubernetes.io/ssl-redirect: "false" 이해하기


ㅁ nginx.ingress.kubernetes.io/ssl-redirect란?

  NGINX Ingress Controller는 기본적으로 tls: 항목이 명시된 경우, 해당 도메인으로 들어오는 HTTP 요청을 자동으로 HTTPS로 리디렉션한다. 이는 보안 측면에서 매우 유용하지만, 특정 환경에서는 이를 비활성화하고 HTTP를 그대로 허용해야 하는 경우가 있다.

이러한 경우 사용하는 설정이 바로 아래 애노테이션이다.

nginx.ingress.kubernetes.io/ssl-redirect: "false"

이 설정은 HTTP 요청이 HTTPS로 강제 리디렉션되지 않도록 제어하는 역할을 한다.

 

ㅁ 언제 사용하면 좋을까?

  • 로컬 개발 환경 또는 테스트 환경에서 HTTPS 인증서 구성이 번거로울 때
  • API 클라이언트가 리디렉션(특히 308)을 지원하지 않아서 문제가 생길 때
  • 임시적으로 HTTP 기반 접근을 허용해야 하는 경우

 

ㅁ 사용 시 주의할 점

  이 설정은 매우 유용하지만, 모든 HTTP 요청이 암호화되지 않은 채 노출될 수 있다는 점에서 보안상 위험 요소가 있다.

 - 외부 시스템이 HTTPS를 지원하지 않거나 리디렉션을 처리하지 못할 경우
 - 내부 개발 환경 또는 테스트 환경
 -  임시적인 우회 조치가 필요할 때

 운영 환경에서는 가급적 클라이언트 측에서도 HTTPS로 요청하도록 유도하고, 리디렉션을 명시적으로 따를 수 있도록 구현하는 것이 바람직하다.

 

 

마무리

  Ingress는 보안과 접근성을 동시에 고려해야 하는 중요한 구성 요소이다. nginx.ingress.kubernetes.io/ssl-redirect: "false" 설정을 활용하면 HTTPS 강제 리디렉션을 유연하게 제어할 수 있다. 하지만 이 설정은 안전성을 낮출 수 있으므로, 가능한 한 운영 환경에서는 HTTPS를 기본값으로 유지하고, 이 설정은 개발 및 테스트 용도로만 사용하는 것이 바람직하다.

 

ㅁ 함께 보면 좋은 사이트

NGINX Ingress Controller 공식 문서

Kubernetes Ingress 공식 가이드 - TLS

반응형
Comments