반갑습니다!
💙베하💙 누구든 탑승할 수 있는 유임승차 팀의 BTC 룰루랄라 입니다!!💨😉
저번 포스팅은 쿠버네티스 기능 중 하나인 Ingress에 대해서 설명 드렸는데요~
이번 포스팅에서는 Kubernetes의 Ingress에 대해서 좀 더 심층적으로 살펴보겠습니다.
그럼 시작해 보겠습니다!
룰루랄라~♬
echo 웹 애플리케이션 배포
Nginx Ingress Controller 설치가 완료되면 echo 웹 애플리케이션을 배포합니다. v1, v2 2가지를 배포합니다.
Ingress Spec중에 rules.host부분을 minikube ip로 변경해야 합니다.
Docker
Docker driver를 사용중이라면 rules.host부분에 127.0.0.1을 사용합니다. v1.echo.127.0.0.1.sslip.io
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echo-v1
spec:
rules:
- host: v1.echo.192.168.64.5.sslip.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: echo-v1
port:
number: 3000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-v1
spec:
replicas: 3
selector:
matchLabels:
app: echo
tier: app
version: v1
template:
metadata:
labels:
app: echo
tier: app
version: v1
spec:
containers:
- name: echo
image: ghcr.io/subicura/echo:v1
livenessProbe:
httpGet:
path: /
port: 3000
---
apiVersion: v1
kind: Service
metadata:
name: echo-v1
spec:
ports:
- port: 3000
protocol: TCP
selector:
app: echo
tier: app
version: v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echo-v2
spec:
rules:
- host: v2.echo.192.168.64.5.sslip.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: echo-v2
port:
number: 3000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-v2
spec:
replicas: 3
selector:
matchLabels:
app: echo
tier: app
version: v2
template:
metadata:
labels:
app: echo
tier: app
version: v2
spec:
containers:
- name: echo
image: ghcr.io/subicura/echo:v2
livenessProbe:
httpGet:
path: /
port: 3000
---
apiVersion: v1
kind: Service
metadata:
name: echo-v2
spec:
ports:
- port: 3000
protocol: TCP
selector:
app: echo
tier: app
version: v2
v1.18 이하 버전
쿠버네티스 v1.19부터 Ingress Spec 중 rules.http.paths.backend가 변경되었습니다. v1.18 이하라면 pathType을 제거하고 backend를 다음과 같이 변경해주세요.
backend:
serviceName: echo-v1
servicePort: 3000
Deployment, Service, Ingress를 생성합니다.
kubectl apply -f echo-v1.yml,echo-v2.yml
# Ingress 상태 확인
kubectl get ingress
kubectl get ing
실행 결과
NAME CLASS HOSTS ADDRESS PORTS AGE
echo-v1 <none> v1.echo.192.168.64.5.sslip.io 192.168.64.5 80 48s
echo-v2 <none> v2.echo.192.168.64.5.sslip.io 192.168.64.5 80 48s
v1.echo.192.168.64.5.sslip.io과 v2.echo.192.168.64.5.sslip.io로 접속 테스트합니다.
Docker
Docker driver를 사용중이라면 v1.echo.127.0.0.1.sslip.io:PORT로 테스트합니다. PORT는 ingress-nginx-controller 서비스의 첫번째 항목입니다.
#Ingress 생성 흐름
Ingress가 어떻게 동작하는지 알아봅니다.
- Ingress Controller는 Ingress 변화를 체크
- Ingress Controller는 변경된 내용을 Nginx에 설정하고 프로세스 재시작
동작방식을 보면 YAML로 만든 Ingress 설정을 단순히 nginx 설정으로 바꾸는 걸 알 수 있습니다. 이러한 과정을 수동으로 하지 않고 Ingress Controller가 하는 것 뿐입니다.
Ingress는 도메인, 경로만 연동하는 것이 아니라 요청 timeout, 요청 max size 등 다양한 프록시 서버 설정을 할 수 있습니다. 상세 설정은 추후 고급편에서 다시 다루겠습니다.
#마무리
Ingress를 사용하면 YAML 설정만으로 도메인, 경로 설정을 손쉽게 할 수 있습니다. 기존에 도메인을 연결하려면 담당자에게 요청하고 설정 파일을 변경한 다음 프로세스 재시작까지 수동으로 작업했는데, 더 이상 그런 과정을 거치지 않아도 됩니다.
댓글