Ingress는 클러스터 외부에서 내부 서비스로 들어오는 HTTP 및 HTTPS 요청을 라우팅하고 로드 밸런싱, SSL 종료, 가상 호스팅과 같은 다양한 기능을 제공합니다. 이 글에서는 kubectl apply -f ingress.yaml
명령어를 사용하여 Ingress 컨트롤러를 설정하는 방법에 대해 알아보겠습니다.
Ingress란 무엇인가?
Ingress는 클러스터 외부에서 내부로의 트래픽을 관리하는 규칙 세트를 정의하는 Kubernetes 리소스입니다. LoadBalancer 서비스나 NodePort 서비스와는 다르게, Ingress는 클러스터 외부의 여러 도메인이나 URL 경로에 따라 트래픽을 적절한 서비스로 라우팅할 수 있습니다. 예를 들어, example.com/api
요청은 API 서버로, example.com/web
요청은 웹 애플리케이션 서버로 라우팅할 수 있습니다. 이를 통해 단일 IP 주소나 DNS 이름으로 여러 서비스를 운영할 수 있게 됩니다.
Ingress 컨트롤러 설정하기
Ingress 리소스는 Kubernetes 자체에 내장된 기능이 아니며, 이를 사용하려면 클러스터에 Ingress 컨트롤러를 설치해야 합니다. Ingress 컨트롤러는 Ingress 리소스를 모니터링하고, 해당 리소스에 정의된 규칙을 바탕으로 클러스터 외부와 내부 간의 네트워크 트래픽을 관리합니다. 일반적으로 많이 사용되는 Ingress 컨트롤러로는 NGINX, HAProxy, Traefik 등이 있습니다.
kubectl apply -f ingress.yaml
명령어로 Ingress 설정하기
Ingress 컨트롤러가 설치된 후, Ingress 리소스를 생성하거나 업데이트하려면 Ingress를 정의한 YAML 파일을 준비하고, 이를 적용해야 합니다. 이때 사용하는 명령어가 kubectl apply -f ingress.yaml
입니다. 이 명령어는 YAML 파일에 정의된 Ingress 리소스를 클러스터에 적용하며, 새로운 Ingress를 생성하거나 기존 Ingress를 업데이트합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
위의 예제는 example.com
도메인의 /api
경로로 들어오는 요청을 api-service
로, /web
경로로 들어오는 요청을 web-service
로 라우팅하는 Ingress 리소스를 정의합니다. 이 YAML 파일을 사용하여 kubectl apply -f ingress.yaml
명령어를 실행하면, Kubernetes 클러스터에 해당 Ingress 리소스가 생성되고, 설정된 규칙에 따라 트래픽이 라우팅됩니다.
Ingress 설정 시 고려사항
Ingress를 설정할 때는 몇 가지 고려해야 할 사항이 있습니다. 먼저, Ingress 컨트롤러가 클러스터에 올바르게 설치되어 실행 중인지 확인해야 합니다. Ingress 리소스가 정의되어도 컨트롤러가 없으면 트래픽이 라우팅되지 않습니다. 또한, 각 경로에 대한 올바른 백엔드 서비스가 설정되어 있어야 하며, SSL 인증서가 필요한 경우 적절히 설정해야 합니다.