Kafka в кластере Kubernetes с Istio - PullRequest
2 голосов
/ 09 июля 2020

У меня кластер k8s с Istio v1.6.4. Внедрение sidecar отключено по умолчанию. У меня есть кластер Kafka, работающий на этом k8s, установленном с оператором strimzi kafka. Кластер Kafka работает без проблем, когда в kafka, как и в клиентские модули, не внедрен Istio-proxy. Моя проблема: когда я создаю модуль с внедренным клиентом kafka и Istio-proxy, я не могу подключиться к кластеру Kafka. Журналы на стороне клиента:

java.io.IOException: Connection reset by peer

и на стороне сервера: org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 369295616 larger than 104857600)

После некоторого поиска в Google и проверки журналов Istio-proxy выясняется, что проблема в том, что Istio-proxy подключается к конечной точке открытого текста kafka с помощью TLS. Я могу обойти это, установив для PeerAuthentication по умолчанию mtls.mode: DISABLED, но я не хочу устанавливать для него глобальные настройки.

Что странно, если я создаю простую службу k8s и запускаю «сервер» netcat на pod под управлением kafka server и netcat "client" на pod под управлением kafka client - все работает нормально. Кластер Kafka, чем другие TCP-соединения (например, с использованием n c)?

Как отключить mtls только для одного хоста? Я играл с PeerAuthentication, но не повезло ...

1 Ответ

4 голосов
/ 15 июля 2020

С помощью jt97 я смог решить эту проблему.

Как я уже писал, я использую Strimzi Operator для установки кластера kafka на k8s. Он создает 2 сервиса:

  • kafka- bootstrap - который является обычным сервисом с ClusterIP
  • kafka-brokers - безголовый сервис.

В моем случае полные имена служб - kafka-kafka-operated-kafka-bootstrap и kafka-kafka-operated-kafka-brokers соответственно.

Я создал DestinationRule:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: kafka-no-tls
spec:
  host: "kafka-kafka-operated-kafka-brokers"
  trafficPolicy:
    tls:
      mode: DISABLE

и использовал безголовый сервис при подключении к кафке:

kafka-topics --bootstrap-server kafka-kafka-operated-kafka-brokers:9092 --list
__consumer_offsets
_schemas

, и это сработало, как ожидалось.

Кстати, установка tls.mode на SIMPLE не помогла.

Если честно, я все еще не понять, почему в данном конкретном случае Istio-proxy по умолчанию (без DestinationRule) пытается подключиться к TLS - согласно документации :

По умолчанию Istio отслеживает рабочие нагрузки сервера, перенесенные на Istio использует прокси-серверы и настраивает клиентские прокси для автоматической отправки взаимного TLS-трафика c этим рабочим нагрузкам и отправки обычного текстового трафика c рабочим нагрузкам без дополнительных модулей.

...