관리자가 Pod 접근에 활용할 Service 생성을 요청한다.
생성된 Service의 정보와, Service를 통해 접근할 Pod의 IP주소 등 정보가 etcd에 기록된다.
Client가 Service의 도메인 주소로 요청을 전달하면, CoreDNS가 이를 확인한다.
CoreDNS는 API Server로부터 etcd의 데이터를 전달받고, 도메인 주소와 일치하는 Service의 IP주소를 응답한다.
매핑 정보가 CoreDNS에 직접적으로 저장되진 않고, API Server를 통해 etcd에 저장된 메타데이터를 불러들인 후, 도메인 주소를 적절한 IP 주소 형태로 반환한다고 한다.
Client는 전달 받은 Service의 IP주소로 직접 요청을 보낸다.
k8s cluster의 각 Node에서 실행 중인 kube-proxy 컴포넌트가 이를 감지하고, 요청을 인터셉트한다.
kube-proxy는 API Server를 통해 etcd에서 Service와 관련된 메타데이터를 전달받고, 어느 Pod로 트래픽을 전달할지 결정한다.
kube-proxy에서 선택된 Pod의 IP주소로 요청을 전달한다.
이 때의 요청은 Client가 Pod의 IP주소로 직접 보내는 게 아니라, kube-proxy에서 Pod에게 전달하는 구조로 동작한다.
Pod가 전달 받은 요청을 처리한 후, Client에게 응답을 반환한다.