-
K8S: Service Networking 정리K8S 2021. 7. 7. 17:08
각 노드의 kube-proxy는 kube-api 서버를 통해 클러스터의 변화를 감지한다.
service object 생성 요청이 들어오면 api server를 통해 kube-proxy는 이를 감지하고 행동에 들어간다.
그렇다면 서비스는 어떻게 원리로 생성되는 걸까?
우선 서비스는 클러스터 내에 존재하는 어떤 것이 아니다.
(어떠한 프로세스, 네임스페이스, 인터페이스가 있는 것이 아니다 )
즉 가상의 어떤 것이다.
예를 들어보자.
다음과 같은 포드와 서비스가 생성되어 있을 때,
이 서비스는 어떻게 서비스로 들어온 트래픽을 포드로 전달할까?
< 서비스 IP 할당하기 >
서비스가 정의 될 때 이미 정의된 range 안에서 서비스의 IP를 할당된다.
IP range는 kube-api server에 등록된 --service-cluser-ip-range에 의해 결정된다.
또는 /etc/kubernetes/manifest/kube-apiserver.yaml에서 확인할 수 있다.
< 서비스로 들어온 트래픽을 포드로 포워딩하기 >
그리고 kube-proxy에 의해 rule을 형성하는데 이때 kube-proxy는 userspace or iptables or ipvs 중에 하나를 프록시로 설정한다.
디폴트 프록시 옵션은 iptable이다.
다음 커맨드를 통해 현재 어떤 프록시를 사용하는지 알 수 있다.
또는 큐브 프록시 파드에서 로그를 확인한다.
그리고 iptable을 확인해보면 kube-proxy에 의해 생성된 룰을 확인할 수 있다.
10.103.132.104:3306(서비스)로 가는 모든 ip는 DNAT 룰에 의해 10.244.1.2:3306(포드)으로 간다는 뜻
반응형'K8S' 카테고리의 다른 글
Istioctl를 이용한 istio 설치 (0) 2021.07.11 K8S Nginx-controller를 이용한 Ingress 구성 정리 (0) 2021.07.09 K8S Pod Networking과 Weave CNI 정리 (0) 2021.07.07 K8S ArgoCD 설치 (feat. Helm3) (0) 2021.06.25 Istio Circuit breaking 정리 (0) 2021.06.25