JcaPEMKeyConverter предоставляется BouncyCastle, необязательной зависимостью. Чтобы использовать поддержку ключей EC, вы должны явно добавить зависимость к пути к классам.
У меня есть простое приложение для потоковой передачи Flink. Он хорошо работает в кластере, созданном
start-cluster.sh
команда.
Теперь, основываясь на учебнике Flink , я надеюсь развернуть его в режиме приложения изначально в кластере Kubernetes, созданном k3d на macOS.
Вот мой Dockerfile :
FROM flink
RUN mkdir -p ${FLINK_HOME}/usrlib
COPY ["my-app/target/my-flink-app-xxx.jar", "${FLINK_HOME}/usrlib/my-flink-app-xxx.jar"]
Я построил и отправил его в Docker Hub.
Имя моего кластера
k3d-dev
, поэтому я побежал
flink run-application \
--target kubernetes-application \
-Dkubernetes.cluster-id=k3d-dev \
-Dkubernetes.container.image=hongbomiao/my-flink-app-xxx:latest \
local:///opt/flink/usrlib/my-flink-app-xxx.jar
Однако я получил ошибку:
The program finished with the following exception:
io.fabric8.kubernetes.client.KubernetesClientException: JcaPEMKeyConverter is provided by BouncyCastle, an optional dependency. To use support for EC Keys you must explicitly add this dependency to classpath.
at io.fabric8.kubernetes.client.internal.CertUtils.handleECKey(CertUtils.java:161)
at io.fabric8.kubernetes.client.internal.CertUtils.loadKey(CertUtils.java:131)
at io.fabric8.kubernetes.client.internal.CertUtils.createKeyStore(CertUtils.java:111)
at io.fabric8.kubernetes.client.internal.CertUtils.createKeyStore(CertUtils.java:243)
at io.fabric8.kubernetes.client.internal.SSLUtils.keyManagers(SSLUtils.java:128)
at io.fabric8.kubernetes.client.internal.SSLUtils.keyManagers(SSLUtils.java:122)
at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:82)
at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:62)
at io.fabric8.kubernetes.client.BaseClient.<init>(BaseClient.java:51)
at io.fabric8.kubernetes.client.DefaultKubernetesClient.<init>(DefaultKubernetesClient.java:105)
at org.apache.flink.kubernetes.kubeclient.FlinkKubeClientFactory.fromConfiguration(FlinkKubeClientFactory.java:102)
at org.apache.flink.kubernetes.KubernetesClusterClientFactory.createClusterDescriptor(KubernetesClusterClientFactory.java:61)
at org.apache.flink.kubernetes.KubernetesClusterClientFactory.createClusterDescriptor(KubernetesClusterClientFactory.java:39)
at org.apache.flink.client.deployment.application.cli.ApplicationClusterDeployer.run(ApplicationClusterDeployer.java:63)
at org.apache.flink.client.cli.CliFrontend.runApplication(CliFrontend.java:213)
at org.apache.flink.client.cli.CliFrontend.parseAndRun(CliFrontend.java:1057)
at org.apache.flink.client.cli.CliFrontend.lambda$main$10(CliFrontend.java:1132)
at org.apache.flink.runtime.security.contexts.NoOpSecurityContext.runSecured(NoOpSecurityContext.java:28)
at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1132)
После чтения
- https://www.mail-archive.com/search?l=dev@spark.apache.org&amp; q = subject: "Следует + нам + добавить + встроенную + поддержку + для + надувного + замка +EC+w\%2FKube"&amp; o = новейшие &amp; f = 1
- https://github.com/de-jcup/ekube/issues/63#issuecomment-753508790
я добавил
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.69</version>
</dependency>
в мой файл pom.xml . Я построил и снова запустил Docker Hub.
Когда я запустил приведенную выше команду Flink, у меня все еще была такая же ошибка. Есть идеи? Спасибо!
ОБНОВИТЬ:
Помимо указанного выше изменения pom.xml , я попытался вручную загрузить эти 3 баночки и изменил свой Dockerfile на
FROM flink
RUN mkdir -p ${FLINK_HOME}/usrlib
COPY ["streaming/target/streaming-0.1.jar", "${FLINK_HOME}/usrlib/streaming-0.1.jar"]
COPY ["streaming/bcpkix-jdk15on-1.69.jar", "${FLINK_HOME}/usrlib/bcpkix-jdk15on-1.69.jar"]
COPY ["streaming/bcprov-jdk15on-1.69.jar", "${FLINK_HOME}/usrlib/bcprov-jdk15on-1.69.jar"]
COPY ["streaming/bcprov-ext-jdk15on-1.69.jar", "${FLINK_HOME}/usrlib/bcprov-ext-jdk15on-1.69.jar"]
и попытался снова, но все та же ошибка.
2 ответа
После проверки кода файла kubernetes-session.sh Флинка :
# ...
CC_CLASSPATH=`manglePathList $(constructFlinkClassPath):$INTERNAL_HADOOP_CLASSPATHS`
# ...
"$JAVA_RUN" $JVM_ARGS -classpath "$CC_CLASSPATH" $log_setting org.apache.flink.kubernetes.cli.KubernetesSessionCli "$@"
я добавил
echo $CC_CLASSPATH
и распечатал путь к классам.
В моем случае это на
/usr/local/Cellar/apache-flink/1.13.1/libexec/lib
.
После того, как я положил
bcprov-jdk15on-1.69.jar
и
bcpkix-jdk15on-1.69.jar
в папке выше Flink теперь можно развернуть на k3s через k3d как в режиме сеанса, так и в режиме приложения.
Сегодня я наткнулся на эту проблему на своем m1 mac, используя docker и k3d для создания кластера k3s.
Я решил это, фактически сделав то, что говорится в сообщении об ошибке: добавив надувной замок в путь к классу.
Но вам нужно добавить bc в путь к классу плагина вpom.xml
, вот так:
...
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
<!-- add bouncy castle to class path, so that elliptic curve keys work -->
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.69</version>
</dependency>
</dependencies>
</plugin>
...
Я не знаю, мне кажется, что k3d всегда генерирует ключи EC, так как у меня была точно такая же проблема на совершенно другой машине (win10/wsl2 + k3d).