[Udemy] Services Demo with Cluster IP and Load Balancer Services (Declarative)
Service Demo
1. User가 http://<SVC-Public-IP>/hello로 접속
2. 해당 요청이 LoadBalancer로 전달 후, Front App(Pod)로 이동
3. Front App에 있는 Nginx 역방향 프록시 응용 프로그램의 프록시 규칙을 통해 Backend App(Pod)으로 요청 전달
4. 해당 요청을 Backend App의 Cluster IP로 전달
5. Backend App(Pod)으로 요청 완료 후 Hello World Service 출력
Backend Rest App 환경 구성 (Deployment / ClusterIP)
# backend-deployment.yaml 파일 작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-restapp
labels:
app: backend-restapp
tier: backend
spec:
replicas: 3
selector:
matchLabels:
app: backend-restapp
template:
metadata:
labels:
app: backend-restapp
tier: backend
spec:
containers:
- name: backend-restapp
image: stacksimplify/kube-helloworld:1.0.0
ports:
- containerPort: 8080
# Deployment 생성
kubectl apply -f 01-backend-deployment.yml
# backend-clusterip-service.yaml 파일 작성
apiVersion: v1
kind: Service
metadata:
name: my-backend-service ## VERY VERY IMPORTANT - NGINX PROXYPASS needs this name
labels:
app: backend-restapp
tier: backend
spec:
#type: ClusterIP is a default service in k8s
selector:
app: backend-restapp
ports:
- name: http
port: 8080 # ClusterIP Service Port
targetPort: 8080 # Container Port
# Service 생성
kubectl apply -f 02-backend-clusterip-service.yml
# 확인
kubectl get all
---
NAME READY STATUS RESTARTS AGE
pod/backend-restapp-7865cdf94-5gl9z 1/1 Running 0 3m41s
pod/backend-restapp-7865cdf94-m6rch 1/1 Running 0 3m41s
pod/backend-restapp-7865cdf94-wsh6k 1/1 Running 0 3m41s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 44h
service/my-backend-service ClusterIP 10.0.33.153 <none> 8080/TCP 39s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/backend-restapp 3/3 3 3 3m41s
NAME DESIRED CURRENT READY AGE
replicaset.apps/backend-restapp-7865cdf94 3 3 3 3m41s
Frontend Rest App 환경 구성 (Deployment / LoadBalancer)
# frontend-deployment.yaml 파일 작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-nginxapp
labels:
app: frontend-nginxapp
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
app: frontend-nginxapp
template:
metadata:
labels:
app: frontend-nginxapp
tier: frontend
spec:
containers:
- name: frontend-nginxapp
image: stacksimplify/kube-frontend-nginx:1.0.0
ports:
- containerPort: 80
# Deployment 생성
kubectl apply -f 03-frontend-deployment.yml
# frontend-LoadBalancer-Service.yaml 파일 작성
apiVersion: v1
kind: Service
metadata:
name: frontend-nginxapp-loadbalancer-service
labels:
app: frontend-nginxapp
tier: frontend
spec:
type: LoadBalancer # ClusterIp, # NodePort
selector:
app: frontend-nginxapp
ports:
- name: http
port: 80 # Service Port
targetPort: 80 # Container Port
# Load Balancer 생성
kubectl apply -f 04-frontend-LoadBalancer-service.yml
# 확인
kubectl get all
---
NAME READY STATUS RESTARTS AGE
pod/backend-restapp-7865cdf94-5gl9z 1/1 Running 0 14m
pod/backend-restapp-7865cdf94-m6rch 1/1 Running 0 14m
pod/backend-restapp-7865cdf94-wsh6k 1/1 Running 0 14m
pod/frontend-nginxapp-5b9f4c95ff-mktvp 1/1 Running 0 3m16s
pod/frontend-nginxapp-5b9f4c95ff-slkmr 1/1 Running 0 3m16s
pod/frontend-nginxapp-5b9f4c95ff-tth2g 1/1 Running 0 3m16s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/frontend-nginxapp-loadbalancer-service LoadBalancer 10.0.196.214 20.249.169.252 80:30280/TCP 13s
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 44h
service/my-backend-service ClusterIP 10.0.33.153 <none> 8080/TCP 11m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/backend-restapp 3/3 3 3 14m
deployment.apps/frontend-nginxapp 3/3 3 3 3m16s
NAME DESIRED CURRENT READY AGE
replicaset.apps/backend-restapp-7865cdf94 3 3 3 14m
replicaset.apps/frontend-nginxapp-5b9f4c95ff 3 3 3 3m16s
# Frontend App의 Service External IP로 접속
# Access REST Application
http://<Load-Balancer-Service-IP>/hello
http://<Load-Balancer-Service-IP>/hello로 접근 시,
Load Balancer에 의해 Pod의 부하 분산이 이루어 지는 것을 확인 가능
# 삭제
kubectl delete -f 01-backend-deployment.yml -f 02-backend-clusterip-service.yml -f 03-frontend-deployment.yml -f 04-frontend-LoadBalancer-service.yml
kubectl get all
[참고 영상]
Udemy - Azure Kubernetes Service with Azure DevOps and Terraform
섹션 5 : Kubernetes Fundamentals with YAML - Declarative Approach
42. Step-07: Create Backend Application k8s Deployment and Service
43. Step-08: Create frontend application k8s deployment and service and test
[참고 문서]