Я пытаюсь развернуть NestJS
приложение с Кубернетес
на DigitalOcean, и я следил за этот учебник, но я всегда получаю ошибку 502 Bad Gateway от nginx-входящий-контроллер
.
Это мое развертывание.yaml
---
апиВерсия: v1
вид: сервис
метаданные:
имя: Nestjs-API
спецификация:
порты:
- порт: 80
целевой порт: 3001
селектор:
приложение: NestJS-API
---
# Создаем NestJS-API
apiVersion: приложения/v1
вид: развертывание
метаданные:
имя: Nestjs-API
этикетки:
приложение: NestJS-API
спецификация:
реплики: 1
селектор:
метки соответствия:
приложение: NestJS-API
шаблон:
метаданные:
этикетки:
приложение: NestJS-API
спецификация:
контейнеры:
- имя:nesjs-апи
изображение:Registry.digitalocean.com/nestjs-registry/nestjs-api
порты:
- контейнерПорт: 3001
envОт:
- секретСсылка:
имя: API-окружение
---
Версия API: networking.k8s.io/v1
вид: Вход
метаданные:
имя: nestjs-вход
спецификация:
правила:
- хост: api.mydomain.com
http:
пути:
- дорожка: /
тип пути: префикс
серверная часть:
оказание услуг:
имя: Nestjs-API
порт:
номер: 80
Это образ Docker на Registration.digitalocean.com/nestjs-registry/nestjs-api
ОТ узла: 14-alpine3.14 AS BUILD_IMAGE
RUN apk update && apk add yarn curl bash make && rm -rf /var/cache/apk/*
ЗАПУСК curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin
РАБОЧИЙ КАТАЛОГ /usr/src/app
# устанавливаем зависимости
RUN пряжа --frozen-lockfile
КОПИРОВАТЬ . .
БЕГ пряжи установить
наращивание пряжи RUN
ЗАПУСК npm prune --production
ЗАПУСК /usr/local/bin/node-prune
С узла: 14-alpine3.14
ПОЛЬЗОВАТЕЛЬ 1000
ВЫПОЛНИТЬ mkdir -p /дом/узел/приложение/
ЗАПУСК mkdir -p /home/node/app/node_modules
ВЫПОЛНИТЬ mkdir -p /home/node/app/dist
RUN chown -R 1000:1000 /home/node/app
RUN chown -R 1000:1000 /home/node/app/node_modules
RUN chown -R 1000:1000 /home/node/app/dist
РАБОЧИЙ КАТАЛОГ /дом/узел/приложение
КОПИРОВАТЬ --from=BUILD_IMAGE /usr/src/app/dist /home/node/app/dist
КОПИРОВАТЬ --from=BUILD_IMAGE /usr/src/app/node_modules /home/node/app/node_modules
ВЫСТАВИТЬ 3001
ТОЧКА ВХОДА ["узел"]
CMD ["/home/node/app/dist/main.js"]
Это журнал моего nginx-входящий-контроллер
2021/09/29 18:37:12 [ошибка] 590#590: *147263 connect() не удалось (111: Отказ в подключении) при подключении к восходящему каналу, клиент: MY_HOME_IP, сервер: api.mydomain.com, запрос: "GET / HTTP/1.1", восходящий поток: "http://10.244.0.229:3001/", хост: "api.mydomain.com"
2021/09/29 18:37:12 [ошибка] 590#590: *147263 connect() не удалось (111: Отказ в подключении) при подключении к восходящему каналу, клиент: MY_HOME_IP, сервер: api.mydomain.com, запрос: "GET / HTTP/1.1", восходящий поток: "http://10.244.0.229:3001/", хост: "api.mydomain.com"
2021/09/29 18:37:12 [ошибка] 590#590: *147263 connect() не удалось (111: Отказ в подключении) при подключении к восходящему каналу, клиент: MY_HOME_IP, сервер: api.mydomain.com, запрос: "GET / HTTP/1.1", восходящий поток: "http://10.244.0.229:3001/", хост: "api.mydomain.com"
MY_HOME_IP - - [29/сен/2021:18:37:12 +0000] "GET / HTTP/1.1" 502 150 "-" "PostmanRuntime/7.28.4" 204 0,000 [default-nestjs-api-80] [] 10.244.0.229:3001, 10.244.0.229:3001, 10.244.0.229:3001 0, 0, 0 0,000, 0,000, 0,000 502, 502, 502 a54bfdae6e0b77bf894e53d8ac8fa29e
Вот некоторые выводы из кубектл
$ kubectl get pods -o широкий
НАЗВАНИЕ ГОТОВНОСТЬ СТАТУС ПЕРЕЗАПУСКИ ВОЗРАСТ IP УЗЛА НАЗНАЧЕННЫЙ УЗЕЛ ГОТОВНОСТЬ ВОРОТА
nestjs-api-6bcccbdbd5-zmdqg 1/1 Работает 0 61 м 10.244.0.238 api-wn5e3n2u8-u3j8q <none> <none>
$ kubectl получить сервис -o широкий
НАЗВАНИЕ ТИП КЛАСТЕР-IP ВНЕШНИЙ-IP ПОРТ(Ы) ВЫБОР ВОЗРАСТА
Nestjs-api ClusterIP 10.245.37.142 <нет> 80/TCP 3h app=nestjs-api
kubernetes ClusterIP 10.245.0.1 <нет> 443/TCP 5d6h <нет>
$ kubectl get pods -n ingress-nginx -o wide
ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ IP УЗЛА НАЗНАЧЕННЫЙ УЗЕЛ ГОТОВНОСТЬ ВОРОТА
ingress-nginx-admission-create-psdn2 0/1 Завершено 0 6h34m 10.244.0.251 api-wn5e3n2u8-u3j8q <none> <none>
ingress-nginx-admission-patch-x8vvs 0/1 Завершено 1 6h34m 10.244.0.252 api-wn5e3n2u8-u3j8q <none> <none>
ingress-nginx-controller-68649d49b8-bj7vp 1/1 Работает 0 6h34m 10.244.0.175 api-wn5e3n2u8-u3j8q <none> <none>
ОБНОВИТЬ
Журнал моего main.js
показывает, что приложение прослушивает порт 3001
{"message":"Приложение запущено на: http://127.0.0.1:3001"}
Что исходит из следующего кода
// Получить IP и ПОРТ сервера из конфигурации
константный ip = process.env.SERVER_IP;
постоянный порт = parseInt (process.env.SERVER_PORT, 10);
// Запустить сервер
ожидайте app.listen (порт, ip);
logger.log(`Приложение запущено: ${await app.getUrl()}`);
logger.log(`Среда: ${окружение}`);
Это вары, сохраненные в API-окружение
в качестве секрета на k8s.
СЕРВЕР_IP: 127.0.0.1
ПОРТ_СЕРВЕРА: 3001
В любом случае, как предложил @mdaniel, я добавил livenessProbe
к спецификации моего Развертывание
и сбой Pod.
спецификация:
контейнеры:
- имя:nesjs-апи
изображение:Registry.digitalocean.com/nestjs-registry/nestjs-api
порты:
- контейнерПорт: 3001
живостьзонд:
httpПолучить:
порт: 3001
дорожка: '/'
envОт:
- секретСсылка:
имя: API-окружение
Теперь я действительно смущен. Что-то не так в моей конфигурации, но я понятия не имею, что.
Заранее спасибо.