首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JcaPEMKeyConverter由BouncyCastle提供,这是一个可选的依赖项。若要使用对EC键的支持,必须向类路径显式添加依赖项。

JcaPEMKeyConverter由BouncyCastle提供,这是一个可选的依赖项。若要使用对EC键的支持,必须向类路径显式添加依赖项。
EN

Stack Overflow用户
提问于 2021-08-12 16:50:02
回答 2查看 1.7K关注 0票数 2

我有一个简单的Flink流媒体应用程序。它在start-cluster.sh命令创建的集群中运行良好。

现在,基于Flink教程,我希望在k3d on macOS创建的Kubernetes集群中本机以应用模式部署它。

首先,我通过k3d cluster create dev创建了一个集群。

这是我的文档

代码语言:javascript
复制
FROM flink
RUN mkdir -p $FLINK_HOME/usrlib
COPY target/streaming-0.1.jar $FLINK_HOME/usrlib/streaming-0.1.jar

我建造了它并把它推到码头中心。

我的集群名是k3d-dev,所以我运行

代码语言:javascript
复制
flink run-application \
    --target kubernetes-application \
    -Dkubernetes.cluster-id=k3d-dev \
    -Dkubernetes.container.image=hongbomiao/my-flink-xxx:latest \
    local:///opt/flink/usrlib/streaming-0.1.jar

但是,我得到了错误:

代码语言:javascript
复制
 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)

阅读后

我加了

代码语言:javascript
复制
<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文件。我又造了又推到码头中心。

当我运行上面的Flink命令时,仍然会出现相同的错误。有什么想法吗?谢谢!

更新1:

除了上面的pom.xml更改之外,我还手动下载了这3个jars,并将Dockerfile更改为

代码语言:javascript
复制
FROM flink
COPY lib/* $FLINK_HOME/lib
RUN mkdir -p $FLINK_HOME/usrlib
COPY target/streaming-0.1.jar $FLINK_HOME/usrlib/streaming-0.1.jar

又试了一次,但还是犯了同样的错误。

我可以确认3个jar文件bcpkix-jdk15on-1.69.jarbcprov-ext-jdk15on-1.69.jarbcprov-jdk15on-1.69.jar都在docker映像中:

代码语言:javascript
复制
➜ docker run -it 6c48af48db55c334003a307d1ef7a5fc5181f389613284b66b5cb97588b9708d sh

$ cd lib && ls
bcpkix-jdk15on-1.69.jar      flink-dist_2.12-1.13.2.jar     flink-table_2.12-1.13.2.jar  log4j-slf4j-impl-2.12.1.jar
bcprov-ext-jdk15on-1.69.jar  flink-json-1.13.2.jar      log4j-1.2-api-2.12.1.jar
bcprov-jdk15on-1.69.jar      flink-shaded-zookeeper-3.4.14.jar  log4j-api-2.12.1.jar
flink-csv-1.13.2.jar         flink-table-blink_2.12-1.13.2.jar  log4j-core-2.12.1.jar
$ cd ../usrlib && ls
streaming-0.1.jar

更新2:

我试图通过以下方式启动会话模式

代码语言:javascript
复制
/usr/local/Cellar/apache-flink/1.13.1/libexec/bin/kubernetes-session.sh

但还是有同样的错误。所以现在我可以确认,当我使用应用程序模式之前,这个问题与我的码头形象无关。

我的机器上有那些罐子位于~/.m2

我错过其他罐子了吗?

另外,我发现错误只发生在由k3d/k3s创建的集群中,而不是minikube。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-13 23:52:58

在检查了

  • /usr/local/Cellar/apache-flink/1.13.1/libexec/bin/kubernetes-session.sh
  • /usr/local/Cellar/apache-flink/1.13.1/libexec/libexec/kubernetes-session.sh

第一个脚本指向第二个脚本,第二个脚本

代码语言:javascript
复制
# ...
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.jarbcpkix-jdk15on-1.69.jar放在上面的文件夹中之后,可以将Flink部署到k3s (k3d)中,现在在会话模式和应用程序模式中都是这样。

摘要

下载bcprov-jdk15onbcpkix-jdk15on jar文件

然后移动到文件夹

代码语言:javascript
复制
/usr/local/Cellar/apache-flink/{version}/libexec/lib

那你就可以走了。

票数 4
EN

Stack Overflow用户

发布于 2022-07-05 15:30:12

今天,我在我的m1 mac上偶然发现了这个问题,我使用docker和k3d创建了一个k3s集群。

实际上,我按照错误消息的话来解决这个问题:在类路径中添加一个有弹性的城堡。

但是,您需要将bc添加到插件的类路径中,如下所示:

代码语言:javascript
复制
...
      <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 10/wsl2 2+ k3d)上也有这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68761409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档