216. IP Address Management - Weave
브릿지 네트워크가 ip를 어떻게 할당하는지?
CNI 규칙에 파드는 ip 를 무조건 할당되어야한다.
명령어에 ip를 할당하는 내용이 들어있다.
쿠버네티스는 ip를 어떻게 할당하는지 관심 없다. 그저 ip 가 겹치지 않으면 된다.
ip를 파일로 관리한다.
당연히 수동으로 하는 대신 cni 플러그인을 사용하면 된다.
이건 로컬 플러그인 방식이다.
cat /etc/cni/net.d/net-script.conf
파일에 어느 ipam 플러그인을 사용할지 정의한다.
weaveworks 인 경우
수 많은 ip를 할당해서 이용할 수 있다. 공평하게 세개씩 분배한다?
217. Practice Test - Networking Weave
1. How many Nodes are part of this cluster?
Including master and worker nodes
2개
2. What is the Networking Solution used by this cluster?
weave
3. How many weave agents/peers are deployed in this cluster?
2개
4. On which nodes are the weave peers present?
k ged pod -o wide 옵션으로 node 여부도 확인가능
a모든 노드마다 하나.
5. Identify the name of the bridge network/interface created by weave on each node.
weave
6. What is the POD IP address range configured by weave?
ipalloc 부분
7. What is the default gateway configured on the PODs scheduled on node01?
What is the default gateway configured on the PODs scheduled on node01
weave 는 10.244.0.0/16
219. Service Networking
노드와 여러 파드들이 있다고 가정
주황 파드에서 파랑 파드 접속 가능하도록 서비스를 생성했다.
orange-service 10.99.13.178
파랑 파드는 서비스 이름이나 ip를 이용해서 주황 파드에 접속할 수 있다.
서비스를 생성하면 클러스터에 걸쳐서 생성된다.
클러스터 내에서만 사용 가능하다.
Cluster IP
클러스터 안에서만 사용할 수 있는 서비스가 cluster ip 이다.
NodePort
보라 파드에서 서비스를 만들자. 클러스터 ip 처럼 모든 클러스터에 걸쳐 생성되면 사용 가능하다.
대신 외부 포트에서 접근 가능하다.
외부 유저는 어플리케이션에 접속 가능하다.
서비스 원리를 이해하기 위해 처음부터 시작해보자
모든 노드는 kubelet 을 갖는다. (파드 생성과 연관 )
kubelet은 kubeapiserver 와 통신하며
그리고 파드를 생성한다.
그리고 cni 플러그인을 통해 네트워크 환경 구성을 한다.
kubelet 과 같이 kube-proxy 도 노드마다 존재한다.
kubeapiserver 와 통신하면서 변경 사항을 체크한다.
서비스가 생성되는 경우
파드와 다르게 서비스는 모든 노드에 생성되지 않는다.
서비스는 클러스터 와이드 컨셉이다.
모든 노드에 걸쳐서 존재한다.
실제로 서비스는 존재하지 않는다.
서버도, 서비스도 없다.
서비스는 ip나 인터페이스 할당이 없다. 네임스페이스도 없다.
가상의 객체이다.
그럼 어떻게 ip를 얻고 서비스에 접근할 수 있는 걸까?
서비스를 생성하면 쿠버네티스에서 미리 정해 놓은 ip 범위에서 할당 받는다.
kube-proxy가 선점된 ip를 받은 후 포워딩 규칙을 생성한다.
서비스 ip 10.99.13.178 로 갈려면 파드 ip 10.244.1.2 로 향한다.
실제로는 ip와 포트 조합으로 한다.
서비스가 생성되면 kube-proxy 가 해당 규칙을 추가한다.
이런 규칙은 어떻게 생성될까?
kube-proxy는 여러 옵션이 있다.
pod 가 있고 서비스를 확인 10.244.1.2
10.103.132.104
서비스 ip 범위는 미리 정해져있다.
ps aux | grep kube-api-server 로 확인
10.96.0.0/12
ip 범위는 겹치면 안된다. 파드 범위는 10.244.0.0/16 이므로 10.244.255.255 까지
서비스용 ip 범위는 10.96.0.0~10.111.255.255 다행히 안 겹친다.
iptables -L -t nat 명령어로 규칙 확인 가능
db-service 의 iptables를 보면 10.103.132.104:3306 으로 들어오는 트래픽을 10.244.1.2:3306 으로 보낸다.
kube-proxy-log 로 확인 가능
220. Practice Test - Service Networking
1. What network range are the nodes in the cluster part of?
k get nodes -0 wide 로 internal ip 확인 192.4.125.9
ip link 로 확인 192.4.125.9 인터페이스 eth0 확인
192.4.125.0/24
2. what is the range of IP addresses configured for PODs on this cluster?
모든 파드 확인 후
weave-net 로그를 이용해서 찾자
ipalloc-range: 10.244.0.0/16
3. what is the IP Range configured for the services within the cluster
kube-api-server에 나와있다.
servicecluster ip range 10.96.0.0/12
4. How many kube-proxy pods are deployed in this cluster
2개
5. What type of proxy is the kube-proxy configured to use?
k logs -n kube-system kube-proxy-59qn5 로그에 유형이 있다.
iptables
6. How does this kubernets cluster ensure that a kube-proxy pod runs on all nodes in the cluster ?
inspect the kube-proxy pods and try to identify how they are deployed.
데몬셋이 돌고 있다.
using daemonset