일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- es
- minikube
- Kafka Connect
- Elk
- http
- loadbalance
- eck
- Message
- Produce
- 쿠버네티스
- Kubernetes
- offset
- Consumer
- elastic
- partition
- k8s
- Producer
- kibana
- Golang
- ElasticSearch
- topic
- command
- Kafka
- tls disable
- Helm
- kafka-connect
- kafka broker
- consumer group
- create topic
- broker
- Today
- Total
개발자의 개발괴발
[kubernetes] headless service란? 본문
kafka나 posgresql같은 서비스는 1개보단 3개 이상으로 HA로 구성하는 경우가 많다.
k8s에 위와 같은 서비스를 HA로 구성해서 배포해보면 보통 service에 headless service라는 것이 생긴다.
나는 현재 minikube에 kafka를 배포해놓은 상태이다. 아래와 같이 세개의 pod이 떠있다.
$ k get pod
NAME READY STATUS RESTARTS AGE
bitnami-kafka-controller-0 2/2 Running 0 2d
bitnami-kafka-controller-1 2/2 Running 0 2d
bitnami-kafka-controller-2 2/2 Running 0 2d
더불어 서비스는 아래와 같이 떠있다.
$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
bitnami-kafka ClusterIP 10.97.113.130 <none> 9092/TCP,9095/TCP 5d2h
bitnami-kafka-controller-0-external NodePort 10.97.230.14 192.168.49.2 9094:30000/TCP 3d10h
bitnami-kafka-controller-1-external NodePort 10.108.50.136 192.168.49.2 9094:30001/TCP 3d10h
bitnami-kafka-controller-2-external NodePort 10.104.214.47 192.168.49.2 9094:30002/TCP 3d10h
bitnami-kafka-controller-headless ClusterIP None <none> 9094/TCP,9092/TCP,9093/TCP 5d2h
이제까지는 bitnami-kafka와 bitnami-kafka-controller-headless의 차이점을 모르고 그냥 사용했다. 뭘 쓰든 문제가 없었기에...
그러나 중요한 차이점이 있었다.
nslookup으로 ip를 확인해보자. 먼저 bitnami-kafkf를 확인해보면 아래와 같다.
$ nslookup bitnami-kafka
;; Got recursion not available from 10.96.0.10
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: bitnami-kafka.default.svc.cluster.local
Address: 10.97.113.130
;; Got recursion not available from 10.96.0.10
당연한 얘기지만 cluster-ip가 나온다. 서비스는 실체가 있는 것은 아니지만 저 ip에 요청을 주면 bitnami-kafka-controller-?(?는 0, 1, 2 중 하나)로 연결해준다.
이번엔 bitnami-kafka-controller-headless을 확인해보자.
$ nslookup bitnami-kafka-controller-headless
;; Got recursion not available from 10.96.0.10
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: bitnami-kafka-controller-headless.default.svc.cluster.local
Address: 10.244.0.130
Name: bitnami-kafka-controller-headless.default.svc.cluster.local
Address: 10.244.0.131
Name: bitnami-kafka-controller-headless.default.svc.cluster.local
Address: 10.244.0.129
;; Got recursion not available from 10.96.0.10
저 service로 접속할 수 있는 pod의 ip를 모두 받을 수 있다.
이뿐만이 아니다. headless는 ping도 된다.
$ ping bitnami-kafka.default.svc.cluster.local
PING bitnami-kafka.default.svc.cluster.local (10.97.113.130) 56(84) bytes of data.
^C
--- bitnami-kafka.default.svc.cluster.local ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 9242ms
그냥 서비스는 ping 응답이 오지 않지만
$ ping bitnami-kafka-controller-headless.default.svc.cluster.local
PING bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.131) 56(84) bytes of data.
64 bytes from 10-244-0-131.bitnami-kafka.default.svc.cluster.local (10.244.0.131): icmp_seq=1 ttl=64 time=0.090 ms
64 bytes from 10-244-0-131.bitnami-kafka.default.svc.cluster.local (10.244.0.131): icmp_seq=2 ttl=64 time=0.082 ms
64 bytes from 10-244-0-131.bitnami-kafka.default.svc.cluster.local (10.244.0.131): icmp_seq=3 ttl=64 time=0.102 ms
64 bytes from 10-244-0-131.bitnami-kafka.default.svc.cluster.local (10.244.0.131): icmp_seq=4 ttl=64 time=0.026 ms
64 bytes from 10-244-0-131.bitnami-kafka.default.svc.cluster.local (10.244.0.131): icmp_seq=5 ttl=64 time=0.108 ms
64 bytes from 10-244-0-131.bitnami-kafka.default.svc.cluster.local (10.244.0.131): icmp_seq=6 ttl=64 time=0.029 ms
^C
--- bitnami-kafka-controller-headless.default.svc.cluster.local ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5102ms
rtt min/avg/max/mdev = 0.026/0.072/0.108/0.033 ms
headless service는 ping 응답이 온다.
그 뿐만이 아니다. 특정 pod에 접속을 하고 싶으면 headless service hostname 앞에 pod 이름을 붙여주면 된다.
root@ubuntu-deployment-644976c4bb-97d44:/# ping bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local
PING bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.131) 56(84) bytes of data.
64 bytes from bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.131): icmp_seq=1 ttl=64 time=0.135 ms
64 bytes from bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.131): icmp_seq=2 ttl=64 time=0.123 ms
64 bytes from bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.131): icmp_seq=3 ttl=64 time=0.090 ms
64 bytes from bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.131): icmp_seq=4 ttl=64 time=0.175 ms
64 bytes from bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.131): icmp_seq=5 ttl=64 time=0.121 ms
^C
--- bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4107ms
rtt min/avg/max/mdev = 0.090/0.128/0.175/0.027 ms
root@ubuntu-deployment-644976c4bb-97d44:/# ping bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local
PING bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.130) 56(84) bytes of data.
64 bytes from bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.130): icmp_seq=1 ttl=64 time=0.354 ms
64 bytes from bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.130): icmp_seq=2 ttl=64 time=0.124 ms
64 bytes from bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.130): icmp_seq=3 ttl=64 time=0.161 ms
64 bytes from bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.130): icmp_seq=4 ttl=64 time=0.117 ms
64 bytes from bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.130): icmp_seq=5 ttl=64 time=0.149 ms
^C
--- bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4055ms
rtt min/avg/max/mdev = 0.117/0.181/0.354/0.087 ms
root@ubuntu-deployment-644976c4bb-97d44:/# ping bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local
PING bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.129) 56(84) bytes of data.
64 bytes from bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.129): icmp_seq=1 ttl=64 time=1.43 ms
64 bytes from bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.129): icmp_seq=2 ttl=64 time=0.071 ms
64 bytes from bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.129): icmp_seq=3 ttl=64 time=0.050 ms
64 bytes from bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.129): icmp_seq=4 ttl=64 time=0.103 ms
64 bytes from bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local (10.244.0.129): icmp_seq=5 ttl=64 time=0.065 ms
^C
--- bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4069ms
rtt min/avg/max/mdev = 0.050/0.343/1.427/0.542 ms
예전엔 이걸 몰라서 특정 pod에 접속하기 위해 replica 수를 가져오고 pod 이름에 순서대로 0, 1, 2 붙여가면서 요청을 했었는데 그럴 필요가 없었다.
정확히 뭔진 모르겠지만 coredns에도 로그가 남아있다.
[INFO] 10.244.0.132:32785 - 62206 "AAAA IN bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local. udp 104 false 512" NOERROR qr,aa,rd 197 0.001501042s
[INFO] 10.244.0.132:32785 - 19193 "A IN bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local. udp 104 false 512" NOERROR qr,aa,rd 206 0.001911791s
[INFO] 10.244.0.132:51043 - 31427 "PTR IN 131.0.244.10.in-addr.arpa. udp 43 false 512" NOERROR qr,aa,rd 372 0.000206708s
[INFO] 10.244.0.132:33259 - 50488 "AAAA IN bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local. udp 104 false 512" NOERROR qr,aa,rd 197 0.000334792s
[INFO] 10.244.0.132:33259 - 10533 "A IN bitnami-kafka-controller-1.bitnami-kafka-controller-headless.default.svc.cluster.local. udp 104 false 512" NOERROR qr,aa,rd 206 0.000432541s
[INFO] 10.244.0.132:53759 - 59498 "PTR IN 130.0.244.10.in-addr.arpa. udp 43 false 512" NOERROR qr,aa,rd 372 0.000300958s
[INFO] 10.244.0.132:59233 - 32565 "AAAA IN bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local. udp 104 false 512" NOERROR qr,aa,rd 197 0.000451417s
[INFO] 10.244.0.132:59233 - 31295 "A IN bitnami-kafka-controller-2.bitnami-kafka-controller-headless.default.svc.cluster.local. udp 104 false 512" NOERROR qr,aa,rd 206 0.000632334s
[INFO] 10.244.0.132:54716 - 49197 "PTR IN 129.0.244.10.in-addr.arpa. udp 43 false 512" NOERROR qr,aa,rd 372 0.000272042s
참고 : 아주 많은 도움이 되어 감사하다.
'개발 > kubernetes' 카테고리의 다른 글
kafka connect 배포하기 (0) | 2025.03.19 |
---|---|
[postgresql] minikube에 postgersql 배포하기 (0) | 2025.03.16 |
[kubernetes] loadbalancer type service 사용하기 (0) | 2025.03.03 |
[kubernetes] port forwarding (0) | 2025.03.01 |
[Kubernetes] Mac에서 k8s 연습하기(feat. minikube) (0) | 2025.02.26 |