ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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(포드)으로 간다는 뜻 

     

    반응형

    댓글

Designed by Tistory.