Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고리즘
- 코딩테스트
- 9020
- Java #백준 #코딩테스트
- 11054
- 11053
- boj
- 2447
- node
- 24479
- 카카오 클라우드 스쿨
- 15552
- Java #코딩테스트
- Spring #Java #Spring Boot #싱글톤
- SpringTokenizer
- Spring #Java #Spring Boot #@BeforeEach #@AfterEach
- 1110
- 백준
- sequelize
- java
- 7568
- Spring #Spring Boot #Java
- 카카오클라우드스쿨
- python
- kakaocloud
- Spring #Java #Spring Boot
- Java #오븐시계 #백준
- kakaocloudschool
- 파이썬
- Spring
Archives
- Today
- Total
YoungSoo
Kubernetes 서비스 본문
서비스의 개념
서비스는 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법입니다.
서비스 타입
- ClusterIP : 기본 서비스 타입이며 쿠버네티스 클러스터 안에서만 사용할 수 있습니다. 클러스터 안 노드나 파드에서는 클러스터 IP를 이용해서 서비스에 연결된 파드에 접근합니다. 클러스터 외부에서는 이용할 수 없습니다.
- NodePort : 서비스 하나에 모든 노드의 지정된 포트를 할당합니다. 클러스터 안 뿐만 아니라 외부에서도 접근할 수 있습니다. 특이한 점은 파드가 하나만 실행되었을 때 다른 파드에서 접속하면 실행되어있는 파드로 연결한다는 것입니다.
- LoadBalancer : AWS, GCP 등 쿠버네티스를 지원하는 로드밸런서 장비를 이용합니다. 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 해당 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 해줍니다.
- ExternalName : 서비스를 .spec.externalName 필드에 설정한 값과 연결합니다. 클러스터 안에서 외부에 접근할 때 주로 사용합니다.
헤드리스 서비스
.spec/clusterIP 필드 값을 None으로 설정하면 클러스터 IP가 없는 서비스를 만들 수 있습니다. 이런 서비스를 헤드리스 서비스라고 하는데 로드밸런싱이 필요 없거나 단일 서비스 IP가 필요 없을 때 사용합니다.
kube-proxy
쿠버네티스에서 서비스를 만들었을 때 클러스터 IP나 노드 포트로 접근할 수 있게 만들어 실제 조작을 하는 컴포넌트입니다.
네트워크 관리법
- userspace 모드 : 클라이언트에서 서비스의 클러스터 IP를 통해 어떤 요청을 하면 iptables를 거쳐서 kube-proxy가 요청을 받습니다. 그리고 적절한 파드로 연결해주는데 이때 라운드 로빈 방식(각 파드에 요청을 골고루 분배하여 부하 분산을 하기 위한 방식으로 사용)을 사용합니다.
- iptables 모드(기본 관리 모드) : 직접 클라이언트에서 트래픽을 받지 않고 iptables를 관리하는 역할만 하고 성능이 좋습니다. userspace 모드는 파드 하나로의 연결 요청이 실패하면 자동으로 다른 파드에 연결을 재시도 하지만 iptables 모드에서는 그냥 요청이 실패합니다.
- IPVS 모드 : L4 로드밸런싱 기술. 리눅스 커널 안 네트워크 관련 프레임워크인 넷필터에 포함되어 있으며, IPVS 커널 모듈이 노드에 설치되어야 합니다.
커널 공간에서 동작하고 데이터 구조를 해시 테이블로 저장하기 때문에 iptables 모드보다 빠르고 좋은 성능을 냅니다. 또한 더 많은 로드밸런싱 알고리즘이 있습니다.
- rr(round-robin) : 프로세스 사이에 우선순위를 두지 않고 순서와 시간 단위로 CPU를 할당합니다.
- lc(least connection) : 접속 개수가 가장 적은 서버를 선택합니다.
- dh(destination hashing) : 목적지 IP 주소로 해시값을 계산해 분산할 실제 서버를 선택합니다.
- sh(source hashing) : 출발지 IP 주소로 해시값을 계산해 분산할 실제 서버를 선택합니다.
- sed(shortest expected delay) : 응답 속도가 가장 빠른 서버를 선택합니다.
- nq(never queue) : sed와 비슷하지만 활성화된 접속 개수가 0인 서버를 가장 먼저 선택합니다.
'Cloud > Kubernetes' 카테고리의 다른 글
[Kubernetes] Deployment를 왜 선택해야하지? (0) | 2023.04.30 |
---|---|
Kubernetes 컨트롤러 (0) | 2023.03.19 |
Kubernetes Pod (0) | 2023.03.18 |
Kubernetes 아키텍처 (0) | 2023.03.17 |
Kubernetes로 컨테이너 실행하기 (0) | 2023.03.16 |