Kubernetes 환경에서 애플리케이션을 배포할 때, 외부 트래픽을 효과적으로 관리하기 위해 로드 밸런서를 사용하는 것이 중요합니다. 이 글에서는 Kubernetes 클러스터 내에서 Nginx Ingress Controller를 설정하여 로드 밸런서를 구성하는 방법에 대해 자세히 설명하겠습니다.
Nginx Ingress Controller란?
Ingress Controller는 Kubernetes 클러스터 내에서 HTTP(S) 요청을 관리하는 역할을 합니다. Nginx Ingress Controller는 Nginx를 기반으로 하여 외부 요청을 내부 서비스로 라우팅하고, SSL 종료, URL 리다이렉션, 인증 등의 기능을 제공합니다.
필수 조건
- Kubernetes 클러스터가 설치되어 있어야 합니다.
kubectlCLI가 클러스터와 연결되어 있어야 합니다.
Nginx Ingress Controller 설치
Nginx Ingress Controller를 설치하기 위해 Helm 패키지 매니저를 사용할 것입니다. Helm이 설치되어 있지 않다면, 먼저 Helm을 설치해야 합니다.
- Helm 설치 (선택 사항)
- Nginx Ingress Controller 설치
- 설치 확인
- 예제 애플리케이션 배포
- 서비스 생성
- Ingress 리소스 생성
Helm을 설치하려면 다음 명령어를 수행합니다.
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
다음 명령어를 통해 Nginx Ingress Controller를 설치합니다.
helm repo add ingress-nginx https://charts.ingress-nginx.io
helm repo update
helm install my-nginx ingress-nginx/ingress-nginx
위 명령어는 Nginx Ingress Controller를 my-nginx라는 이름으로 설치합니다.
Nginx Ingress Controller가 정상적으로 설치되었는지 확인하기 위해 다음 명령어를 실행합니다.
kubectl get pods --namespace default -l app.kubernetes.io/name=ingress-nginx
이 명령어를 통해 Nginx Ingress Controller의 Pod 상태를 확인할 수 있습니다.
서비스 및 인그레스 리소스 설정
이제 기본 애플리케이션을 배포하고, Nginx Ingress Controller를 통해 외부 트래픽을 라우팅할 준비가 되었습니다.
간단한 Nginx 서버를 배포하는 YAML 파일을 작성합니다. nginx-deployment.yaml 파일을 생성하고 다음 내용을 추가합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 2
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: my-nginx
image: nginx:latest
ports:
- containerPort: 80
배포 후 다음 명령어로 Nginx 애플리케이션을 클러스터에 적용합니다.
kubectl apply -f nginx-deployment.yaml
Nginx Deployment에 연결할 서비스를 생성합니다. nginx-service.yaml 파일을 생성하고 다음 내용을 추가합니다.
apiVersion: v1
kind: Service
metadata:
name: my-nginx
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
selector:
app: my-nginx
다음 명령어로 서비스를 생성합니다.
kubectl apply -f nginx-service.yaml
마지막으로, Ingress 리소스를 생성하여 외부 트래픽을 Nginx 서비스로 라우팅합니다. nginx-ingress.yaml 파일을 생성하고 다음 내용을 추가합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my-nginx.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-nginx
port:
number: 80
Ingress 리소스를 적용하기 위해 다음 명령어를 실행합니다.
kubectl apply -f nginx-ingress.yaml
로컬 환경에서 테스트하기
Ingress를 사용하기 위해서는 DNS 설정이 필요합니다. 로컬 환경에서는 /etc/hosts 파일에 my-nginx.local 도메인을 추가하여 로컬에서 접근할 수 있도록 합니다. 아래와 같이 IP 주소와 도메인을 추가합니다.
<YOUR_INGRESS_CONTROLLER_IP> my-nginx.local
이제 웹 브라우저에서 http://my-nginx.local에 접속하여 Nginx 서버가 정상적으로 작동하는지를 확인합니다.
마무리
Nginx Ingress Controller를 활용하여 Kubernetes 클러스터에서 로드 밸런서를 설정하는 방법에 대해 설명했습니다. 이 설정을 통해 외부 트래픽을 효과적으로 관리하고, 애플리케이션의 가용성을 높일 수 있습니다. 추가적인 설정이나 기능(예: HTTPS, 인증 등)에 대해서는 Nginx Ingress Controller 문서를 참고하시면 많은 도움이 될 것입니다.