ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • kubernetes service
    아키텍처/MSA 2023. 2. 21. 17:53
    728x90
    반응형

    서비스는 리마인드만하고 ingress만 해오기

     

    Service 개념

     ❗ 서비스 = 쿠버네티스 네트워크

    동일한 서비스를 제공하는 Pod 그룹의 단일 진입점을 제공

    Process

    1️⃣실행 명령을 Deployment에게 시킴

    2️⃣ API는 이 요청을 받아 deployment 문법을 확인

    3️⃣ etcd에 있는 node1~3에 대한 정보들을 수립하고 etcd에 보존

    4️⃣ controller와 scheduler의 도움을 받아 서비스 3개를 실행

     

    • 하나의 파드에 일이 몰리면 안되니까 균등하게 작업을 분산 시켜주는 게 필요
    • 어떻게?
      • 서비스를 요청해서!
      • api서비스 구조로 k8s에 명령을 내림
      • 단일 진입점을 만들어서 분산할 수 있게!
      • virtual ip를 만들어서 3개의 pod의 ip에 LB → 이 정보를 ectd에 기록 ⇒ Service API

    Service 타입 - 4가지

    1️⃣ Cluster Ip(default)

    Pod 그룹의 단일 진입점(Virtual IP) 생성

    • 가상 ip를 만들어서 service 실행시 node로 전달
    • 가장 Basic한 service의 구조임
    • private ip
      • k8s내에서만 ip를 할당해준다.

    2️⃣ Node Port

    ClusterIP가 생성된 후 모든 Worker Node에 외부에서 접속 가능한 포트가 예약

    • 각 node에 port를 요청해서 각 node의 port를 열리게 함
    • cluster ip보다 규모가 커져서 cluster ip까지 지원해주겠다는 1️⃣ 보다 확장적인 의미!
    • cluster ip가 작용이 되는 공간은 가상화 된 자원에서만 작동
      • 가상화된 네트워크에서 나와서 로컬 포트랑 연결을 하고 싶으면 node port를 해야함!

    3️⃣ LoadBalancer

    클라우드 인프라나 오픈스택 클라우드에 적용 LB를 자동으로 provision하는 기능 지원

    • k8s 밖에서 LB를 통해 실제 장비와 node port를 연결
    • (단, LB는 클라우드 인프라 - AWS,AZURE,GCP- 와 같은 클라우드 인프라에서 사용 가능)
    • 우리는 Load Balancer ip만 알면 서비스에 접속할 수 있다.

    4️⃣ ExternalName

    cluster 안에서 외부에 접속 시 사용할 도메인을 등록해서 사용 cluster 도메인이 실제 외부 도메인으로 치환되어 동작

    • node의 자체 ip가 google.com 처럼 자체 설정한 도메인으로 치환 되는 것을 cluster 내부에서 지원

    Ingress 개념

    <aside> ❗ 인그레스란? Pod,Cluster 와 같은 API의 일부임

    </aside>

    • HTTP나 HTTPS를 통해 클러스터 내부의 서비스를 외부로 노출
    • 웹 기반의 서비스를 외부에서 접속할 수 있도록 지원하는게 바로 Ingress

    Ingress 기능

    • Service에 외부 URL 제공
      • 기본적으로, ingress는 서비스랑 연결되어있다!
    • 트래픽 로드 밸런싱
    • SSL 인증서 처리
    • Virtual hosting을 지정
      • rule만 잘 정리해주면 도메인 변경도 가능
      • 도메인을 가지고 기능별로 나눔 DDD
    • 도메인을 가지고 파드 리소스를 나눠주는.. 결국 도메인을 쓰는 것!

    Ingress Controller설명

    • Main 페이지나 Login 페이지의 연할을 수행하는 Main, Login Service 및 Order을 담당하는 service가 있음
    • 이런 서비스에 대한 단일 진입점을 제공하는 것이 Ingress Controller!
    • 우리가 직접 만드는 것은 아니고 k8s 오픈 프로젝트로 만들어져서 제공되고 있음
    • 서비스를 묵어 하나의 rule을 만들어서 특정 서비스로 연결할 수 있게 함

    Ingress Controller 설치

    설치

    $ kubectl apply -f <https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/cloud/deploy.yaml>
    
    
    • 사진

    Pre-flight check

    # ingress-nginx에 대한 pod를 시작시킴
    $ kubectl get pods --namespace=ingress-nginx
    
    # pod가 실행되고 준비될 때 까지 wait
    $ kubectl wait --namespace ingress-nginx \\
      --for=condition=ready pod \\
      --selector=app.kubernetes.io/component=controller \\
      --timeout=120s
    
    • 사진

    Local testing

    # 간단한 웹 서버와 관련 서비스 생성
    $ kubectl create deployment demo --image=httpd --port=80
    $ kubectl expose deployment demo
    
    # 인그레스 리소스 생성
    $ kubectl create ingress demo-localhost --class=nginx \\
      --rule="demo.localdev.me/*=demo:80"
    
    #수신 컨트롤러에 로컬포트 전달
    $ kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80
    
    • 사진인그레스 규칙을 안만들어줘서 이때는 실행이 안되었음 ㅜㅜ

    Online testing

    # 실제 클러스터인 LoadBalancer에 대한 외부 IP 주소 확인
    $ kubectl get service ingress-nginx-controller --namespace=ingress-nginx
    
    # 외부 ip가 pending이면 k8s 클러스터가 로드 밸런서를 프로비저닝할 수 없기에 DNS 레코드 설정
    $ kubectl create ingress demo --class=nginx \\
      --rule="www.demo.io/*=demo:80"
    $ kubectl create ingress demo --class=nginx \\
      --rule www.demo.io/=demo:80
    
    • 사진

     

    참고

    [따배쿠] 7-1. 쿠버네티스 Service 개념과 종류!

    [따배쿠] 8-1 Kubernetes Ingress 개념과 Ingress Controller 설치!

    Ingress Controller 설치

    728x90
    반응형

    '아키텍처 > MSA' 카테고리의 다른 글

    Docker 소개  (0) 2023.03.15
    kubernetes - cronjob  (0) 2023.02.21
    kubernetes - pod, deployment  (0) 2023.02.21
    쿠버네티스 #8 Ingress  (0) 2023.02.21
    쿠버네티스 #7서비스 (service)  (0) 2023.02.21
Designed by Tistory.