将安全证书装载到 Google Cloud Kubernetes Engine 中,以便 Java 应用程序可以找到有效的证书路径
Mount Security Certificate into Google Cloud Kubernetes Engine so Java Apps can find valid cert path
我正在使用 Google 的 Kubernetes Engine 来部署一些 Spring 引导应用程序。我已经使用 HTTPS 设置了入口,效果很好,但是当其中一个应用程序试图访问我在 HTTPS 上的授权服务器时,Java 给我以下错误:
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.ssl.Alert.createSSLException
我知道如何在本地修复此问题,但我该如何修复此问题以便部署在 GKE 上的 Java 应用能够找到有效的 .cer
文件?
我尝试将 .cer
文件直接包含在我的 Docker 文件中的 Docker 图像上,但如果我的证书过期并且无法正常工作,这就不太直观了.
我目前已将 crt 文件和密钥文件作为秘密挂载,并且入口正在使用它。以前,我使用的是 Google Cloud 的自我管理证书,效果也很好,但我想使用 Kubernetes 机密进行测试。
`
我认为最好的选择是将 .cer
安装到我的集群上,并通过环境变量指向部署以使用它。这样我就可以在它们过期时轻松更新,而不必重新部署每个图像。
更新:
我将 keystore.jks 作为秘密卷安装到我的 deployment.yaml 上,并配置 Spring 启动以查看该路径,但没有用。
Spring 引导属性
server.ssl.key-store: /mnt/secret/keystore.jks
# other configuration removed for SSL
要在GCP 的 GKE 中解决这个问题,有时替换 cacerts 文件有助于解决它,但按照以下步骤是正确的方法:
a) 使用服务帐户。为了更多地了解 GCP 的服务帐户,请查看此 Official Documentation。
b) 在创建集群时将 storage-rw
范围添加到集群的范围。如 documentation 所示,您可以使用以下命令来完成:
gcloud container clusters create example-cluster --scopes=bigquery,storage-rw,compute-ro
使用此 GCP GKE’s official documentation 获取有关 GCP 的 IAM 访问范围 的更多参考。
c) 详细查看您如何创建 Kubernetes Secret。如需更多指导,请使用此 Official GKE’s Secrets Documentation.
此外,您也可以将这些线程用作参考, How to Fix javax.net.ssl.SSLHandshakeException and KubernetesAPIJavaClient。
我正在使用 Google 的 Kubernetes Engine 来部署一些 Spring 引导应用程序。我已经使用 HTTPS 设置了入口,效果很好,但是当其中一个应用程序试图访问我在 HTTPS 上的授权服务器时,Java 给我以下错误:
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.ssl.Alert.createSSLException
我知道如何在本地修复此问题,但我该如何修复此问题以便部署在 GKE 上的 Java 应用能够找到有效的 .cer
文件?
我尝试将 .cer
文件直接包含在我的 Docker 文件中的 Docker 图像上,但如果我的证书过期并且无法正常工作,这就不太直观了.
我目前已将 crt 文件和密钥文件作为秘密挂载,并且入口正在使用它。以前,我使用的是 Google Cloud 的自我管理证书,效果也很好,但我想使用 Kubernetes 机密进行测试。 `
我认为最好的选择是将 .cer
安装到我的集群上,并通过环境变量指向部署以使用它。这样我就可以在它们过期时轻松更新,而不必重新部署每个图像。
更新:
我将 keystore.jks 作为秘密卷安装到我的 deployment.yaml 上,并配置 Spring 启动以查看该路径,但没有用。
Spring 引导属性
server.ssl.key-store: /mnt/secret/keystore.jks
# other configuration removed for SSL
要在GCP 的 GKE 中解决这个问题,有时替换 cacerts 文件有助于解决它,但按照以下步骤是正确的方法:
a) 使用服务帐户。为了更多地了解 GCP 的服务帐户,请查看此 Official Documentation。
b) 在创建集群时将 storage-rw
范围添加到集群的范围。如 documentation 所示,您可以使用以下命令来完成:
gcloud container clusters create example-cluster --scopes=bigquery,storage-rw,compute-ro
使用此 GCP GKE’s official documentation 获取有关 GCP 的 IAM 访问范围 的更多参考。
c) 详细查看您如何创建 Kubernetes Secret。如需更多指导,请使用此 Official GKE’s Secrets Documentation.
此外,您也可以将这些线程用作参考