Serive proxy

proxy and service

(이미지는 ClusterIP 기준)

  • kube-proxy는 고전적 의미의 proxy가 아니라 서비스에 대한 가상 IP를 구현하기 위함
  • proxy를 사용하는 이유는 인바운드 트래픽을 백엔드에 전달하기 위함.

Proxy mode

  1. Userspace
    • Service가 생성되면 Node에 Proxy port 생성
    • 클라이언트 요청 인입 시, iptables는 요청한 ClusterIP와 Port를 확인하고, Proxy Port로 트래픽 라우팅
    • kube-proxy는 기본적으로 Round Robin 방식으로 백엔드 Pod 선택 + Session Affinity(AWS ELB의 Stick Session과 동일)에 따라 Pod 중 하나를 선택하여 트래픽 전달
      • Pod로의 요청 실패 시 자동으로 다른 Pod로 연결 재시도
      Userspace
  2. 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으로 수정
    iptables
  3. IPVS : Linux 커널 제공 L4 LB인 IPVS가 Proxy 역할을 수행. iptables보다 높은 성능(low latency & high throughput)IPVS

'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

+ Recent posts