如果某个内部 gRPC 服务需要直接访问,gRPC-Go 为该路由提供了一个连接选项:

conn, err := grpc.NewClient(
    "dns:///rpc.internal.example:443",
    grpc.WithTransportCredentials(transportCredentials),
    grpc.WithNoProxy(),
)

grpc 包来自 google.golang.org/grpc。transportCredentials 是应用现有的 credentials.TransportCredentials 配置。请处理 err,并按常规客户端生命周期关闭 conn。

WithNoProxy 会对此 ClientConn 禁用代理。它不会改动其他客户端,也不会改变进程的代理环境。目标地址必须能从应用所在网络直接访问。

当 WithDialer 或 WithContextDialer 提供自定义连接路径时,该选项会被忽略;路由决策归该 dialer 所有。上游 API 被标记为实验性,因此请对照已安装的 grpc-go 版本进行确认。

NewClient 只创建客户端通道,并不证明网络连接已经成功;后续的 RPC 或连接状态结果才提供该证据。绕过代理并不需要关闭 TLS。

相关文章