У меня есть образ NIFI, работающий в openshift, и postgres в облаке, "принадлежащем" другому отделу.
Они отправили нам сертификат (". Crt") и ключ (".key"), так как вход в систему осуществляется через клиентский сертификат, а не имя пользователя и пароль. Мне удалось войти в pgAdmin 4, но не подключить NIFI к Postgres с сертификатом и ключом.
Я загрузил сертификат и ключ к образу (используя секретный и монтирующий его), поэтому, если я go к терминалу pod, я могу получить к нему доступ.
Но, когда я перехожу к сервису DBCPConnectionPoll, строка подключения ниже и активирует процессор Execute SQL, я получаю исключение, что сертификат недействителен, как указано ниже:
ERROR
ExecuteSQL[id=...] Unable to execute SQL query <...>;
due to java.sql.SQLException: Cannot create a PoolableConnectionFactory (FATAL: connection requires a valid client certificate).
No FlowFile to route to failure: org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: Cannot create a PoolableConnectionFactory (FATAL: connection requires a valid client certificate)
Я пытался передать сертификат двумя способами в службу DBCPConnectionPoll:
1) в качестве параметров в строке подключения (свойство «URL-адрес подключения к базе данных»:
jdbc:postgresql://<ip>:<port>/<username>?user=<username>&sslTrue&sslcert=/etc/.../mycerts/mycert.der&sslkey=/etc/.../mycerts/mykey.key.pk8
2) добавление свойств в службу (кнопка +, просто имя параметра и путь в качестве значения) и просто передача его в виде url:
jdbc:postgresql://<ip>:<port>/<username>
Похоже, что все работает в общем, так как я могу подключиться к другому postgres, который у меня есть, который не требует ssl-сертификации.
Некоторые соображения:
1) Мое предположение здесь заключается в том, что строка подключения в NIFI не знает, как правильно прочитать путь к файлу для сертификата и ключа.
2) У меня есть несколько раз конвертировал сертификаты в разные типы, которые java может получить, чтобы увидеть, была ли это проблема, но я все еще получаю то же исключение. Таким образом, кажется, что пул соединений просто не «достигает» файлов вообще. Тем не менее, если кто-то имеет право голоса в этой теме c, это может быть удобно после решения основной проблемы. Так что оцените некоторые советы и здесь.
3) Я также прочитал исходный код NIFI, и кажется, что NIFI обычно использует классы JDB C для создания пула соединений, поэтому строка подключения, которую я передал, будет работал в java коде, но почему-то не работает в NIFI (который написан в java).
4) Драйвер jdb c и все остальное настроено правильно, так как я могу работать с небезопасным postgres в NIFI.
Большое спасибо.