[MSA 설계] 10주차-3일차: k8s Service 및 Ingress 컨트롤러 실습

limlim·2025년 2월 26일
0

KDT

목록 보기
11/21
  1. kubelet으로 컨테이너 진단
  • kublet은 컨테이너의 상태를 모니터링하고 관리하기 위해 여러 종류의 프로브(probe)를 사용함

  • 여기서 프로브(probe)란?
    : 컨테이너가 정상적으로 동작하는지, 트래픽을 받을 준비가 되었는지, 또는 아직 초기화 중인지 애플리케이션의 상태 등을 확인하기 위해 사용되는 진단 도구

  • 추가적으로 프로브 종류에는 3가지 정도 있는데 아래와 같다.

    1) Liveness Probes

    : 컨테이너가 실행 중인지를 판단하는데 사용됨
    : HTTP GET 요청, TCP 소켓 체크, 또는 커스텀 명령 실행을 통해 수행됨

    2) Readiness Probes

    : 컨테이너가 트래픽을 받을 준비가 되었는지를 확인하는 데 사용됨
    : 초기 데이터 로딩이나 설정 과정이 필요한 경우에 사용됨
    : Liveness Probes와 같은 방법을 사용함
    : Readiness Probes가 실패하면, k8s는 해당 컨테이너에 트래픽을 보내지 않음

    3) Startup Probes

    : 컨테이너 안 애플리케이션이 시작되었는지 확인하는데 사용됨
    : 특히, 시작 시간이 긴 애플리케이션에 유용함
    : 위와 동일한 방법을 사용할 수 있으며, 이 프로브가 성공적으로 반환될 때까지 LivenessReadiness 프로브의 검사는 시작되지 않음

  1. k8s Service
  • Service는 여러 개 파드에 접근할 수 있는 하나의 IP를 제공하고, 본질적으로 로드밸런서 역할을 함

  • 파드는 컨트롤러가 관리하므로 한군데에 고정해서 실행되지 않고, 클러스터 안을 옮겨 다님

  • 이 과정에서 노드를 옮기면서 실행되기도 하고 클러스터 안 파드의 IP가 변경되기도 함

  • Service 타입

    1) ClusterIP (기본)

    : 클러스터 내부에서만 접근 가능한 내부 IP를 생성함
    : 클러스터 안 노드나 파드에서는 클러스터 IP를 이용해서 서비스에 연결된 파드에 접근함
    : 클러스터 외부에서는 이용할 수 없음
    : 활용 사례
    -> 내부 컴포넌트 간 통신, DB 접근, API 서비스, 애플리케이션 간 의존성 관리

    2) NodePort

    : 서비스 하나에 모든 노드의 지정된 포트를 할당함
    : 노드의 포트를 사용하므로 클러스터 안 뿐만 아니라 클러스터 외부에서도 접근할 수 있음
    : 활용 사례
    -> 개발 및 테스트 환경, 작은 규모의 운영 환경, 내부 네트워크에서의 접근

    3) LoadBalancer

    : 퍼블릭, 프라이빗 클라우드, 쿠버네티스를 지원하는 로드밸런서를 장비에서 서비스를 외부에 노출하기 위해 사용함
    : 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 해당 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 해줌
    : 활용 사례
    -> 인터넷에 노출된 애플리케이션, 자동 스케일링, 간편한 트래픽 관리, 고가용성 및 장애 복구

  • Service 사용 방법

     # 1. yaml 파일 생성
     
      # 2. service 클러스터에 적용
      k apply -f yaml파일명
      
      # 3. deployment로 서비스에 연결한 pod 생성
      k create deployment nginx-for-svc --image=nginx --replicas=2 --port=80
      
      # 4. service 생성 확인
      k get svc
      
      # 5. 현재 실행중인 파드 IP 확인
      k get pods -o wide
     
  1. Ingress 컨트롤러
  • Ingress는 주로 클러스터 외부에서 내부 파드에 접근할 때 사용하는 방법임

  • HTTP/HTTPS 경로를 관리함

  • 외부 요청을 서비스로 라우팅하며, 보통 호스트나 URL 경로, 다른 조건에 따라 라우팅을 구분함

  • Ingress 기능: URL 기반 라우팅, 가상 호스팅, SSL/TLS 종료

  • Ingress 사용 방법

    # 1. Ingress 컨트롤러 활성화
     minikube addons enable ingress
     
     # 2. Ingress yaml 파일 설정
     
     # 3. 생성한 ingress 템플릿 클러스터에 적용
     k apply -f yaml파일명
  • Ingress Controller
    : Ingress 리소스에 정의된 규칙을 실제로 구현하는 컴포넌트임
    : Ingress는 설정일 뿐이고, 설정 내용대로 동작하는 실제 주체는 Ingress Controller
    : Ingress 리소스를 감시하고, 그 설정대로 외부 트래픽을 클러스터 내 서비스로 전달하는 게 주요 역할임
    : 쿠버네티스가 공식적으로 제공하는 것은 ingress-nginx

네임스페이스(Namespace)

  • k8s에서 네임스페이스는 클러스터 내의 자원을 분리하여 관리할 수 있는 방법을 제공함

  • 네임스페이스 주요 기능
    1) 리소스 분리
    2) 액세스 제어
    3) 리소스 할당
    4) 네임스페이스 별 설정

  • 기본 제공 네임스페이스

    1) default
    : 특별한 네임스페이스를 지정하지 않을 때 사용되는 기본 네임스페이스임

    2) kube-system
    : k8s 시스템 자체가 생성한 리소스(ex) API 서비스, 스케줄러 등)와 사용하는 네임스페이스임

    3) kube-public
    : 클러스터 내 모든 사용자가 읽을 수 있는 공개적인 데이터를 저장하는 데 사용되는 네임스페이스임

    4) kube-node-lease
    : 각 노드의 가용성 정보를 관리하기 위해 사용되며, 노드가 살아 있음을 증명하는 리스 정보를 담고 있음

추가 자료) 쿠버네티스 공식문서

profile
不怕慢,只怕站 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN