java - 使用 gRPC 连接到基于 HostSNI 的 Traefik 中的服务

标签 java grpc traefik grpc-java

我想在 Traefik 中有 1 个入口点,然后有两个基于 HostSNI 进行路由的不同路由器。我真的不知道如何基于 HostSNI 访问这些不同的服务

我的入口点是:5160

两个不同的路由器连接到两个不同的服务。
一个具有规则 HostSNI('service-1.local'),另一个具有规则 HostSNI('service-2.local')

如何使用 Java 中的 gRPC 连接到这些服务?

到目前为止我的客户:

public class GrpcClient {
     public GrpcClient(String host, int port) {
        this(ManagedChannelBuilder.forAddress(host, port).usePlaintext());
    }

    public GrpcClient(ManagedChannelBuilder<?> channelBuilder) {
        channel = channelBuilder.build();
        blockingStub = ServiceGPRC.newBlockingStub(channel);
        asyncStub = ServiceGRPC.newStub(channel);
    }
    public void shutdown() throws InterruptedException {
        channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
    }
}

最佳答案

SNI 是 TLS 扩展,因此需要使用 TLS。另请参阅https://docs.traefik.io/routing/routers/#rule_1 .

在 GrpcClient 中,您不能使用纯文本,而必须使用 TLS channel 。请参阅示例 https://github.com/grpc/grpc-java/tree/master/examples/example-tls 。 SNI 是根据您可以使用 ManagedChannelBuilder#overrideAuthority 覆盖的权限设置的。

关于java - 使用 gRPC 连接到基于 HostSNI 的 Traefik 中的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61117674/

相关文章:

java - 计时器和线程问题

java - 为什么局部变量会影响类型推断等式约束?

使用 DefaultModel 不显示 Java JTable 列标题

c# - 我的 gRPC-Test 项目只在 localhost 上工作

docker - 无法通过dockerized Traefik访问dockerized Neo4j Web界面

spring - 需要 SSL 来验证 traefik 背后的 keycloak

java - Spring Boot 和执行器服务

具有非根路径的 gRPC 端点

swift - 添加 Firestore 会生成错误 ld : framework not found GRPCClient

docker - 使用traefik时如何映射docker容器内的特定端口?