Как передать IP конечных точек сервиса kubernetes в прослушиваемого слушателя KAFKA - PullRequest
0 голосов
/ 29 апреля 2018

Я бы хотел настроить брокера Kafka в Kubernetes. Я использую образ докера confluentinc/cp-kafka:latest. Требуется переменная окружения KAFKA_ADVERTISED_LISTENERS, которая позволяет клиенту Kafka взаимодействовать с брокером.

Проблема заключается в трудности назначения IP конечных точек службы для KAFKA_ADVERTISED_LISTENERS. Если я использую localhost в качестве этого значения, оно работает только в локальном модуле брокера Kafka, но не будет работать для некоторых клиентских модулей Kafka в кластере kubernetes для связи с ним. Если я использую IP-адрес конечной точки службы, полученный из kubectl get endpoints -l app=kafka, это работает, но это немного затратно - использовать какой-либо сценарий аудита, чтобы каждый раз устанавливать это динамическое значение.

Интересно, есть ли лучший способ, которым я могу динамически установить это значение в yaml-файле Kubernetes, поэтому мне не нужно каждый раз устанавливать этот IP-адрес программно.

Вот файл yaml:

---
apiVersion: v1
kind: Service
metadata:
  name: kafka-broker
  labels:
    app: kafka
spec:
  type: NodePort
  ports:
  - port: 9092
    targetPort: 9092
  selector:
    app: kafka

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-broker
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka
  template:
    metadata:
      labels:
        app: kafka
    spec:
      hostname: broker
      containers:
      - name: kafka
        image: confluentinc/cp-kafka:latest
        ports:
        - containerPort: 9092
        env:
        - name: KAFKA_ADVERTISED_LISTENERS
          value: "PLAINTEXT://DYNAMIC_ENDPOINT_IP:9092"
        - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
          value: "1"
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zoo1:2181

Заранее спасибо.

Редактировать: Я пытался использовать имя сервера, переменную среды хоста службы, IP-адрес источника службы и IP-адрес модуля. К сожалению, я все еще получаю ошибку в журнале kafka: java.lang.IllegalArgumentException: Error creating broker listeners from 'PLAINTEXT://$KAFKA_BROKER_SERVICE_HOST:9092': Unable to parse PLAINTEXT://$KAFKA_BROKER_SERVICE_HOST:9092 to a broker endpoint

Если я использую kubectl exec -it kafa-broker-ssfjks env, эти переменные окружения фактически установлены правильно в этом модуле. Я думаю, это может быть связано с проблемой конфигурации брокера Kafka?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Используйте имя сервиса (кафка-брокер) вместо его IP. Kube-dns разрешит это для вас. Если клиент kafka был размещен в том же пространстве имен, вы должны использовать просто «kafka-broker», если нет, вы должны использовать квалифицированное имя «kafka-broker.YOURNAMESPACE.svc"

0 голосов
/ 29 апреля 2018

Вы должны разрешить своим клиентам подключаться через службу, так что показ IP или DNS службы должен работать. По умолчанию службы представлены как имена переменных в модуле. Если подключен плагин dns, можно использовать dns. Дополнительная информация: https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables

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