[쿠버네티스] 서비스

    728x90
    반응형

    출처

    Cloud Native DevOps with Kubernetes / 쿠버네티스를 활용한 클라우드 네이티브 데브옵스

    Certified Kubernetes Administrator (CKA) with Practice Tests(Udemy)

    SERVICES

    What is Service?

    앱 안팎의 다양한 구성 요소 간의 통신을 가능하게 한다.
    Pod와 Pod 또는 Pod와 사용자를 연결한다.

     

    사용자가 Pod에 배포된 웹 앱에 접근하는 과정

    1. 사용자가 웹 브라우저 또는 API를 통해 웹 애플리케이션에 요청을 보낸다.
    2. 요청이 외부 IP주소를 통해 클러스터의 LB로 전달된다. LB는 요청을 Service로 전달한다.
    3. LB 또는 NodePort를 통해 전달된 요청은 클러스터 내의 특정 Service로 라우팅 된다. Service는 Label Selector를 사용하여 관련 Pod를 찾는다.
    4. Service가 연결된 Pod(실제 웹 어플리케이션이 실행되고 있는 컨테이너)에 요청이 전달된다.
    5. Pod 내에서 실행되는 웹 어플리케이션 컨테이너가 요청을 처리하고, 필요한 응답을 생성한다.
    6. 컨테이너가 생성한 응답이 Pod->Service->LB->사용자 순으로 전달된다.

    Services Types

    NodePort

    클러스터의 모든 Node에서 지정된 Port를 통해 외부에서 접근할 수 있도록 도와준다.
    클러스터의 IP 주소와 함께 특정 Port로 요청하면 해당 서비스에 연결된다.

     

    NodePort yml

    #Service yml 구조
    [root@]$ vi service-definition.yml
    
    apiVersion: v1
    kind: Service
    metadata:
      name: imfra-service #service의 이름
    
    spec: #실제 Service를 정의
      type: NodePort #Service Type
      ports: 
        - targetPort: 80 #Pod내 배포된 App Container의 Port
          port: 80 #Service의 Port
          nodePort: 30008 #AP서버의 Port (30000-32767)
      selector: #Pod yml에 정의한 labels 하위 항목을 그대로 작성
        type: rolling-update-test #연결을 원하는 Pod와 일치

     

    #Service 생성
    [root@]$ kubectl create -f service-definition.yml
    
    service "imfra-service" created

     

    #Service 확인
    [root@]$ kubectl get services
    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    kubernetes      ClusterIP   10.x.x.x     <none>        443/TCP        28d
    imfra-service   NodePort    10.x.x.x     <none>        80:30008/TCP   25x

     

    ClusterIP

    쿠버네티스 Services를 통해 Pod를 하나로 묶고 하나의 인터페이스를 통해 무작위로 하나의 Pod로 요청을 전달한다.
    외부에서 직접 접근할 수 없고, 다른 Pod나 Service에서만 사용된다.

     

    ClusterIP yml

    #CluserIP yml 구조
    [root@]$ vi service-definition.yml
    
    apiVersion: v1
    kind: Service
    metadata: 
      name: imfra-cluserip
    
    spec: #실제 Service를 정의
      type: ClusterIP #Service Type
      ports: 
        - targetPort: 80 #Pod내 배포된 App Container의 Port
          port: 80 #Service의 Port
    
      selector: #Pod yml에 정의한 labels 하위 항목을 그대로 작성
        type: rolling-update-test #연결을 원하는 Pod와 일치

     

    LoadBalancer

    클라우드 환경에서 사용되는 Service타입. 외부 LB를 생성하여 클러스터의 Service에 대한 접근을 제공한다.
    클라우드 제공업체의 LB를 통해 Service에 대한 요청이 자동으로 분산된다.

     

    LoadBalancer yml

    #LoadBalancer yml 구조
    [root@]$ vi service-definition.yml
    
    apiVersion: v1
    kind: Service
    metadata: 
      name: imfra-lb
    
    spec: #실제 Service를 정의
      type: LoadBalancer #Service Type
      ports: 
        - targetPort: 80 #Pod내 배포된 App Container의 Port
          port: 80 #Service의 Port
          nodePort: 30008 #AP서버의 Port (30000-32767)

     

     

     

     

     


     

    728x90
    반응형

    댓글