티스토리 뷰

반응형

Kubernetes에서 Nginx Reverse Proxy 배포 및 설정하기

1. 개요

이 글에서는 Kubernetes에서 Nginx Reverse Proxy를 배포하고 설정하는 방법을 다룹니다. PostgreSQL과 같은 내부 서비스로 트래픽을 라우팅하기 위해 Ingress Controller를 활용하며, 도메인 기반 라우팅 및 보안 설정을 포함하여 설명합니다.


2. Kubernetes에서 Nginx Reverse Proxy 실행 아키텍처

Nginx Reverse Proxy는 Kubernetes 환경에서 다음과 같은 역할을 수행합니다:

  1. Ingress Controller - 클러스터 내부 서비스로 트래픽 라우팅
  2. 도메인 기반 라우팅 - 특정 도메인에 따라 다른 서비스로 트래픽 전달
  3. 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에서 성능 및 보안 최적화
  • 자동화된 배포 및 운영 방법

 

 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함
반응형