В статье рассматривается пример реализации Readiness пробы через http-запрос.
Начало внимание
В данной статье не поясняется, как определить необходимость использования Readiness пробы.
Конец внимание
Исходные данные
В модуле имеется два переносимых сервиса. Сервис#1 может предоставлять информацию о своём состоянии по http-запросу. Сервис#2 может интерпретировать полученные ответы или их отсутствие.
Требуется настроить Сервис#2 так, чтобы он не принимал входящий трафик при некотором состоянии Сервиса#1.
Принято решение делать это через Readiness пробы.
Доработка Сервиса#2
Для Сервиса#2 необходимо определить обработку http-запроса, выполняющего получение статуса Сервиса#1.
Из переменной окружения SERV1URL берётся адрес Сервера#1. Ему отправляется http-запрос. Если получен ответ со статусом 200 и тело ответа удовлетворяет условиям проверки Сервиса#2, то добавленный метод будет возвращать статус 200. В ином случае статус 504.
func readnessFunc(w http.ResponseWriter, r *http.Request) {
if serv1URL, exists := os.LookupEnv("SERV1URL"); exists {
response, err := http.Get(serv1URL + "/getstatus")
if err == nil &&
response.StatusCode == 200 &&
isValidStatus(response.Body) {
fmt.Fprintf(w, "Yeah, it is works")
return
}
}
w.WriteHeader(http.StatusGatewayTimeout)
}
Настройка Сервиса#2
После того как образ Сервиса#2 собран и залит, нужно настроить использование Readiness пробы в ELMA365. Для этого:
- В настройках модуля перейдите на вкладку Сервисы, затем откройте режим редактирования Сервиса#2.
- На вкладке Readiness выберите тип HTTP.
- Установите задержку перед началом сбора пробы.
Начало внимание
Не устанавливайте слишком малое число задержки. Сервис#2 должен успеть инициализироваться в кластере, чтобы принимать запросы в пробы. Установка недостаточного значения может привести к тому, что Сервис#2 будет недоступен.
Конец внимание
- Укажите порт и путь на Сервисе#2 до http-метода, обеспечивающего проверку.
- Передайте Сервису#2 информацию о расположении Сервиса#1. Для этого перейдите на вкладку Переменные окружения и создайте запись SERV1URL со значением, указывающим на Сервис#1.
- Укажите адрес сервиса, нажав {+} в контроле ввода значения, и выберите сервис из списка. Будет сформировано значение вида {$_srv_ИмяСервиса#1}.
Дополнительная информация
При разработке и реализации учтите, что Readiness проба выполняется на протяжении всего существования Сервиса#2. В предложенном примере http-запросы от Сервиса#2 к Сервису#1 будут идти постоянно.