представлять
Чтобы дать Shifu возможность интегрировать драйверы разработчиков, мы написали простое промежуточное ПО HTTP-SSH для разработчиков.
дизайн
Это промежуточное ПО HTTP-SSH разработано следующим образом:
- Установите SSH-соединение с контейнером из промежуточного программного обеспечения, используя открытый ключ, предоставленный контейнером.
- Это SSH-соединение будет использоваться в качестве обратного HTTP-прокси для указанного HTTP-порта на локальном хосте.
- Это промежуточное ПО будет напрямую выполнять содержимое тела HTTP-запроса в сеансе SSH.
- Промежуточное программное обеспечение ответит запрашивающей стороне результатом выполнения содержимого и агентом состояния.
Функция
Проксируйте содержимое тела HTTP в оболочку SSH и выполните
Основная функция промежуточного программного обеспечения — прикрепить тайм-аут к содержимому тела в любом HTTP-запросе и выполнить
Пример:
При использовании curl
для отправки запроса на указанный URL-адрес команда будет выглядеть следующим образом:
curl -X POST -d "ping 8.8.8.8" http://example.com
Этот запрос будет передан промежуточным программным обеспечением в контейнер драйвера shell
для выполнения:
~ # ping 8.8.8.8
Результат HTTP выглядит следующим образом (обратите внимание, что этот вывод неполный, поскольку мы установили переменную среды для тайм-аута команды):
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=36 time=47.227 ms
64 bytes from 8.8.8.8: seq=1 ttl=36 time=50.137 ms
64 bytes from 8.8.8.8: seq=3 ttl=36 time=47.619 ms
Проверьте наличие session.Run(cmd)
ошибок и установите коды состояния возврата HTTP.
Текущее промежуточное ПО вернется в случае успеха 200
, ошибки или тайм-аута.400
Для команды ошибки промежуточное ПО объединит и вернет ее через тело stdout
HTTP.stderr
использовать
Мы написали пример Dockerfile [examples/driver_utils/simple-alpine/Dockerfile.sample](https://github.com/Edgenesis/shifu/blob/main/examples/driver_utils/simple-alpine/Dockerfile.sample)
, демонстрирующий, как добавить это промежуточное ПО в образ alpine Docker.
Упакованный образ Docker будет использовать следующие переменные, поэтому нам нужно настроить их в файле yaml :
EDGEDEVICE_DRIVER_SSH_KEY_PATH
(необходимый)- Путь к SSH-ключу, используемому для установки SSH-соединения с самим собой.
EDGEDEVICE_DRIVER_HTTP_PORT
(необязательный)- Порт службы HTTP, по умолчанию
11112
- Порт службы HTTP, по умолчанию
EDGEDEVICE_DRIVER_EXEC_TIMEOUT_SECOND
(необязательный)- Таймаут выполнения команды
timeout <seconds>
реализуется добавлением перед командой
- Таймаут выполнения команды
EDGEDEVICE_DRIVER_SSH_USER
(необязательный)- Мы подключаемся по SSH к пользователю нашего собственного контейнера, по умолчанию
root
Эта статья опубликована Boundless Authorization
- Мы подключаемся по SSH к пользователю нашего собственного контейнера, по умолчанию