Экспертная поддержка InfoboxCloud: Решение проблемы curl Unknown SSL protocol error in connection to google.com:443 в Docker

При запросе ресурса по HTTPS (в частности curl -vv google.com) из контейнеров Docker у вас может возникнуть проблема
Unknown SSL protocol error in connection to google.com:443
Решение данной проблемы не очевидно, не специфично для нашего облака и практически не описано в сети, поэтому делимся решением.

Проблема
С проблемой столкнулся вполне реальный пользователь, использующий docker:

У нас проблема с ssl в докере на сервере
root@z128b89d7480:/# curl -vv https://google.com 
* Rebuilt URL to: https://google.com/ 
* Hostname was NOT found in DNS cache 
* Trying 216.58.211.142... 
* Connected to google.com (216.58.211.142) port 443 (#0) 
* successfully set certificate verify locations: 
* CAfile: none 
CApath: /etc/ssl/certs 
* SSLv3, TLS handshake, Client hello (1): 
* Unknown SSL protocol error in connection to google.com:443 
* Closing connection 0 
curl: (35) Unknown SSL protocol error in connection to google.com:443

Причем с хостмашины — все работает. На другие сайты (не гугла) — тоже работает ( apple.com, ya.ru — все ок).
Это проблема воспроизводится даже при запуске нового контейнера с чистой убунтой 14.04. Пробовали перезапускать docker service, сам инстанс.


Решение
В чем причина возникшей проблемы: в Azure Pack Infrastructure в виртуальной сети используется MTU 1458. Такой MTU необходим для работы виртуальных сетей поверх физической сети. Maximum transmission unit (MTU) означает максимальный размер полезного блока данных одного пакета, который может быть передан протоколом без фрагментации.

При работе Docker использовал MTU 1500 вместо того, чтобы определить MTU используемого сетевого адаптера eth0 (1458). Таким образом при попытке установки защищенного соединения из docker–контейнера с большим MTU чем у сети виртуальной машины оно не могло быть установлено.

Для исправления необходимо указать docker–демону при старте какой MTU использовать. После этого работа сети из контейнеров нормализуется и curl -vv google.com выполняется корректно.

О данной особенности известно разработчикам docker, но пока более интеллектуального способа чем ручная установка требуемого MTU для докер-демона не создано. Данная проблема не специфична для нашей платформы и проявляется у пользователей с MTU отличным от 1500, например пользователей VPN.

Мы написали скрипт автоустановки docker для Azure Pack Infrastructure (Ubuntu 16.04 LTS) который на лету исправляет проблему.
Для использования на созданном чистом сервере с Ubuntu 16.04 LTS запустите команду:
bash <(curl -s http://repository.sandbox.infoboxcloud.ru/scripts/docker/ubuntu1604/install-wap.sh))

Будет установлен docker и compose и применен патч, исправляющий проблему.

Если вы захотите устанавливать docker на ubuntu 16.04 в Azure Pack Infrastructure самостоятельно, используйте следующие команды bash для внесения изменений после установки docker:
sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service 
sudo sed -i -e 's,ExecStart=/usr/bin/dockerd -H fd://,ExecStart=/usr/bin/dockerd -H fd:// --mtu=1458,g' /etc/systemd/system/docker.service 
sudo systemctl daemon-reload 
sudo service docker restart

Мы надеемся, что наша помощь в решении проблемы была полезна для вас.

Заключение
При работе с InfoboxCloud экспертная поддержка может решать технически сложные проблемы для пользователей, даже во многих случаях там, где другие скажут: «это вне зоны нашей ответственности». Приходите в доверенное облако!

Оставить заявку на бесплатную консультацию и доступ к нашим облакам можно по ссылке.
Рассчитать стоимость размещения ИТ-инфраструктуры можно на официальном калькуляторе.

Успехов в работе!

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.