전공공부
[K8S - CKA] Service Networking 본문
1. Service Network 동작 원리
Service는 어떻게 내부 사용자 끼리 소통이 가능한 ClusterIP를 가지고 NodePort 등을 통해서 외부와 통신을 할 수 있게 할까요?
kube-apiserver가 kubelet을 통해서 각 노드에 접근을 확인 하고 kube-proxy가 만일 pod 등이 추가가 되면 kube-proxy가 이를 알아차리고 알려줍니다.
그러면, 실제로 서비스가 존재하는 객체인가요? 아닙니다. kube-proxy가 포워딩 룰을 가지고 서비스의 각 pod로 가야한다고 알려줍니다. kube-proxy가 IP : PORT - Forward TO를 가지고 이를 서비스라는 개체가 작동 하는 것 처럼 보여준다는 것이죠.
2. Service Network 부 동작
자 그러면 여기서 의문이 생깁니다. 만일, Pod의 IP와 Service의 IP가 겹치게 되면 어떻게 될까요?
우선은 K8S에서 설계 할 때 이런 것을 모두 고려하였기 때문에 겹치지 않지만 이를 내부적으로 살펴보면 이렇습니다.
서비스 생성 시 생기는 IP는 kube-apiserver의 service-cluster-ip-range 옵션에서 지정된 범위 내에서만 결정 됩니다. (default : 10.0.0.0/24)
자 아래와 같이 kube-apiserver의 ip 대역을 확인 해봅시다.
$ kube-api-server --service-cluster-ip-range ipNet
#또는 위 설정으로도 볼 수 있습니다.
$ ps aux | grep kube-api-server
kube-apiserver --authorization-mode=Node,RBAC --service-cluster-ip-range=10.96.0.0/12
그러면 해당 대역에서는 서비스만 사용 할 수 있다는 것을 보장 받겠죠. 그러면 해당 대역폭 이외는 Pod가 할당되어서 사용하면 됩니다.
즉, 이런 방식으로 Service Networking 이 이루어집니다.

보이시나요 Service를 할당하기 위해서 ip tables에 지정된 ip:port 대역 사이의 서비스를 할당 받고 target이 되는 port를 Forward To로 할당된 곳으로 지정이 됩니다.
3. 명령어 공유
1. Cluster 내부의 각 Node의 network range를 보는 방법
입력
$ ip addr | grep eth0
출력
10665: eth0@if10666: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
inet 192.30.174.6/24 brd 192.30.174.255 scope global eth0
2. POD의 IP 주소가 할당 되는 range는 어디일까요?
우선 kube-system에 weave pod가 존재하는데 이를 검색해서 봅니다.
입력
$ kubectl logs <weave-pod-name> weave -n kube-system
출력하면 로그 중 ipalloc-range: 부분을 살펴 보면 됩니다.
출력문 중 일부
INFO: 2024/02/14 14:29:03.535829 Command line options: map[conn-limit:200 datapath:datapath db-prefix:/weavedb/weave-net docker-api: expect-npc:true http-addr:127.0.0.1:6784
ipalloc-init:consensus=0 ipalloc-range:10.244.0.0/16 metrics-addr:0.0.0.0:6782 name:56:0e:5f:aa:47:0d nickname:controlplane no-dns:true no-masq-local:true port:6783]
[잡담]
요즘 백앤드 서비스에 집중하고 싶어서 DevOps 영역의 공부를 조금 게을리 한 편이 있는 것 같습니다. 매일 돌아가면서 한 편씩 포스팅을 하거나 git에 올리거나 또는, 개인 공부 repository를 적극 활용하여 공부하거나 매일매일 돌아가면서 공부가 필요 할 듯 싶습니다. 특히나, 요즘과 같이 MSA 구조를 사용하기 위해서는 K8S이 필수적이니 놓을 수 없는 요소인 듯 합니다.
'Study > K8S' 카테고리의 다른 글
[K8S - CKA] Ingress (0) | 2024.02.20 |
---|---|
[K8S - CKA] DNS in K8S (0) | 2024.02.15 |
[K8S] SidecarContainer가 존재하는 Pod의 HPA 적용기 (1) | 2024.01.27 |
[K8S - CKA] Networking (0) | 2024.01.22 |
[K8S - CKA] Volumes & Persistent Volumes (Claims) (0) | 2024.01.21 |