kafka 포트포워딩으로 client 접속 안 될 때 해결법

안태우·2023년 1월 24일
0

로컬에 떠 있지 않은 kafka(AWS의 kafka나 회사의 kubernetes 위에 떠 있는 kafka 등)에 접속해야 할 일이 가끔 있다. 여느 ssh 서버 접속하듯이 단순히 그 경로를 포트포워딩하여 로컬 주소와 매핑하여 연결하려고 하면 안 되는 경우가 있다. 가령, 다음과 같은 사례를 살펴볼 수 있다.

  1. kubernetes 위에 kafka가 떠 있고, 그 주소는 사설 IP로는 10.0.0.2나 kubernetes DNS 상으로는 kafka.myserver.svc.cluster.local 등이 될 수 있다. (참고: https://kubernetes.io/ko/docs/concepts/services-networking/dns-pod-service/)
  2. lens나 kubectl을 사용하여 그 kafka 서버를 localhost:9092로 포트포워딩하고 연결을 시도한다.

내가 찾아본 것이 맞다면 kafka client 접속 시에는 다음과 같이 동작한다. (참고: https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/)

  1. kafka 서버(bootstrap)에 client가 연결 요청을 한다.
  2. kafka 서버에서 연결 가능한 주소를 넘겨준다.(kubernetes 위에서는 kubernetes DNS에 등록되어 있는 주소를 넘겨주는 것을 확인했다)
  3. client는 서버가 전달해준 주소로 연결을 한다.

이때 kubernetes DNS는 kubernetes 위에서만 돌아가지, 내 로컬에서는 돌아갈 리가 없다. 따라서 단순히 포트포워딩만 하면 연결이 되지 않는다. 아래와 같이 /etc/hosts에 DNS 주소를 강제로 넣어서 해결하자.

127.0.0.1 kafka.myserver.svc.cluster.local

참고: https://github.com/bitnami/charts/issues/1021

+ kafka-ui 짱 좋음(https://github.com/provectus/kafka-ui)

profile
Rust 삽질러 / 동시성 프로그래밍을 주로 공부합니다.

0개의 댓글