happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (302)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (54)
      • DevOps (4)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 18
  • Patch
  • kubernetes
  • apply
  • replace
  • edit
  • 15

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

클라우드/Kubernetes(쿠버네티스)

[쿠버네티스] 서비스

2021. 6. 7. 00:48

서비스란?

여러 개 파드에 접근할 수 있는 IP하나를 제공한다.
다양한 기능을 제공하지만 본질적으로 로드밸런서 역할이다.

서비스의 개념

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

  • 이 과정에서 노드를 옮기면서 실행되기도 하고 클러스터 안 파드의 IP가 변경되기도 한다.
  • 이렇게 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법이 쿠버네티스의 서비스이다.
  • 서비스를 사용하면 파드가 클러스터 안 어디에 있든 고정 주소를 이용해 접근할 수 있다.
  • 클러스터 외부에서 클러스터 안 파드에 접근할 수도 있다.
  • 인스레스로도 접근할 수 있는데 서비스는 주로 L4영역에서 통신할 때 사용하고 인그레스는 L7영역에서 통신할 때 사용한다는 차이점이 있다.
    • 상황에 따라 두 가지를 혼합해서 사용할 수도 있지만 보통 역할을 분리해서 사용한다.
  • 파드가 클러스터 안 다른 위치로 옮겨져 IP가 변하더라도 서비스가 자동으로 새로위치를 옮겨 실행한 파드와 통신하므로 실제 접속하는 사용자는 서비스만 이용해서 문제없이 위치를 옮긴 파드를 사용할 수 있다.

서비스 타입

  1. ClusterIP
  • 기본 서비스 타입
  • 쿠버네티스 클러스터 안에서만 사용가능
  • 클러스터 안 노드나 파드에서는 클러스터IP를 이용해 서비스에 연결된 파드에 접근
  • 클러스터 외부에서는 이용할 수 없다.
  1. NodePort
  • 서비스 하나에 모든 노드의 지정된 포트를 할당
  • 노드에 상관없이 서비스에 지정된 포트 번호만 사용하면 파드에 접근할 수 있다.
  • 노드의 포트를 사용하므로 클러스터 안 뿐만 아니라 외부에서도 접근할 수 있다.
  • 파드가 node1에서만 실행되어 있고 node2에는 실행되지 않았더라도 node2:8080으로 접근했을 때 node1에 실행된 파드로 연결한다.
  • 클러스터 외부에서 클러스터 안 파드로 접근할 때 사용할 수 있는 가장 간단한 방법
  1. LoadBalancer
  • 퍼블릭 클라우드, 프라이빗 클라우드, 쿠버네티스를 지원하는 로드밸런서 장비에서 사용한다.
  • 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 해당 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 해준다.
  1. ExternalName
  • 서비스를 spec.externalName필드에 설정한 값과 연결한다.
  • 클러스터 안에서 외부에 접근할 때 주로 사용

서비스 사용하기

  • spec.type : 서비스타입. 기본타입은 ClusterIP
  • spec.clusterIP : 클러스터IP설정
  • spec.selector : 서비스와 연결할 파드에 설정한 .labels 필드값 설정
  • spec.prots[] : 서비스에서 한꺼번에 포트 여러 개를 외부에 제공할 때는 spec.ports[] 하위에 필드 값을 설정하면 된다.

헤드리스 서비스

  • spec.clusterIP 필드 값을 None으로 설정하면 클러스터 IP가 없는 서비스를 만들 수 있다. 
  • 로드밸런싱이 필요 없거나 단일 서비스IP가 필요 없을 때 사용
  • 셀렉터(spec.selector)를 설정하면 쿠버네티스 API로 확인할 수 있는 엔드포인트가 만들어진다.
  • 서비스와 연결된 파드를 직접 가리키는 DNS A 레코드도 만들어진다.
  • 셀렉터가 없으면 엔트포인트가 만들어지지 않지만 DNS 시스템은 ExternalName 타입의 서비스에서 사용할 CNAME레코드가 만들어진다.

kube-proxy

  • 쿠버네티스에서 서비스를 만들었을 때 클러스터 IP나 노드 포트로 접근할 수 있게 만들어 실제 조작을 하는 컴포넌트
  • 쿠버네티스 클러스터의 노드마다 실행되면서 클러스터 내부 IP로 연결하려는 요청을 적절한 파드로 전달
  • 종류 : userspace, iptables, IPVS

'클라우드 > Kubernetes(쿠버네티스)' 카테고리의 다른 글

[쿠버네티스] 레이블과 애너테이션  (0) 2021.06.09
[쿠버네티스] 인그레스  (0) 2021.06.08
[쿠버네티스] 컨트롤러(데몬세트, 스테이트풀세트, 잡, 크론잡)  (0) 2021.06.06
[쿠버네티스] 컨트롤러(레플리케이션 컨트롤러, 레플리카세트, 디플로이먼트)  (0) 2021.06.05
[클라우드] PaaS-TA  (0) 2021.05.27
    '클라우드/Kubernetes(쿠버네티스)' 카테고리의 다른 글
    • [쿠버네티스] 레이블과 애너테이션
    • [쿠버네티스] 인그레스
    • [쿠버네티스] 컨트롤러(데몬세트, 스테이트풀세트, 잡, 크론잡)
    • [쿠버네티스] 컨트롤러(레플리케이션 컨트롤러, 레플리카세트, 디플로이먼트)
    happyso
    happyso

    티스토리툴바