Как сделать так, чтобы кафка-брокер работал внутри контейнера снаружи хоста докера? - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь выдать брокеру кафки, который работает внутри контейнера, запущенного kubernetes. Я играю с KAFKA_ADVERTISED_LISTENERES и KAFKA_LISTERNERS.

Я попытался установить эти две переменные env KAFKA_ADVERTISED_LISTENERES = PLAINTEXT://<host-ip>:9092 и KAFKA_LISTERNERS = PLAINTEXT://0.0.0.0:9092 и запустил, используя docker-compose. И я смог создать приложение из хост-машины.

Но, установив эти две env-переменные в файле Kubernetes.yml, я получаю No broker list available исключение.

Что мне здесь не хватает?

Обновление:

Кафка-pod.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  namespace: casb-deployment
  name: kafkaservice
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: kafkaservice
    spec:
      hostname: kafkaservice
      #hostNetwork: true  # to access docker out side of host container
      containers:
      - name: kafkaservice
        imagePullPolicy: IfNotPresent
        image: wurstmeister/kafka:1.1.0
        env:  # for production 
         - name: KAFKA_ADVERTISED_LISTENERES
           value: "PLAINTEXT://<host-ip>:9092"
         - name: KAFKA_LISTERNERS
           value: "PLAINTEXT://0.0.0.0:9092"
         - name: KAFKA_CREATE_TOPICS
           value: "Topic1:1:1,Topic2:1:1"
         - name: KAFKA_MESSAGE_TIMESTAMP_TYPE
           value: "LogAppendTime"
         - name: KAFKA_LOG_MESSAGE_TIMESTAMP_TYPE
           value: "LogAppendTime"   
         - name: KAFKA_ZOOKEEPER_CONNECT
           value: "zookeeper:2181"
        ports: 
        - name: port9092
          containerPort: 9092

---

apiVersion: v1
kind: Service
metadata:
  namespace: casb-deployment
  name: kafkaservice 
  labels:
    app: kafkaservice
spec:
  selector:
    app: kafkaservice
  ports:
  - name: port9092
    port: 9092
    targetPort: 9092
    protocol: TCP

1 Ответ

0 голосов
/ 02 июля 2018

Я предполагаю, что у вас есть сервис Kubernetes, чей селектор связывает входной поток с вашим брокером Kafka, который выставляет nodePort (в отличие от clusterIP). https://kubernetes.io/docs/concepts/services-networking/service/

Таким образом, стручок kubernetes должен быть доступен через localhost:<nodePort>.

Вы также можете установить балансировщик нагрузки перед вашим кластером Kubernetes, тогда вы можете просто выставить модули k8s, то есть разрешить внешний вход.

Затем следующим шагом будет использование некоторой записи DNS, чтобы исходящий запрос, генерируемый вашими контейнерами на основе docker, отправлялся в DNS и затем возвращался в ваш кластер Kubernetes через балансировщик нагрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...