我想在 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/