티스토리 뷰
Kubernetes에서 Nginx Reverse Proxy 배포 및 설정하기
1. 개요
이 글에서는 Kubernetes에서 Nginx Reverse Proxy를 배포하고 설정하는 방법을 다룹니다. PostgreSQL과 같은 내부 서비스로 트래픽을 라우팅하기 위해 Ingress Controller를 활용하며, 도메인 기반 라우팅 및 보안 설정을 포함하여 설명합니다.
2. Kubernetes에서 Nginx Reverse Proxy 실행 아키텍처
Nginx Reverse Proxy는 Kubernetes 환경에서 다음과 같은 역할을 수행합니다:
- Ingress Controller - 클러스터 내부 서비스로 트래픽 라우팅
- 도메인 기반 라우팅 - 특정 도메인에 따라 다른 서비스로 트래픽 전달
- SSL/TLS 설정 - HTTPS 적용 가능 (Let's Encrypt 연동)
이러한 구성을 통해 PostgreSQL 및 기타 서비스의 외부 접근을 효율적으로 관리할 수 있습니다.
3. Kubernetes에서 Nginx Ingress Controller 설치
3.1 Ingress Controller 활성화 (Minikube 환경)
Minikube에서는 기본적으로 Ingress Controller를 활성화할 수 있습니다.
# Minikube Ingress 활성화
minikube addons enable ingress
설치가 완료되었는지 확인하려면 다음 명령어를 실행합니다.
kubectl get pods -n kube-system | grep ingress
3.2 Helm을 이용한 Nginx Ingress Controller 설치
Minikube가 아닌 다른 환경에서는 Helm을 사용하여 Ingress Controller를 배포할 수 있습니다.
# Helm 저장소 추가
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Nginx Ingress Controller 배포
helm install my-nginx ingress-nginx/ingress-nginx
설치 확인:
kubectl get all -n default | grep nginx
4. Ingress 리소스를 활용한 Reverse Proxy 설정
Ingress 리소스를 사용하여 Nginx가 트래픽을 라우팅하도록 설정할 수 있습니다.
4.1 PostgreSQL에 대한 Reverse Proxy 설정
아래 postgres-ingress.yaml 파일을 생성합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: postgres-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: postgres.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: postgres-service
port:
number: 5432
적용:
kubectl apply -f postgres-ingress.yaml
4.2 Nginx가 실행 중인지 확인
kubectl get ingress
Minikube 환경에서는 Ingress의 IP를 확인하여 /etc/hosts에 추가해야 합니다.
kubectl get ingress postgres-ingress
출력 예시:
NAME CLASS HOSTS ADDRESS PORTS AGE
postgres-ingress <none> postgres.local 192.168.49.2 80 5m
이제 /etc/hosts 파일을 수정합니다.
sudo nano /etc/hosts
다음 줄을 추가:
192.168.49.2 postgres.local
이제 브라우저에서 postgres.local로 접근하면 PostgreSQL 서비스로 트래픽이 전달됩니다.
5. 외부 HTTPS 적용 (Let's Encrypt 인증서 발급)
Nginx Ingress Controller를 사용하면 Let's Encrypt를 활용하여 HTTPS를 적용할 수 있습니다.
5.1 Cert-Manager 설치
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true
5.2 SSL 인증서 적용
아래 tls-ingress.yaml 파일을 생성합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: postgres-ingress-tls
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- postgres.local
secretName: postgres-tls
rules:
- host: postgres.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: postgres-service
port:
number: 5432
적용:
kubectl apply -f tls-ingress.yaml
이제 HTTPS로 https://postgres.local로 PostgreSQL 서비스에 접근할 수 있습니다.
다음 글에서 다룰 내용
- PostgreSQL과 애플리케이션을 연결하는 방법
- Kubernetes에서 성능 및 보안 최적화
- 자동화된 배포 및 운영 방법
'study > 백엔드' 카테고리의 다른 글
Kubernetes에서 자동화된 배포 및 운영 방법 (0) | 2025.03.22 |
---|---|
Kubernetes에서 보안 및 성능 최적화하기 (0) | 2025.03.21 |
Kubernetes에서 PostgreSQL 배포 및 설정하기 (0) | 2025.03.20 |
홈서버에 서버리스 시스템 구축하는 방법 (0) | 2025.03.13 |
서버리스 시스템 구축하는 방법: 완벽 가이드 (0) | 2025.03.13 |
- Total
- Today
- Yesterday
- Next.js
- rag
- SEO최적화
- gatsbyjs
- SEO 최적화
- kotlin
- Docker
- 프론트엔드
- llm
- PostgreSQL
- CI/CD
- 프론트엔드면접
- seo 최적화 10개
- 개발블로그
- Ktor
- flax
- 웹개발
- NestJS
- REACT
- Python
- nextJS
- nodejs
- JAX
- 딥러닝
- Prisma
- App Router
- 백엔드개발
- AI챗봇
- 파이썬알고리즘
- fastapi
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |