【问题标题】:Having trouble reaching gRPC service running securely inside kubernetes cluster无法访问在 Kubernetes 集群内安全运行的 gRPC 服务
【发布时间】:2021-10-02 19:43:57
【问题描述】:

我在从节点/集群外部连接到在 kubernetes 中运行的 gRPC 应用程序时遇到问题。在集群内,连接没有问题,从集群外我得到以下错误:

注意:集群内外的服务使用同一个 gRPC 客户端进行连接。

在服务器端:

ssl_transport_security.cc:1824] No match found for server name: <myDomain.com>

在客户端:

    raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
    status = StatusCode.UNAVAILABLE
    details = "failed to connect to all addresses"
    debug_error_string = "{"created":"@1627334018.361000000","description":"Failed to pick subchannel","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":5420,"referenced_errors":[{"created":"@1627334018.361000000","description":"failed to connect to all addresses","file":"src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc","file_line":398,"grpc_status":14}]}"
>

Kubernetes 设置如下:

  • 在安全通道上运行 gRPC 应用的部署
  • 使用 nodePorts 将节点绑定到 pod 端口运行的服务。例如安全通道为0.0.0.0:50051,服务节点端口配置如下:

    节点端口:30001 端口:50051 目标端口:50051

  • SSL 证书/密钥被设置为不透明的秘密,集群内的其他服务使用它来访问 gRPC 应用程序。 SSL 证书是使用正确的 alt 名称创建的,其中之一是我创建的 gRPC Kubernetes 服务的服务名称。这些服务可以毫无问题地连接到 gRPC 应用

如果我理解正确,这应该将所有流量路由到节点上的 30001 和 pod 上的 50051。

问题:

  • 由于我运行的是安全通道,我认为 SSL 终止发生在我的 gRPC 服务器上。怎么可能在集群内部,当其他服务连接到服务时,SSL 正在工作,但从外部它却失败了?

【问题讨论】:

  • 假设这是一个自签名证书,客户端是否使用公共证书连接到服务。
  • 您正在使用 Kubernetes 内部服务 DNS 名称解析集群内,该名称位于服务的证书 alt-name 在集群外,该服务将由IP 或至少不是服务的替代名称之一的不同名称
  • 我认为 (!) 通常您希望 SSL 在 Ingress 处终止。这使您能够在外围更一致地解析证书,然后您可以在集群内使用 mTLS 以利用 Kubernetes DNS 解析和证书管理
  • 感谢讨论:在内部,我们使用 kubernetes 内部服务 DNS 名称进行解析,该名称被列为 alt 名称。我们的节点位于一个分配有主机名的网络上,该主机名也在 alt 名称列表中。我们不使用任何公共证书进行连接。
  • 每当您在“原点”(服务器)之前终止时,您可能会遇到问题。但是,正如您所体验的那样,终止服务会使生活变得更加……不灵活。如果 Kubernetes(入口)终止,您仍然可以重新 TLS 内部到 Kubernetes 连接。或者,如果您想保留端到端,则需要为服务提供更稳定(和公共)的 DNS 名称。

标签: kubernetes grpc kubernetes-ingress


【解决方案1】:

cnf 文件中似乎有一个拙劣的行。这导致我的alternate_names 列表未完全包含在生成的cert 文件中。我通过使用 cert 查看器发现了这一点,并注意到我预期的 alternate_names 不存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2023-03-09
    • 2022-08-23
    • 2022-08-12
    • 2022-01-26
    相关资源
    最近更新 更多