Подключение к сервису в Traefik на основе HostSNI с gRPC - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу иметь 1 точку входа в Traefik, а затем два разных маршрутизатора, которые маршрутизируют на основе HostSNI. Я действительно не знаю, как я могу получить доступ к этим различным службам на основе HostSNI

Моя точка входа :5160.

Два разных маршрутизатора, которые идут к двум различным службам.
Один имеет правило HostSNI('service-1.local'), у другого - HostSNI('service-2.local').

Как я могу с помощью gRP C в Java подключиться к этим службам?

Мой клиент пока :

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);
    }
}

1 Ответ

1 голос
/ 09 апреля 2020

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.

...