kube-proxy는 클러스터의 각 노드에서 실행되는 네트워크 프록시로 쿠버네티스 서비스 개념의 일부를 구현한다.
kube-proxy는 노드에서 네트워크 규칙을 유지한다. 이러한 네트워크 규칙은 클러스터 내부 또는 외부의 네트워크 세션에서 파드로의 네트워크 통신을 허용한다.
운영체제 패킷 필터링 계층이 사용 가능한 경우 kube-proxy는 이를 사용하지만, 그렇지 않으면 kube-proxy가 트래픽 자체를 전달한다.
IPVS - IP Virtual Server
kube-proxy가 네트워크를 관리하는 방법은 userspace, iptables, ipvs 3가지가 있다.
초기에는 userspace가 기본 모드였고 현재는 iptables가 기본 모드이다. 그리고 iptables에서 ipvs 모드로 넘어가려고 한다.
userspace 모드
클러이언트에서 서비스IP를 통해서 요청을 보내면, iptables를 거쳐서 kube-proxy가 요청을 받은 다음에 서비스IP가 연결돼야 하는 적절한 파드로 연결해준다. 이때 요청을 파드들에게 나눠주는 방식은 라운드로빈이다.
iptables 모드
userspace모드와 다른 점은 kube-proxy는 iptables를 관리하는 역할만 하고 직접 클라이언트로부터 트래픽을 받지 않는다는 것이다.
클라이언트로 오는 모든 요청을 iptables를 거쳐서 직접 파드로 전달된다. 그래서 userspace모드보다 빠른 성능을 가지게 된다.
usespace모드에서는 파드 하나로의 요청이 실패하면 자동으로 다른 파드로 연결해 재시도하지만 iptables모드에서는 파드 하나로 가는 요청이 실패하면 재시도를 하지 않고 그냥 요청이 실패한다.
그래서 이런 것을 방지하기 위해 readiness probe 설정이 잘 되어있어야 한다.
ipvs 모드
ipvs는 커널스페이스에서 작동하고 데이터 구조를 해시테이블로 저장해서 가지고 있기 때문에 iptables보다 빠르고 좋은 성능을 낸다.
ipvs는 더 많은 로드밸런싱 알고리즘을 가지고 있다.
<ipvs 동작 원리>
- 패킷을 효과적으로 추적하고 Route하기 위해 IPVS는 Linux Kernel에 IPVS 테이블을 생성함 (해쉬테이블)
- IPVS 테이블을 ipvsadm 명령을 사용하여 지속적으로 업데이트함
- 테이블 목록에 따라 특정 엔드포인트로 설정된 로드밸런싱 알고리즘을 사용하여 로드밸런싱을 수행함
'클라우드 > Kubernetes(쿠버네티스)' 카테고리의 다른 글
[kubernetes] kubernetes의 update 종류와 동작 방법 (apply, edit, patch, replace) (0) | 2023.08.18 |
---|---|
[kubernetes] pod lifecycle (0) | 2023.08.10 |
[kubernetes] Kubernetes Networking Model (0) | 2023.08.03 |
[kubernetes] mac m1 kubernetes 구축 (2) | 2022.07.31 |
kanico 란 (0) | 2022.05.29 |