ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Udemy] Services Demo with Cluster IP and Load Balancer Services (Declarative)
    kubernetes/udemy 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

Designed by Tistory.