위의 그림과 같이 service-1
에 있는 Pod
가 service-2
에 접근하기 위해서는 어떻게 해야될까요.
service-2
의 ip (10.2.0.0)
를 통해서 접근하면 가능합니다. 하지만 service-2
의 ip
는 고정적인 값이 아니고 아래의 그림과 같이 매번 service
의 ip
를 확인하는 것도 매우 번거롭습니다.
이를 해소하기 위해서 k8s
에서는 내부 service
에 접근하기 위한 DNS
를 제공하고 있습니다. 따라서 service-1
가 service-2
의 ip
를 알고 있지 않더라도 service-2
의 서비스 명칭만 알고 있으면 IP
대신 서비스명
을 도메인
으로 사용해 service-2
와 통신할 수 있습니다.
결론부터 말하자면 , 만약 namespace
가 default
이고 서비스명이 service-2
이라면 service-2
의 도메인명
은 demo-2.default.svc
이 됩니다.
이에 관해 간단히 실습방법을 공유하려 합니다. 자세한 DNS 원리는 아래의 블로그에 자세히 나와있습니다.
우선 IP
를 통해 HTTP 통신
을 해보고 그 다음 도메인
을 통해 접근을 해본다.
테스트에 사용할 리소스를 생성한다.
# deployment 리소스 생성 (demo-1, demo-2)
$ kubectl create deployment demo-1 --image=httpd:alpine --port=80
$ kubectl create deployment demo-2 --image=httpd:alpine --port=80
# service 리소스 생성 (demo-1, demo-2)
$ kubectl expose deployment demo-1
$ kubectl expose deployment demo-2
ip
를 통해 demo-1
에서 demo-2
에 접속해본다.
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
demo-2 ClusterIP 10.108.166.211 <none> 80/TCP 6m9s
...
# demo-1 에 해당하는 pod 명 획득하기
$ kubectl get pod | grep demo-1
# 결과
demo-1-6fb965977d-kszkg
# demo-1 에 해당하는 pod 에 접속
# kubectl exec --stdin --tty <demo-pod 이름> -- sh
$ kubectl exec --stdin --tty demo-1-6fb965977d-kszkg -- sh
demo-1
터미널에서 demo-2
의 Cluster IP
을 통해 http 요청을 하고 성공적으로 값을 얻어오는 것을 확인한다.
# demo-1 터미널에 접속되어 있는 상태.
# wget <demo-2 의 Cluster IP>
$ wget 10.108.166.211
# 정상적으로 얻어옴을 확인할 수 있다.
Connecting to 10.108.166.211 (10.108.166.211:80)
saving to 'index.html'
index.html 100% |************************************************************************************| 45 0:00:00 ETA
'index.html' saved
demo-1
터미널에서 demo-2
의 도메인
을 통해 http 요청을 하고 성공적으로 값을 얻어오는 것을 확인한다.
# demo-1 터미널에 접속되어 있는 상태.
# wget <{접속하고자 하는 서비스명}.{namespace}.svc>
# namespace 확인 방법: 'kubectl get service -A'
$ wget demo-2.default.svc
# 결과 (정상적으로 얻어옴을 확인할 수 있다)
Connecting to demo-2 (10.108.166.211:80)
saving to 'index.html'
index.html 100% |************************************************************************************| 45 0:00:00 ETA
'index.html' saved
이로써 도메인을 통한 접속은 확인할 수 있었습니다. 이어서 쿠버네틱스 DNS
에 대해서 간단히 확인해보겠습니다.
여기 블로그에 자세히 나와있습니다.
쿠버네티스 서비스(Service) Deep Dive - (3) Cluster DNS
참고자료: