공부흔적/쿠버네티스
Service에서 Pod를 어떻게 찾아서 접근하는지?
주디 𝙹𝚞𝚍𝚢
2022. 4. 27. 22:30
쿠버네티스에서 Pod는 애초에 쓰고 버리고 새롭게 시작할 수 있게 설계되어 있다. Pod의 IP주소는 기동시 부여되고, 종료시 회수되기 때문에 Pod가 죽고 다시 살아날 때 IP주소가 변경된다. 그렇기 때문에 Pod의 IP주소로 Pod에 접근할 수 없다. 그래서 Pod에 접근하려면 Service를 사용해야 한다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
clusterip-nginx ClusterIP 10.104.201.2 <none> 80/TCP 5m34s app=nginx-app
위와 같은 서비스가 있다고 해보자. ClusterIP로 된 Service이다. 이 서비스는 app=nginx-app인(key-value 구조) Pod들에 접근할 수 있는 서비스이다.
그럼 Pod들을 살펴보자. 명령어는 아래와 같다.
k get pods -o wide --show-labels
NAME READY ... IP NODE ... LABELS
mygo-7d8fd56ff5-2h4df 1/1 ... 10.40.0.2 node3 ... app=mygo,pod-template-hash=7d8fd56ff5
mygo-7d8fd56ff5-8h2m9 1/1 ... 10.46.0.2 node1 ... app=mygo,pod-template-hash=7d8fd56ff5
mygo-7d8fd56ff5-9h8pw 1/1 ... 10.46.0.9 node1 ... app=mygo,pod-template-hash=7d8fd56ff5
mygo-7d8fd56ff5-n2hlc 1/1 ... 10.46.0.7 node1 ... app=mygo,pod-template-hash=7d8fd56ff5
mygo-7d8fd56ff5-p7x6r 1/1 ... 10.32.0.3 node2 ... app=mygo,pod-template-hash=7d8fd56ff5
nginx-deploy-6b4fc78cbf-85wmk 1/1 ... 10.46.0.3 node1 ... app=nginx-app,pod-template-hash=6b4fc78cbf
nginx-deploy-6b4fc78cbf-f62l8 1/1 ... 10.46.0.5 node1 ... app=nginx-app,pod-template-hash=6b4fc78cbf
nginx-deploy-6b4fc78cbf-hg4h6 0/1 ... <none> node3 ... app=nginx-app,pod-template-hash=6b4fc78cbf
nginx-deploy-6b4fc78cbf-lmpzh 0/1 ... <none> node2 ... app=nginx-app,pod-template-hash=6b4fc78cbf
nginx-deploy-6b4fc78cbf-rddnj 1/1 ... 10.46.0.4 node1 ... app=nginx-app,pod-template-hash=6b4fc78cbf
이중 LABELS에 app=nginx-app인 Pod들이 clusterip-nginx서비스와 연결된다. 더 자세히 살펴보려면 이 서비스의 상세 내용을 살펴보자. 명령어는 아래와 같다.
kubectl describe svc clusterip-nginx
그러면 아래와 같은 결과가 나온다.
Name: clusterip-nginx
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=nginx-app
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.104.201.2
IPs: 10.104.201.2
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.46.0.3:80,10.46.0.4:80,10.46.0.5:80
Session Affinity: None
Events: <none>
그러면 Endpoints: 항목에 있는 IP가 LABELS가 app=nginx-app인 Pod들의 IP라는 것을 알 수 있다. Service는 이렇게 Pod를 찾아서 접근한다.
300x250