Serive proxy
(이미지는 ClusterIP 기준)
- kube-proxy는 고전적 의미의 proxy가 아니라 서비스에 대한 가상 IP를 구현하기 위함
- proxy를 사용하는 이유는 인바운드 트래픽을 백엔드에 전달하기 위함.
Proxy mode
- Userspace
- Service가 생성되면 Node에 Proxy port 생성
- 클라이언트 요청 인입 시, iptables는 요청한 ClusterIP와 Port를 확인하고, Proxy Port로 트래픽 라우팅
- kube-proxy는 기본적으로 Round Robin 방식으로 백엔드 Pod 선택 + Session Affinity(AWS ELB의 Stick Session과 동일)에 따라 Pod 중 하나를 선택하여 트래픽 전달
- Pod로의 요청 실패 시 자동으로 다른 Pod로 연결 재시도
- iptables : default proxy mode. userspace와 달리 kube-proxy는 iptables만 관리하며, 직접 트래픽을 받지 않음. iptables을 거쳐 요청이 직접 포드로 전달되어 userspace보다 빠르다.
- Service 생성되면 Node에 kube-proxy에 의해 iptables 갱신
- 클라이언트 요청 인입 시, 패킷의 Target이 Service의 IP와 Port로 설정
- iptables의 rule 중 맞는 Backend가 있다면 Random하게 선택
- pod로의 요청 실패 시 재시도 없이 그냥 실패. 방지를 위해 Readiness Probe(컨테이너의 요청 준비 여부 확인) 설정 필요
- 지정된 Pod으로 패킷 전달 전, 패킷의 Target의 IP와 Port를 해당 Pod으로 수정
- IPVS : Linux 커널 제공 L4 LB인 IPVS가 Proxy 역할을 수행. iptables보다 높은 성능(low latency & high throughput)
'Docker & k8s' 카테고리의 다른 글
[K8S] 4. Cluster Networking (0) | 2022.02.03 |
---|---|
[K8S] 3. Kubernetes Network Commands (0) | 2022.02.03 |
[K8S] 2. Kubernetes Commands (0) | 2022.02.03 |
[K8S] 1. Kubernetes Core Component (0) | 2022.02.03 |
도커란? (Docker) (0) | 2020.12.17 |