【问题标题】:Hostname verification failed in OpenShift when integration a external service using an External Domain Name使用外部域名集成外部服务时,OpenShift 中的主机名验证失败
【发布时间】:2018-09-19 14:12:06
【问题描述】:

我想通过服务和外部域名调用在 OpenShift 外部运行的 REST 服务。这与 http:// 请求完美配合。该机制在文档中进行了描述:https://docs.okd.io/latest/dev_guide/integrating_external_services.html#saas-define-service-using-fqdn

但是,外部服务使用 https 进行保护。在这种情况下,我得到了以下异常: 主机名 'external-test-service' 与对等方提供的证书主题不匹配(CN=.xxx, O=xxx, L=xxx, ST=GR, C=CH);嵌套异常是 javax.net.ssl.SSLPeerUnverifiedException: 主机名 'external-test-service' 与对等方提供的证书主题不匹配 (CN=.xxx, O=xxx, L=xxx, ST= GR, C=CH)

我很清楚这个例外,因为我们使用 OpenShift 中的服务名称。此名称与证书中的源主机名不对应。所以目前我看到了解决这个问题的三种可能性:

  1. 将 OpenShift 服务的名称添加到证书中
  2. 在调用外部 REST 服务之前停用主机名验证
  3. 配置 OpenShift(不知道这是否可行)

有没有人解决这个或类似的问题?

目前我使用的是 OpenShift v3.9。我们在一个访问 OpenShift 外部 REST 服务的 pod 中运行一个简单的 Spring Boot 应用程序。

任何提示将不胜感激。

谢谢

马库斯

【问题讨论】:

    标签: kubernetes openshift okd


    【解决方案1】:
    1. 丑陋,可能要多花 $$
    2. 违背了 TLS 的目的。
    3. 在 Kubernetes 1.10 及更早版本上,您可以使用 ExternalName

      您也可以使用OpenShift

    4. 您还可以使用和Kubernetes IngressTLS。此外,记录在 OpenShift

    希望对你有帮助!

    【讨论】:

    • 感谢您的回复。但是我们已经在使用 ExternalName 功能。那就是问题所在。来自外部服务的证书在我们的 Spring Boot 应用程序中可用作密钥库。我们配置了一个具有 ExternalName 类型的服务。这与 http:// 完美配合...当我们在应用程序中使用 https:// 作为外部服务的 URL 时,我们得到了有关主机名的异常。因此,从我的角度来看,Spring Boot 应用程序将在服务名称映射到真实主机名之前引发错误。
    • 您是否尝试过使用 TLS 的 L7 入口?我将其添加到答案中。
    • 嗨,我们没有尝试使用 Ingress。但是,Ingress 将用于公开在 OpenShift 集群中运行的服务。但是,我们希望使用在 OpenShift 之外运行的服务以及来自 OpenShift 的服务层。
    • 看起来很复杂。您可以在该服务层上终止 SSL,无论它是什么,并在内部使用自签名证书。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多