DevOps/Kubernetes

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter07. 서비스

noahkim_ 2021. 7. 21. 10:59

7.1 서비스의 개념

 

해당 파드에 접근하기 위해 필요. 클러스터 외부에서도 접근 가능.(인그레스)

 

파드는 한곳에 고정되서 실행되지 않고, 클러스터 안을 돌아다님. (노드를 옮겨다니거나 파드의 IP가 달라질 수도 있음)

 

  • Kubectl expose pod “파드 이름”
    (—port= “ “, —name “서비스이름”)

7.2 서비스 타입

  1. ClusterIP
    기본 서비스 타입. 클러스터 안에서만 사용가능.(외부에서는 이용 불가)
  2. NodePort
    서비스에 할당된 노드의 지정된 포트를 할당함.
    ClusterIP의 접근 범위 뿐만 아니라 클러스터 외부에서도 포트번호로 접근 가능

   3. LoadBalancer
        로드밸런서와 파드를 연결한 해당 로드밸런서의 IP 이용해 클러스터 외부에서 파드에 접근할 있도록

 

   4. ExternalName
        서비스를 spec.externalName 필드에 설정한 값과 연결함.
        클러스터 안에서 외부에 접근할 주로 사용함.

 

7.3 서비스 사용하기

  • spec.clusterIP : 클러스터 IP를 직접 설정할 수 있음.
  1. ClusterIP 타입 서비스 사용하기

Endpoint : 이 서비스에 연결된 파드들의 IP를 가리킴

   

    2. NodePort 타입 서비스 사용하기

nodePort는 30000~

ClusterIP 타입 서비스의 80번 포트와 외부 포트가 연결되었음.

 

     3. LoadBalancer 타입 서비스 사용하기

 

    4. ExternalName 타입 서비스 사용하기

 

연결하려는 외부 도메인 값을 설정해줌

 

7.4 헤드리스 서비스

 

로드밸런싱이 필요없거나 단일 서비스 IP가 필요 없을 떄

spec.clusterIP값을 None으로 설정함

 

7.5 kube-proxy

 

쿠버네티스에서 서비스를 만들었을 때 클러스터 IP나 노드 포트로 접근할 수 있게 만들어 실제 조작을 하는 컴포넌트

 

  1. userspace 모드

 

클라이언트에서 서비스의 클러스터 IP를 통해 어떤 요청을 하면 iptables을 거쳐 kube-proxy가 요청을 받음

서비스의 클러스터 IP는 적절한 파드로 연결해줌. 

이때 요청을 파드들에 나누어줄 때는 라운드 로빈 양식을 사용함.

 

    2. Iptables 모드

 

 

Kube-proxy가 iptables를 관리함. 직접 클라이언트에서 트래픽을 받지 않음

클라이언트에서 오는 모든 요청은 iptables를 거쳐서 파드로 직접 전달됨.

연결 요청이 실패하더라도 재시도하지 않음.

 

    3. IPVS 모드

리눅스 커널에 있는 L4 로드밸런싱 기술. 넷필터를 사용함. 커널 공간에서 동작하고 데이터구조가 해시테이블로 저장하므로 성능이 좋음