如何使用 Openshift 机密通过 SSL 建立 MQ 客户端连接
How to use Openshift secrets to establish MQ client connection over SSL
我正在尝试结合有关如何将 SSL 与 openshift 结合使用的建议:
https://blog.openshift.com/openshift-demo-part-13-using-ssl/
关于如何将 ssl 与 mq 一起使用的那些:
所以我设法修改了我的 Spring Boot Camel 应用程序,以从通过不带 SSL 的 svrconn mq 通道的连接转移到使用 SSL 的连接,
通过将 SSLCipherSuite 属性 添加到 com.ibm.mq.jms.MQConnectionFactory bean,并将这些 VM 参数添加到 运行 配置
(如第二个链接文档中所述):
-Djavax.net.ssl.trustStore=C:\path-to-keystore\key.jks
-Djavax.net.ssl.trustStorePassword=topsecret
-Djavax.net.ssl.keyStore=C:\path-to-keystore\key.jks
-Djavax.net.ssl.keyStorePassword=topsecret
-Dcom.ibm.mq.cfg.useIBMCipherMappings=false
它在嵌入式 Tomcat 服务器上本地运行良好,但是,我需要将它部署到 Openshift,所以我的第一个冲动是
将相同的 VM 参数添加到我用于 Openshift 部署的参数,即这些参数:
-Dkubernetes.master=
-Dkubernetes.namespace=
-Dkubernetes.auth.basic.username=
-Dkubernetes.auth.basic.password=
-Dkubernetes.trust.certificates=
-Dfabric8.mode=openshift
但这显然不起作用,例如因为我没有相同的密钥库路径。所以我调查了一下,
并了解到我必须使用秘密,可以通过 CLI >>oc secrets new<< 命令或通过 Openshift 控制台定义,
但我不明白如何进行。
我是否必须向图像添加参数,或向部署配置添加环境变量或其他?
它必须以某种方式引用定义的秘密,并且必须通过更改名称中带有下划线的每个点来命名它?
因此,例如,如果我发出:
oc secrets new my-key-jks key.jks
然后我必须 >>从 Config Map 或 Secret 添加值<<
JAVAX_NET_SSL_TRUSTSTORE 我的钥匙-jks key.jks
并增值:
COM_IBM_MQ_CFG_USEIBMCIPHERMAPPINGS假??
我试过了,但这不起作用,我向 deploymentconfigs 添加了值,所以我得到了这样的摘录:
"spec": {
"containers": [
{
"env": [
{
"name": "KUBERNETES_NAMESPACE",
"valueFrom": {
"fieldRef": {
"apiVersion": "v1",
"fieldPath": "metadata.namespace"
}
}
},
{
"name": "JAVAX_NET_SSL_TRUSTSTORE",
"valueFrom": {
"secretKeyRef": {
"key": "key.jks",
"name": "my-key-jks"
}
}
},
当我这样做时:
oc get dc app_name -o json
我还创建了 sa (serviceaccount) 并将他指定为项目管理员,并指定他使用新创建的密钥,我通过 Openshift 控制台完成,所以我现在没有 oc CLI 代码.
这也有点相关(但对我帮助不大):
https://github.com/openshift/openshift-docs/issues/699
构建后,pod 的状态变为 >> 崩溃循环回退<<,并且 >> 日志不再可用或无法加载。<< 没有 SSL,相同的应用程序在 Openshift 上运行良好。
恕我直言,您误解了此处指定的某些设置。
1.
您在此处指定的“-Dkubernetes.master=”之后的 VM 参数我假设是要提供给您用于部署的 fabric8 maven 插件。正确的?
此处关于 authentication/certificates 的参数仅用于与 kubernetes 的通信,而不是用于将密钥库数据提供给您的应用程序使用。所以我认为它们是无关的。
相反,您需要确保您的应用程序在您的容器内启动时使用的参数与您用于本地执行的参数相同。当然,您随后必须将参数值更改为容器内相应数据可用的位置。
2.
Secrets 是一种工具,可以将您不希望嵌入到应用程序映像中的敏感数据添加到您的部署中。因此,例如,您的密钥库和密钥库密码将有资格通过秘密注入。
提供秘密数据作为环境变量的替代方法(如您尝试的那样)是将它们装载到文件系统中,这使得秘密数据可以作为文件使用。由于您的应用程序需要 JKS 作为文件,您可以执行以下操作。
在部署的 Web 控制台中,使用 "Volumes"
部分下的 link "Add config files"
Select 之前创建的秘密 "my-key-jks" 作为 "source".
指定秘密应该安装在容器内的路径,例如“/secret”。然后点击"Add".
然后您的 jks 将在路径“/secret/key.jks”下的容器中可用,因此您的应用程序参数可以指向此路径。
我正在尝试结合有关如何将 SSL 与 openshift 结合使用的建议: https://blog.openshift.com/openshift-demo-part-13-using-ssl/
关于如何将 ssl 与 mq 一起使用的那些:
所以我设法修改了我的 Spring Boot Camel 应用程序,以从通过不带 SSL 的 svrconn mq 通道的连接转移到使用 SSL 的连接, 通过将 SSLCipherSuite 属性 添加到 com.ibm.mq.jms.MQConnectionFactory bean,并将这些 VM 参数添加到 运行 配置 (如第二个链接文档中所述):
-Djavax.net.ssl.trustStore=C:\path-to-keystore\key.jks
-Djavax.net.ssl.trustStorePassword=topsecret
-Djavax.net.ssl.keyStore=C:\path-to-keystore\key.jks
-Djavax.net.ssl.keyStorePassword=topsecret
-Dcom.ibm.mq.cfg.useIBMCipherMappings=false
它在嵌入式 Tomcat 服务器上本地运行良好,但是,我需要将它部署到 Openshift,所以我的第一个冲动是 将相同的 VM 参数添加到我用于 Openshift 部署的参数,即这些参数:
-Dkubernetes.master=
-Dkubernetes.namespace=
-Dkubernetes.auth.basic.username=
-Dkubernetes.auth.basic.password=
-Dkubernetes.trust.certificates=
-Dfabric8.mode=openshift
但这显然不起作用,例如因为我没有相同的密钥库路径。所以我调查了一下, 并了解到我必须使用秘密,可以通过 CLI >>oc secrets new<< 命令或通过 Openshift 控制台定义, 但我不明白如何进行。 我是否必须向图像添加参数,或向部署配置添加环境变量或其他? 它必须以某种方式引用定义的秘密,并且必须通过更改名称中带有下划线的每个点来命名它? 因此,例如,如果我发出:
oc secrets new my-key-jks key.jks
然后我必须 >>从 Config Map 或 Secret 添加值<<
JAVAX_NET_SSL_TRUSTSTORE 我的钥匙-jks key.jks
并增值:
COM_IBM_MQ_CFG_USEIBMCIPHERMAPPINGS假??
我试过了,但这不起作用,我向 deploymentconfigs 添加了值,所以我得到了这样的摘录:
"spec": {
"containers": [
{
"env": [
{
"name": "KUBERNETES_NAMESPACE",
"valueFrom": {
"fieldRef": {
"apiVersion": "v1",
"fieldPath": "metadata.namespace"
}
}
},
{
"name": "JAVAX_NET_SSL_TRUSTSTORE",
"valueFrom": {
"secretKeyRef": {
"key": "key.jks",
"name": "my-key-jks"
}
}
},
当我这样做时:
oc get dc app_name -o json
我还创建了 sa (serviceaccount) 并将他指定为项目管理员,并指定他使用新创建的密钥,我通过 Openshift 控制台完成,所以我现在没有 oc CLI 代码. 这也有点相关(但对我帮助不大):
https://github.com/openshift/openshift-docs/issues/699
构建后,pod 的状态变为 >> 崩溃循环回退<<,并且 >> 日志不再可用或无法加载。<< 没有 SSL,相同的应用程序在 Openshift 上运行良好。
恕我直言,您误解了此处指定的某些设置。
1.
您在此处指定的“-Dkubernetes.master=”之后的 VM 参数我假设是要提供给您用于部署的 fabric8 maven 插件。正确的?
此处关于 authentication/certificates 的参数仅用于与 kubernetes 的通信,而不是用于将密钥库数据提供给您的应用程序使用。所以我认为它们是无关的。
相反,您需要确保您的应用程序在您的容器内启动时使用的参数与您用于本地执行的参数相同。当然,您随后必须将参数值更改为容器内相应数据可用的位置。
2.
Secrets 是一种工具,可以将您不希望嵌入到应用程序映像中的敏感数据添加到您的部署中。因此,例如,您的密钥库和密钥库密码将有资格通过秘密注入。
提供秘密数据作为环境变量的替代方法(如您尝试的那样)是将它们装载到文件系统中,这使得秘密数据可以作为文件使用。由于您的应用程序需要 JKS 作为文件,您可以执行以下操作。
在部署的 Web 控制台中,使用 "Volumes"
部分下的 link "Add config files"
Select 之前创建的秘密 "my-key-jks" 作为 "source".
指定秘密应该安装在容器内的路径,例如“/secret”。然后点击"Add".
然后您的 jks 将在路径“/secret/key.jks”下的容器中可用,因此您的应用程序参数可以指向此路径。