[kubernetes] 쿠버네티스 네트워크 - service, ingress

Hoon·2022년 9월 11일
1

Kubernetes

목록 보기
5/7

파드는 컨트롤러가 관리하므로 클러스터 안을 옮겨 다닌다. 이 과정에서 노드를 옮기면서 실행되기도 하고 클러스터 안 파드의 IP 가 변경되기도 한다. 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법이 Service이다.

Service

  • 서비스는 여러 개 파드에 접근할 수 있는 IP 하나를 제공. 로드밸런서 역할.

서비스 타입

  • ClusterIP
    • 기본 서비스 타입
    • 쿠버네티스 클러스터 안에서만 사용. 클러스터 외부에서 이용 X
    • 클러스터 안 노드나 파드에서 ClusterIP를 이용해서 서비스에 연결된 파드에 접근
  • NodePort
    • 서비스 하나에 모든 노드의 지정된 포트를 할당.
    • Node의 Port를 사용하므로 클러스터 안 뿐만 아니라 클러스터 외부에서도 접근 가능.
    • 파드가 노드1에만 실행되어 있고 노드2에 실행되지 않더라도 노드2로 접근했을 때 노드1에 실행된 파드로 연결
    • 클러스터 외부에서 클러스터 안 파드로 접근할 때 사용할 수 있는 가장 간단한 방법
  • LoadBalancer
    • 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 해당 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 한다.
    • External-IP 항목에 로드밸런서 IP를 표시. 이 IP 를 이용해 외부에서 접근
  • ExternalName
    • 서비스를 spec.externalName 필드에 설정한 값과 연결. 클러스터 안에서 외부에 접근할 때 주로 사용.

kube-proxy

  • 서비스를 만들었을 때 ClusterIP나 NodePort로 접근할 수 있게 만들어 실제 조작 하는 컴포넌트
  • 노드마다 실행되면서 클러스터 내부 IP로 연결하려는 요청을 적절한 파드로 전달.
  • 네트워크를 관리하는 방법: userspace, iptables, IPVS

userspace

  • 클라이언트에서 서비스의 클러스터 IP를 통해 어떤 요청을하면 iptables를 거쳐서 kube-proxy가 요청을 받는다. 요청을 파드에 나눠줄 때 round-robin을 사용한다.
  • 파드 하나로의 요청이 실패하면 자동으로 다른 파드에 연결을 재시도

iptables

  • kube-proxy가 직접 클라이언트에서 트래픽을 받지 않고 iptables를 관리하는 역할만 한다.
  • 클라이언트에서 오는 모든 요청은 iptables를 거쳐서 파드로 직접 전달된다. userspace 모드보다 요청 처리 성능이 좋다.
  • userspace와 다르게 연결 요청이 실패하면 재시도 X
  • 컨테이너에 readinessProbe가 설정되었고 그에 따른 헬스 체크가 정상적으로 되어야 연결 요청이 이루어진다.

IPVS

  • 리눅스 커널에 있는 L4 로드밸런싱 기술.
  • 커널 공간에서 동작하고 데이터 구조를 해시 테이블로 저장하기 때문에 iptables 모드보다 빠르고 좋은 성능을 낸다.

Ingress

  • 인그레스는 주로 클러스터 외부에서 파드에 접근할 때 사용
  • L7 영역의 통신을 담당
  • 역할: 클러스터 외부에서 접근해야 할 URL을 사용할 수 있도록 하고, 트래픽 로드밸런싱, SSL 인증서 처리, 도메인 기반 가상 호스팅 제공 등
  • 인그레스: 클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙 모음
  • 인그레스 컨트롤러: 실제로 동작시키는 것
  • 클라우드 사용시: 별다른 설정 없이 자체 로드밸런서 서비스와 연동해서 사용
  • 클라우드 사용 X: 인그레스 컨트롤러를 직접 인그레스와 연동. ingress-nginx를 가장 ㅏㅁㄶ이 사용.

Ingress vs Service

  • 서비스는 주로 L4 영역에서 통신. 인그레스는 L7 영역에서 통신.

Reference

0개의 댓글