Я не могу получить доступ к брокерам Kafka извне (с публичного IP-адреса).
Я использую https://github.com/Yolean/kubernetes-kafka
У него очень хорошее руководство, но я полагаю, что их встроенный метод публичного представления портов не работает, поскольку я запускаю этот кластер в частном порядке в частном / публичном VPC на AWS.
Я полагаю, что их встроенный метод внешнего доступа просто выставляет порты хоста по адресу частной подсети (это правильно?)
Я знаю, что могу настроить балансировщик нагрузки для каждого брокера и присвоить домен каждому балансировщику нагрузки. Но тогда я несу дополнительные расходы на балансировщики нагрузки.
Я просматривал входящие ресурсы, успешно настроил контроллер nginx, который будет взаимодействовать с различными службами на основе пути URL-адреса к домену хоста.
Однако при использовании nginx я получил бы временно недоступную службу 503 с указателем на URL-адрес (при успешном использовании URL-адреса эхосервера). Поэтому я быстро понял, что запросы http здесь не имеют смысла. В любом случае, не брокерам?
Сейчас я застрял в изучении nginx и успешном способе проксирования запросов.
Какой конкретный протокол прокси я должен использовать?
Это также может быть неверный конфиг server.properties.
При использовании nginx входящий ресурс подключался бы к внешним службам - $ {BROKER_ID} (я изменил первый на сервис clusterIP, остальные остались как NodePort). Для меня это внешнее сопоставление DNS с внутренними IP-адресами. Так что я думаю, что настройки прослушивателей по умолчанию на сервере Kafka.properties подходят для этого? Иначе должен ли слушатель стать доменом с псевдонимом балансировщика нагрузки? Я пробовал домен с указанным URL-адресом в качестве рекламируемого прослушивателя, но для меня это не имело никакого смысла, и в результате возникли аварийные циклы!
Для тех, кто хочет взглянуть на конфиги, в настоящее время я использую версию по умолчанию (вроде, 5 pzoos, никаких ezoos [они всегда зависли в ожидании]) версии:
https://github.com/Yolean/kubernetes-kafka
Это можно очень быстро настроить в существующем кластере (для AWS):
git clone https://github.com/Yolean/kubernetes-kafka
cd kubernetes-kafka
(AWS) rm configure/!(aws*)
kubectl apply -f configure
kubectl apply -f 00-namespace*
kubectl apply -f rbac*
kubectl apply -f zookeeper
kubectl apply -f kafka
kubectl config set-context $(kubectl config current-context) --namespace=kafka
Я использую эту версию nginx
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/aws/service-l4.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/aws/patch-configmap-l4.yaml
Эхосервер пришел из:
https://github.com/kubernetes/kops/tree/master/addons/ingress-nginx
Используемые конкретные строки:
kubectl run echoheaders --image=k8s.gcr.io/echoserver:1.4 --replicas=1 --port=8080
kubectl expose deployment echoheaders --port=80 --target-port=8080 --name=echoheaders-x
kubectl expose deployment echoheaders --port=80 --target-port=8080 --name=echoheaders-y
Вот мой входной ресурс для nginx:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: echomap
# annotations:
# nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: brokers.my-domain.com
http:
paths:
- path: /broker0
backend:
serviceName: outside-0
servicePort: 31100
- path: /broker1
backend:
serviceName: outside-1
servicePort: 31101
- path: /broker2
backend:
serviceName: outside-2
servicePort: 31102
- path: /bar
backend:
serviceName: echoheaders-y
servicePort: 80
- path: /foo
backend:
serviceName: echoheaders-x
servicePort: 80
EDIT:
Я сосредоточился на получении внешнего доступа через балансировщики нагрузки, и в некоторой степени это удалось. Проблемы можно найти здесь https://serverfault.com/questions/949367/can-connect-to-kafka-but-cannot-consume
Вы уверены, что nginx не будет работать как вход? Я не могу понять, как http-запрос становится TCP-запросом.
Теперь перейдем к внутренним приложениям Kafka Streams. Вернемся к этому, когда станет необходимо создать отдельный кластер для потоков kafka.