
- cluster : 여러 개의 하드웨어가 하나의 서비스처럼 동작하게 만들어주는 기능
클러스터 외부 | 클러스터 내부 |
클라이언트 <--------------------------------------------------- | --> 웹서비스 <--> 웹 파드 <--> DB 서비스 <--> DB 파드 |
- 일반적인 웹의 구조.
- client는 웹 서비스의 고정 IP 및 고정 port를 통해 접근할 수 있다.
- 웹 파드는 DB 서비스의 고정 IP 및 고정 port를 통해 접근할 수 있다.
▶ 그렇다면 웹 파드의 애플리케이션은 DB 파드에 접근하기 위해 DB 서비스의 IP 및 포트를 알아야 할까?
- 쿠버네티스 클러스터의 서비스는 pod에서 직접 탐색하고 접근할 수 있다.
- 환경변수를 이용한 탐색 방법.
- DNS를 이용한 탐색 방법.
1. 환경변수를 이용한 서비스 탐색
- 쿠버네티스 클러스터는 pod가 시작될 때, 존재하는 서비스를 pod 내의 쉘 환경변수로 설정한다.
- 현재 실행중인 pod에 kubectl exec 명령을 이용하여 환경변수를 확인해보자.

- 환경 변수 중 많은 부분이 kubernetes service 및 myapp service의 IP, port에 관한 변수와 값으로 구성되어있다.
▶ 애플리케이션은 서비스 이름만 알고 있다면 적절한 환경 변수를 참조해 접근하고자 하는 서비스의 IP와 port를 확인할 수 있다!
2. DNS를 이용한 서비스 탐색
- 쿠버네티스 클러스터 시스템 내부에서 사용할 수 있는 DNS(CoreDNS) 서버가 동작하고 있다.
- kube-system namespace에 DNS 관련 pod 및 controller 서비스가 존재한다.
1) DNS 관련 리소스 확인.
- kube-system namespace에 DNS 관련 pod 확인.

2) pod 내부 DNS 설정 확인.

▶ DNS 서버는 169.254.25.10으로 설정되어있다. 이는 coredns 서비스의 IP인 10.233.0.3과 어떤 연관이 있을까?
3) NodeLocal DNSCache
- 전에는 pod 내의 DNS 서버 설정도 coredns 서비스의 IP가 부여되어있었다. 하지만 이는 대규모 환경에서 병목현상을 만들어 성능이 저하된다는 단점이 있었다.
- 쿠버네티스 1.15 버전부터는 NodeLocal DNSCache 기능이 도입되었다.
- NodeLocal DNSCache 기능은 쿠버네티스의 각 노드에 DNS 캐시 기능을 가지고 있는 pod를 데몬 셋으로 배치하고, pod의 DNS 쿼리 및 응답을 coredns가 대신하게 되는 구조이다.
- pod <-----> NodeLocal DNSCache (169.254.25.10) <-----> iptables <-----> coredns (10.233.0.3)

- kube-system namespace에 nodelocaldns 데몬셋 컨트롤러가 존재한다.
- 현재 구성은 마스터 1대, 노드 3대로 총 4대의 구성이기 때문에 4개의 pod가 배포된다.
- nodelocaldns 관련 pod 목록 확인

- nodelocaldns pod의 argument 설정.

- 각 노드에서 169.254.25.10 IP인 링크로컬 주소 대역을 사용해 DNS cache 서비스를 제공한다는 의미.
4) FQDN을 이용한 서비스 탐색
- nettool pod를 이용, 서비스의 FQDN을 이용하여 접근해보자.

- myapp-svc 서비스에 접근하기 위한 FQDN 주소는 myapp-svc.default.svc.cluster.local이다.
- myapp-svc : 서비스 이름
- default : 서비스 리소스의 namespace 이름
- svc : 서비스
- cluster.local : 쿠버네티스 클러스터 도메인
- FQDN의 주소 형식
< 리소스(서비스) 이름 >.< namespace >.< 리소스 종류 >.< 클러스터 도메인 >
myapp-svc.default.svc.cluster.local
5) 컨트롤러 및 서비스 리소스 삭제
- 지금까지 생성했던 리소스 확인.

- 모든 리소스 삭제.

※ service/kubernetes 서비스는 삭제되더라도 다시 생성된다.
'Containers > Kubernetes' 카테고리의 다른 글
클러스터 외부 서비스 - LoadBalancer (0) | 2020.08.23 |
---|---|
클러스터 외부 서비스 - NodePort (0) | 2020.08.22 |
5.1. Cluster 내부 서비스 (0) | 2020.08.03 |
4.4. DaemonSet (0) | 2020.07.29 |
4.3. ReplicaSet (0) | 2020.07.28 |
댓글