繁体   English   中英

Java 客户端 - 通过 SSL 访问 Kubernetes 集群和 MQ 集群

[英]Java Client - Accessing Kubernetes cluster and MQ cluster over SSL

Hava 是一个 Java 客户端应用程序,它可以使用io.kubernetes.client.ApiClient通过 SSL 连接到 Kubernetes 集群。 同一个 Java 客户端应用程序也可以自己通过 SSL 连接到 MQ 集群。 然而,同一个应用程序不能同时连接到通过 SSL 的 Kubernetes 集群和通过 SSL 的 MQ 集群。

我相信这可能是因为在任何时候都只能在 JVM 上配置一个 SSL 密钥/信任库? 但不知道解决这个问题的最佳方法是什么。

允许 Java 客户端通过 SSL 连接到 Kubernetes 集群和 MQ 集群的最简单方法是什么?

这篇文章中显示的两个配置导致当两者一起运行时抛出以下错误:

WARN  io.kubernetes.client.util.credentials.ClientCertificateAuthentication - Could not create key manager for Client Certificate authentication.
java.security.UnrecoverableKeyException: Cannot recover key

客户端应用的 Kubernetes 部分通过如下配置连接到 Kubernetes 集群:

String kubeConfigPath = "~/.kube/config";
apiClient = ClientBuilder.kubeconfig(
                    KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build();
apiClient.getHttpClient().setReadTimeout(0, TimeUnit.SECONDS);
            Configuration.setDefaultApiClient(apiClient);

客户端应用的MQ部分通过如下配置连接到MQ集群:

System.setProperty("javax.net.ssl.trustStore", "C:\\tmp\\ssl\\dev\\mgr_mq.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
System.setProperty("javax.net.ssl.keyStore", "C:\\tmp\\ssl\\dev\\mgr_mq.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");

java.net.URL ccdt = new URL("file:./config/qmgrs/mgr/AMQCLCHL.TAB");
MQQueueManager mqQueueManager = new MQQueueManager("*mgr", ccdt);

Kubernetes java 客户端 API 代码似乎强制将.kube/config引用的证书添加到新的信任库中,每次添加证书之前都会创建新的信任库。

这似乎发生在ClientCertifiacteAuthentication.java类的provide(ApiClient client)方法中:

final KeyManager[] keyManagers = SSLUtils.keyManagers(certificate, key, algo, "", null, null);

其中keyStoreFilekeyStorePassphrase这两个null值会强制在其中创建一个新的信任库。

所以现在为了证明一个解决方案是可能的,我已经将这个类重写为:

final KeyManager[] keyManagers = SSLUtils.keyManagers(certificate, key, algo, "password", "C:\\tmp\\ssl\\dev\\mgr_mq.jks", "password");

使用此覆盖代码,Kubernetes 集群和 MQ 集群都可以在同一个 JVM 中通过 SSL 成功连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM