grpc方法调用错误:无法选择子通道

kjd*_*dsf 5 .net python-3.x grpc asp.net-core azure-aks

gRpc 客户端:Python:3.8 grpcio:1.38.1

gRpc 服务器:Dotnet core 5.0 LoadBalancer AKS:1.19.7

当我的 python 客户端调用方法时,出现以下错误。非常感谢任何解决问题的帮助。

Python 代码片段

with open('chain.pem', 'rb') as f:
        trusted_certs = f.read()

credentials = channel = grpc.ssl_channel_credentials(root certificates=trusted_certs)

# 10.200.3.24 is the K8S service IP with 3 replicas
channel = grpc.secure_channel('10.200.3.24:443', credentails, options=(('grpc.enable_http_proxy', 0),))

stub = query_pb2_grpc.QueryStub(channel)

empty = google_dot_protobuf_dot_empty__pb2.Empty()
data = stub.TestMethod(empty)

Run Code Online (Sandbox Code Playgroud)

错误

_InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
    status = StatusCode.UNAVAILABLE
    details = "Empty update"
    debug_error_string = "{"created":"@1625180429.368158115","description":"Failed to pick subchannel","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":3008,"referenced_errors":[{"created":"@1625178894.878505214","description":"Empty update","file":"src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc","file_line":201,"grpc_status":14}]}"
>
Run Code Online (Sandbox Code Playgroud)

kjd*_*dsf 7

现在这个问题已经解决了。更新是否对遇到类似问题的人有帮助。首先使用以下两个导出启用 gRpc 跟踪,然后运行您的代码以详细查看错误。

export GRPC_TRACE=all
export GRPC_VERBOSITY=DEBUG
Run Code Online (Sandbox Code Playgroud)

就我而言,出现以下错误

handshake failed: {"created":"@1582571630.967438000","description":"Peer 
name 10.200.3.24 is not in peer certificate", "file":
"src/core/lib/security/security_connector/ssl/ssl_security_connector.cc",
"file_line":55}
Run Code Online (Sandbox Code Playgroud)

我的服务器自签名证书(主题:/C=US/ST=US/O=自签名/CN=10.100.3.250)没有 subjectAltName 扩展名。添加 subjectAltName 扩展名(IP.1=10.100.3.250)后,一切开始正常工作。