簡體   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