티스토리 뷰

 쿠버네티스에서 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함