Ingress NGINX에서 Pomerium Ingress Controller로 마이그레이션
Source: Dev.to
Kubernetes 커뮤니티는 Ingress NGINX가 2026년 3월에 종료될 예정이라고 발표했습니다. 그 이후로는 업데이트, 버그 수정, 보안 패치가 제공되지 않습니다. 기존 배포는 계속 동작하지만 보안 업데이트 없이 운영하는 것은 위험하며 새로운 기능도 추가되지 않습니다.
많은 Kubernetes 운영자는 이제 커뮤니티 Ingress NGINX 컨트롤러의 대안을 검토하고 있습니다. Pomerium Ingress Controller는 기존에 익숙한 리버스 프록시 기능을 그대로 제공하면서, 점진적으로 적용할 수 있는 선택적 제로 트러스트 기능을 제공하는 매력적인 마이그레이션 경로를 제시합니다.
왜 Pomerium을 고려해야 할까?
다양한 Ingress 컨트롤러 대안이 존재하지만, Pomerium은 다음을 제공합니다:
- Ingress NGINX와 동일한 리버스 프록시 동작
- 점진적으로 활성화할 수 있는 내장 제로 트러스트 기능
- 오픈소스 코어와 컨트롤러로 벤더 락인 방지
시작하기 전에
이 가이드는 다음이 설정되어 있다고 가정합니다:
- Pomerium이 설치되어 있음
- Pomerium Ingress Controller가 설치되어 있음
- TLS 인증서가 구성되어 있음 (Pomerium은 모든 라우트에 HTTPS를 요구)
- Kubernetes Ingress 리소스에 대한 기본적인 이해
무엇이 다른가?
Pomerium은 NGINX와 달리 두 가지 주요 요구사항이 있습니다:
- HTTPS는 필수 – 모든 라우트는 TLS를 사용해야 합니다.
- 정책이 필요 – 접근 정책을 지정해야 합니다 (허용 정책이라도 필요).
이 기본값은 보안을 즉시 적용하지만, 전통적인 리버스 프록시와 동일하게 동작하도록 허용 정책을 설정할 수 있습니다.
간단한 마이그레이션 예시
아래는 일반적인 Ingress NGINX 설정과 그에 대응하는 Pomerium 설정입니다.
# Ingress NGINX → Pomerium Ingress Controller
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
annotations:
ingress.pomerium.io/policy: |
- allow:
any: true
spec:
ingressClassName: pomerium # changed from nginx
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
tls:
- hosts:
- app.example.com
secretName: app-tls-cert
구성은 거의 동일합니다—ingressClassName을 nginx에서 pomerium으로 바꾸고 기본 정책을 추가하기만 하면 됩니다. any: true 정책은 모든 요청을 제한 없이 허용하도록 하여 전통적인 리버스 프록시와 같은 동작을 합니다.
기본 리버스 프록시 기능을 위한 정책 옵션
Ingress NGINX의 기본 동작과 일치하도록 간단히 마이그레이션하려면 다음과 같은 정책 옵션을 사용할 수 있습니다:
옵션 1: 모든 요청 허용 (Ingress NGINX 기본값과 가장 유사)
ingress.pomerium.io/policy: |
- allow:
any: true
옵션 2: 완전 공개 접근 (주석 단축키)
ingress.pomerium.io/allow_public_unauthenticated_access: "true"
옵션 3: 인증된 사용자 모두 허용 (기본 인증)
ingress.pomerium.io/allow_any_authenticated_user: "true"
TLS 인증서 관리
Pomerium은 HTTPS를 요구하므로 cert‑manager를 사용해 자동으로 인증서를 발급받는 것을 고려하세요. Pomerium Ingress Controller는 cert‑manager와 원활하게 통합됩니다:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
ingress.pomerium.io/policy: |
- allow:
any: true
spec:
ingressClassName: pomerium
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
tls:
- hosts:
- app.example.com
secretName: app-tls-cert # cert‑manager will create this
간단히 시작하고 준비가 되면 제로 트러스트 추가
우선 허용 정책으로 시작한 뒤, 사용자 아이덴티티, 디바이스 상태, 요청 컨텍스트 등 다양한 요소에 기반한 세밀한 규칙으로 교체할 수 있습니다:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
annotations:
ingress.pomerium.io/policy: |
- allow:
and:
- domain:
is: example.com
spec:
ingressClassName: pomerium
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
tls:
- hosts:
- app.example.com
secretName: app-tls-cert
시작하기
2026년 3월 종료 기한이 다가오면서 마이그레이션을 차근차근 계획할 시간이 있습니다. Pomerium Ingress Controller 설치는 간단하고 문서화도 잘 되어 있습니다. 마이그레이션 동안 두 컨트롤러를 나란히 실행하면서 서비스별로 검증해가며 옮길 수 있습니다.
지속 가능한 장기 솔루션을 찾든, 제로 트러스트 미래를 준비하든, Pomerium Ingress Controller는 전통적인 리버스 프록시 패턴에서 자연스럽게 진화할 수 있는 선택지입니다. 익숙한 방식으로 시작하고, 준비가 되면 보안을 추가하세요.
Learn more: and see the deployment documentation for detailed instructions.