#kubernetes #apache-kafka
#kubernetes #apache-kafka
Вопрос:
Предположим, что у меня настроен кластер Kafka с 3 узлами. Тогда как мне предоставить его вне облака с помощью службы балансировки нагрузки? Я прочитал справочный материал, но у меня есть несколько сомнений.
Скажем, например, ниже приведен сервис для брокера
apiVersion: v1
kind: Service metadata:
name: kafka-0
annotations: dns.alpha.kubernetes.io/external: kafka-0.kafka.my.company.com
spec:
externalTrafficPolicy: Local
type: LoadBalancer
ports:
- port: 9092
name: outside
targetPort: 9092
selector: app: kafka kafka-pod-id: "0"
- Что такое port и targetPort?
- Должен ли я настраивать службу LoadBalancer для каждого из брокеров?
- Сопоставляются ли эти несколько брокеров с одним общедоступным IP-адресом cloud LB?
- Как служба за пределами k8s / cloud получает доступ к отдельному брокеру? С помощью
public-ip:port
? или с помощьюkafka-<pod-id>.kafka.my.company.com:port
?. Также какой порт здесь используется?port
илиtargetPort
? - Как мне указать эту конфигурацию в
Advertised.listeners
свойстве Kafka broker? Поскольку порт может отличаться для служб внутри кластера k8s и за его пределами.
Пожалуйста, помогите.
Ответ №1:
Основываясь на предоставленной вами информации, я постараюсь дать вам несколько ответов, в конечном итоге дать несколько советов.
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 /