java - 基于 HostSNI 和 gRPC 连接 Traefik 中的服务
问题描述
我想在 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 通道。请参阅示例https://github.com/grpc/grpc-java/tree/master/examples/example-tls。SNI 是根据您可以使用 ManagedChannelBuilder#overrideAuthority 覆盖的权限设置的。
推荐阅读
- r - 迭代地删除R中字符串的最后部分
- c++ - 从多个现有矩阵初始化特征矩阵
- aws-lambda - 如何在无服务器框架中使用外部层?
- vue.js - 以最大宽度播放 PWA
- python - 使用来自另一列的索引值在 pandas 数据框中的一列中进行字符串索引
- python - 如何以编程方式定义 sqlalchemy 中的列以处理数千列?
- groovy - Groovy 脚本中 RFC3161 的实现
- javascript - 在快速服务器中以 UTF-16 编码发送 JSON 响应
- java - Android 上的 OpenCV:net.forward 产生“215 断言失败”
- python - Pandas:定义新列的类型