На основании предоставленной вами информации я постараюсь дать вам несколько ответов, в конечном итоге дать совет.
1) port:
- это номер порта, который делает службу видимой для других служб, работающих в том же кластере K8s. Другими словами, если служба хочет вызвать другую службу, запущенную в том же кластере Kubernetes, она сможет сделать это, используя порт, указанный для port
в файле спецификации службы.
targetPort:
- это порт на POD
, где работает служба. Ваше приложение должно прослушивать сетевые запросы на этом порту, чтобы служба работала.
2/3) Каждый брокер должен быть выставлен как LoadBalancer
и должен быть настроен как автономный сервис для внутренней связи. Для внешнего подключения должен быть один дополнительный LoadBalancer
с внешним ip.
Пример услуги
apiVersion: v1
kind: Service
metadata:
name: kafka-0
annotations: dns.alpha.kubernetes.io/external: kafka-0.kafka.my.company.com
spec:
ports:
- port: 9092
name: kafka-port
protocol: TCP
selector:
pod-name: kafka-0
type: LoadBalancer
4) Вы должны использовать kafka-<pod-id>.kafka.my.company.com:port
5) Должен быть установлен внешний адрес, чтобы клиенты могли к нему подключаться. Эта статья может помочь в понимании.
Аналогичный случай был на Github, он также может вам помочь - https://github.com/kow3ns/kubernetes-kafka/issues/3
Кроме того, вы также можете подумать о Ingress - https://tothepoint.group/blog/accessing-kafka-on-google-kubernetes-engine-from-the-outside-world/