kubernetes/udemy

[Udemy] Services Demo with Cluster IP and Load Balancer Services (Declarative)

bbiyak2da 2025. 2. 14. 09:23

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

 

[참고 문서]

https://github.com/stacksimplify/azure-aks-kubernetes-masterclass/blob/master/04-Kubernetes-Fundamentals-with-YAML/04-05-Services-with-YAML/README.md