Search
Duplicate

Kube-Proxy

생성일
2021/05/04 20:37
태그

Kube Proxy

Kubernetes Cluster에서는 모든 포드가 다른 모든 포드에 도달할 수 있음. 이는 포드 네트워킹 클러스터를 클러스터에 배포함으로써 가능함
Kube-Proxy는 kubernetes 클러스터의 각 노드에서 실행되는 프로세스
쿠버네티스 클러스터의 모든 POD는 서로 다른 POD와 통신할 수 있다. 이것이 가능한 이유는 클러스터 내 POD 네트워크를 담당하는 기능이 배포되어 있기 때문이다.
POD 네트워크는 클러스터 내 모든 노드에 내부적인 가상 네트워크를 통해 모든 POD가 통신할 수 있도록 해준다.
a better way for the web application to access the database is using a service.
웹 애플리케이션 POD에서 DB가 실행되고 있는 POD에 접근하기 위한 가장 좋은 방법은 Service를 이용하는 것이다.
Service는 고유한 IP를 할당 받고, FQDN을 통해 접근할 수 있기 때문에 어떤 POD에서도 접근할 수 있다. Serivce는 전달 받은 요청을 자신이 담당하는 백엔드 POD(실제 목적 Pod)로 전달하는 역할을 한다.
Service는 어떻게 IP를 얻는 것이며, 같은 POD 네트워크에 조인할 수 있는 것인가? --> 이것을 가능하게 해주는 것이 Kube-Proxy
Service는 POD 네트워크에 조인하지 않는다. 왜냐하면 Service는 실제 존재하는 것이 아니기 때문이다.
POD와 같이 컨테이너로 실행되지 않으며 어떤 네트워크 인터페이스나 요청을 기다리는 프로세스가 존재하는 것이 아니다.
이것은 가상 컴포넌트 개념이며 쿠버네티스 메모리 상에 존재하는 것일뿐이다.
kube-proxy는 쿠버네티스 클러스터 내 모든 노드에서 실행되는 프로세스다.
이것의 역할은 새로운 Service를 만들고 Serivce를 찾는 역할을 수행한다.
어떤 서비스가 어떤 백엔드 POD로 전달될 수 있는지 같은 네트워크 규칙을 만든다.
이와 같은 네트워크 규칙을 만드는 한가지 방법으로는 IPTABLES을 사용하는 것이다.
모든 노드에 Service의 IP로 들어오는 트래픽에 대해 실제 POD로 보낼 수 있는 규칙을 IPTABLES에 만들어 준다.
kubeadm은 모든 노드에 kube-proxy를 배포하며 이는 DaemonSet으로서 실행된다. 따라서 모든 클러스터의 노드마다 오직 하나의 kube-proxy POD가 실행될 수 있다.

Install kube-proxy - Manual

Download the kube-proxy binary from the kubernetes release pages
$ wget <https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-proxy>
Plain Text
복사
Extract it
Run it as a service

View kube-proxy options - kubeadm

kubeadm 를 사용하는 경우 kubeadm는 kube-proxy를 kube-system 네임 스페이스의 Pod로 배포합니다. 사실은 마스터 노드에 데몬 셋으로 배포되는 것임.
$ kubectl get pods -n kube-system
Plain Text
복사
K8s Reference Docs: