일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- elastic
- k8s
- kibana
- 쿠버네티스
- eck
- Kafka
- Helm
- Producer
- http
- tls disable
- minikube
- offset
- Consumer
- consumer group
- Message
- broker
- Golang
- Kubernetes
- partition
- kafka-connect
- Kafka Connect
- Produce
- loadbalance
- es
- Elk
- command
- topic
- create topic
- kafka broker
- ElasticSearch
- Today
- Total
개발자의 개발괴발
[T.S] local에서 k8s의 broker에 접속이 안될때 본문
※ 되는줄 알고 포스팅을 했는데 안되는 동작들이 발견되었다. topic create를 할때에도 몇번은 되는데 간혹가다 실패하는 경우도 있고 message producing을 할땐 아예 동작하지 않았다.
알아가는 과정 중의 일부라 생각하고 이 글은 지우지 않고 놔둘 것이며 잘 되는(?) 2번 글을 참고 바란다.
local에서 kafka client로 k8s 안에서 동작하는 broker에 접근을 하려고 하는데 아래와 같이 에러가 난다.
%3|1740825925.737|FAIL|rdkafka#producer-1| [thrd:bitnami-kafka-controller-0.bitnami-kafka-controller-headless.de]: bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local:9092/0: Failed to resolve 'bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local:9092': nodename nor servname provided, or not known (after 5000ms in state CONNECT)
아래처럼 kafka service에 port forwarding해놓은 상태인데 접속이 안된다.
접속을 시도할때마다 Handling connection for 9092가 뜨는걸 봐서는 9092로 접속해서 뭔가 하려는거 같긴 하다.
$ k port-forward services/bitnami-kafka-controller-headless 9092:9092
Forwarding from 127.0.0.1:9092 -> 9092
Forwarding from [::1]:9092 -> 9092
Handling connection for 9092
Handling connection for 9092
9092로 포트포워딩이 안되어있으면 아래와 같이 뜬다.
%3|1740826395.108|FAIL|rdkafka#producer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv6#[::1]:9092 failed: Connection refused (after 0ms in state CONNECT, 1 identical error(s) suppressed)
그래서 포트포워딩은 해야하는게 맞는것 같은데...
그러다 아래 링크해둔 글을 보면서 kafka client가 어떤 broker에 접근만 되면 되는 것이 아니란걸 알았다.
어떤 broker에 접근을 하면 그 브로커로부터 metadata를 받는데 이 metadata 안에는 다른 broker들의 주소, topic 정보 등 다양한 정보를 포함하고 있는 것을 알았다.
내 생각엔 처음에 브로커를 접속해서 metadata를 받고 그 metadata에서 내가 접속에 필요한 broker를 찾고 그 broker에 다시 접속을 시도하는 것으로 보인다. 내가 접속을 시도해야하는 broker의 주소가 bitnami-kafka-controller-0.bitnami-kafka-controller-headless.default.svc.cluster.local:9092인 것을 metadat를 통해 알게 되었는데 내 pc에선 저 주소의 ip가 무엇인지 알 수 없어서 접속할 수 없는 것으로 보인다.
자세한 설명은 나중에 하기로 하고 접속할 수 있는 방법을 설명해보겠다.
kafka 설정을 다시 해보자.
helm show values bitnami/kafka > values.yaml
위 명령어를 실행하면 values.yaml 파일을 하나 볼 수 있는데 여기에서 값을 설정해서 다시 apply하면 kafka를 설정할 수 있다.
이 파일에서 아래 값들을 아래와 같이 바꾼다.
두군데만 바꾸면 된다. broker 관련된 부분은 안바꿔도 되고 controller 부분만 바꾸면 된다.
externalAccess:
## @param externalAccess.enabled Enable Kubernetes external cluster access to Kafka brokers
##
enabled: true ## false에서 true로 변경
...
externalAccess.controller.service
loadBalancerNames: ["localhost", "localhost", "localhost"] ## []에서 왼쪽과 같이 변경
변경하고 아래와 같지 적용하자.
helm upgrade bitnami-kafka bitnami/kafka -f values.yaml
이제 metallb에 대한 설정을 해야한다.(minikube에서 metallb 설정)
위와 같이 설정하면 k8s 외부에서 k8s 내부에 있는 broker에 접근할 수 있다.
참고: 위 문제를 해결하고 이해하는데(완전히 이해하진 못했지만) 많은 도움이 되었다. 감사하다.
- https://tsuyoshiushio.medium.com/configuring-kafka-on-kubernetes-makes-available-from-an-external-client-with-helm-96e9308ee9f4
- https://taaewoo.tistory.com/59
'개발 > kafka' 카테고리의 다른 글
[T.S] local에서 k8s의 broker에 접속이 안될때 2 (0) | 2025.03.03 |
---|---|
[kafka] topic 만들기(with go) (0) | 2025.03.03 |
[T.S] kafka shell 명령어 안됨(Timed out waiting for a node assignment) (0) | 2025.03.01 |
[kafka] kafka consumer group 명령어 (0) | 2025.03.01 |
[kafka] topic 관련 명령어 모음 (0) | 2025.03.01 |