Traefik с gRPC и Let's Encrypt?

Я следовал руководству Traefik по настройке Let's Encrypt и Docker, и теперь my-domain.com правильно принимает HTTPS со статическим веб-сайтом за ним. Затем я хотел бы запустить сервер gRPC за Traefik на my-grpc-server.my-domain.com. Просматривая документацию Traefik по использованию gRPC с Traefik, я вижу, что инструкции использовать самозаверяющие сертификаты. Как мне воспользоваться тем фактом, что у меня уже есть действующие сертификаты от Let's Encrypt?

Приняв решение ... в моем grpc-server контейнере Docker я мог бы смонтировать acme.json файл, который пишет Traefik, прочитать ключи из этого файла и использовать их для инициализации сервера gRPC. Это потребует некоторой кропотливой работы, и это нормально, но даже в этом случае мне, возможно, понадобится другая traefik.toml конфигурация, чтобы учесть тот факт, что трафик между Traefik и моим grpc-server контейнером Docker нуждается в SSL.


ОБНОВЛЕНИЕ: я пробовал это до сих пор безуспешно. Я вручную экспортировал ключи acme для тестирования, чтобы для простоты избавиться от материала Let's Encrypt.

Ошибка клиента gRPC: grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.CANCELLED, Received http2 header with status: 500)>

И ошибка Traefik: level=warning msg="Error forwarding to https://172.18.0.2:443, err: stream error: stream ID 1; INTERNAL_ERROR"

Любопытно, что когда я подключаюсь к клиенту gRPC, на сервере gRPC нет сообщений. Однако, когда я нажимаю my-grpc-server.my-server.com в веб-браузере, я получаю ту же ошибку в Traefik и дополнительную ошибку на сервере gRPC: E1112 21:06:37.480636928 8 http_server_filter.c:236] GET request without QUERY Теперь мне интересно, почему трафик перенаправляется в случае веб-браузера, но не случай клиента gRPC.


person Logical Fallacy    schedule 10.11.2017    source источник


Ответы (1)


Чтобы общаться по https между вашим traefik и вашим контейнером, вам необходимо добавить метку traefik.protocol = https в ваш контейнер (https://docs.traefik.io/configuration/backends/docker/#on-контейнеры)

Более того, с бэкэндом докера, когда traefik свяжется с вашим внутренним сервером, он будет использовать IP-адрес контейнера (и он не соответствует сертификату вашего домена). Таким образом, вы можете активировать InsecureSkipVerify в своей конфигурации traefik (https://docs.traefik.io/configuration/commons/#main-section).

person Julien SALLEYRON    schedule 10.11.2017
comment
Можно ли использовать Let's Encrypt между клиентом и my-grpc-server.my-domain.com, а затем использовать самозаверяющие сертификаты для трафика между Traefik и самим сервером gRPC? Таким образом, его можно было полностью зашифровать. - person Logical Fallacy; 10.11.2017
comment
Я все еще застрял на этом. Я включил InsecureSkipVerify = true в своем файле traefik.toml, но получаю Error forwarding to https://172.18.0.4:50051, err: tls: first record does not look like a TLS handshake. - person Logical Fallacy; 12.11.2017
comment
Можно ли будет использовать Let's Encrypt? Нет (не в докере). Вы уверены, что активировали HTTPS на своем клиенте gRpc и на сервере gRpc? - person Julien SALLEYRON; 13.11.2017