Проблемы с подключением к MSK через SSL с помощью Kafka-Connect - PullRequest
0 голосов
/ 13 марта 2020

У меня возникают проблемы с использованием конечных точек AWS MSK TLS в образе Confluent Kafka-Connect, поскольку время ожидания при создании / чтении по темам истекло. Работает совершенно нормально, когда я передаю конечные точки PlainText.

Я попытался сослаться на путь к хранилищу jks, доступный для этого образа docker, все еще не работает, не совсем уверенный, что я пропускаю какие-либо другие конфигурации. Из того, что я прочитал из AWS документов, брокеры Amazon MSK используют публичные c AWS сертификаты диспетчера сертификатов, поэтому любое доверенное хранилище, которое доверяет Amazon Trust Services, также доверяет сертификатам брокеров Amazon MSK.

**Error:**
org.apache.kafka.connect.errors.ConnectException: Timed out while checking for or creating topic(s) '_confluent-command'. This could indicate a connectivity issue, unavailable topic partitions, or if this is your first use of the topic it may have taken too long to create.

Присоединение конфигурации kafka-connect, которую я использую, помогло бы:)

INFO org. apache .kafka.clients.admin.AdminClientConfig - значения AdminClientConfig:

bootstrap.servers = [**.us-east-1.amazonaws.com:9094,*.us-east-1.amazonaws.com:9094]
client.dns.lookup = default
client.id =
connections.max.idle.ms = 300000
metadata.max.age.ms = 300000
metric.reporters = []
metrics.num.samples = 2
metrics.recording.level = INFO
metrics.sample.window.ms = 30000
receive.buffer.bytes = 65536
reconnect.backoff.max.ms = 1000
reconnect.backoff.ms = 50
request.timeout.ms = 120000
retries = 5
retry.backoff.ms = 100
sasl.client.callback.handler.class = null
sasl.jaas.config = null
sasl.kerberos.kinit.cmd = /usr/bin/kinit
sasl.kerberos.min.time.before.relogin = 60000
sasl.kerberos.service.name = null
sasl.kerberos.ticket.renew.jitter = 0.05
sasl.kerberos.ticket.renew.window.factor = 0.8
sasl.login.callback.handler.class = null
sasl.login.class = null
sasl.login.refresh.buffer.seconds = 300
sasl.login.refresh.min.period.seconds = 60
sasl.login.refresh.window.factor = 0.8
sasl.login.refresh.window.jitter = 0.05
sasl.mechanism = GSSAPI
security.protocol = SSL
security.providers = null
send.buffer.bytes = 131072
ssl.cipher.suites = null
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
ssl.endpoint.identification.algorithm = https
ssl.key.password = null
ssl.keymanager.algorithm = SunX509
ssl.keystore.location = null
ssl.keystore.password = null
ssl.keystore.type = JKS
ssl.protocol = TLS
ssl.provider = null
ssl.secure.random.implementation = null
ssl.trustmanager.algorithm = PKIX
ssl.truststore.location = JKSStorePath
ssl.truststore.password = ***
ssl.truststore.type = JKS

1 Ответ

0 голосов
/ 17 марта 2020

Я использовал java cacerts в docker образе в / usr / lib / jvm / zulu-8-amd64 / jre / lib / security / cacerts в качестве хранилища доверенных сертификатов. С помощью keytool, если вы посмотрите на сертификаты:

keytool --list -v -keystore /usr/lib/jvm/zulu-8-amd64/jre/lib/security/cacerts|grep Amazon

В нем будут перечислены CA Amazon.

Затем я запустил контейнер, используя:

docker run -d \
  --name=kafka-connect-avro-ssl \
  --net=host \
  -e CONNECT_BOOTSTRAP_SERVERS=<msk_broker1>:9094,<msk_broker2>:9094,<msk_broker3>:9094 \
  -e CONNECT_REST_PORT=28083 \
  -e CONNECT_GROUP_ID="quickstart-avro" \
  -e CONNECT_CONFIG_STORAGE_TOPIC="avro-config" \
  -e CONNECT_OFFSET_STORAGE_TOPIC="avro-offsets" \
  -e CONNECT_STATUS_STORAGE_TOPIC="avro-status" \
  -e CONNECT_KEY_CONVERTER="io.confluent.connect.avro.AvroConverter" \
  -e CONNECT_VALUE_CONVERTER="io.confluent.connect.avro.AvroConverter" \
  -e CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL="<hostname of EC2 instance>:8081" \
  -e CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL="http://<hostname of EC2 instance>:8081" \
  -e CONNECT_INTERNAL_KEY_CONVERTER="org.apache.kafka.connect.json.JsonConverter" \
  -e CONNECT_INTERNAL_VALUE_CONVERTER="org.apache.kafka.connect.json.JsonConverter" \
  -e CONNECT_REST_ADVERTISED_HOST_NAME="<hostname of EC2 instance>" \
  -e CONNECT_LOG4J_ROOT_LOGLEVEL=DEBUG \
  -e CONNECT_SECURITY_PROTOCOL=SSL \
  -e CONNECT_SSL_TRUSTSTORE_LOCATION=/usr/lib/jvm/zulu-8-amd64/jre/lib/security/cacerts \
  -e CONNECT_SSL_TRUSTSTORE_PASSWORD=changeit \
  confluentinc/cp-kafka-connect:latest

С это началось успешно. Я также смог подключиться к контейнеру, создавать темы, производить и потреблять из контейнера. Если вы не можете создавать темы, это может быть проблема с сетевым подключением, возможно, проблема группы безопасности для группы безопасности, подключенной к кластеру MSK, блокировка портов 2181 и TLS-порт 9094.

...