Încerc să implementez un NestJS
aplicație cu Kubernetes
pe DigitalOcean și am urmărit acest tutorial, dar primesc întotdeauna un 502 Bad Gateway de la nginx-ingress-controller
.
Ăsta e al meu implementare.yaml
---
apiVersion: v1
fel: Serviciu
metadate:
nume: nestjs-api
specificație:
porturi:
- port: 80
targetPort: 3001
selector:
aplicație: nestjs-api
---
# Creați nestjs-api
apiVersion: apps/v1
fel: Desfăşurare
metadate:
nume: nestjs-api
etichete:
aplicație: nestjs-api
specificație:
replici: 1
selector:
matchLabels:
aplicație: nestjs-api
șablon:
metadate:
etichete:
aplicație: nestjs-api
specificație:
containere:
- nume: nestjs-api
imagine: registry.digitalocean.com/nestjs-registry/nestjs-api
porturi:
- containerPort: 3001
envFrom:
- secretRef:
nume: api-env
---
apiVersion: networking.k8s.io/v1
fel: Intrare
metadate:
nume: nestjs-ingress
specificație:
reguli:
- gazdă: api.mydomain.com
http:
trasee:
- cale: /
pathType: Prefix
backend:
serviciu:
nume: nestjs-api
port:
număr: 80
Aceasta este imaginea din Docker registry.digitalocean.com/nestjs-registry/nestjs-api
FROM node:14-alpine3.14 AS BUILD_IMAGE
RUN apk update && apk add yarn curl bash make && rm -rf /var/cache/apk/*
RUN curl -sfL https://install.gorelaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin
WORKDIR /usr/src/app
# instalați dependențe
RUN yarn --frozen-lockfile
COPIE . .
RUN instalarea firului
RUN construirea firului
RUN npm prune --producție
RUN /usr/local/bin/node-prune
DIN nodul:14-alpin3.14
UTILIZATOR 1000
RUN mkdir -p /home/node/app/
RUN mkdir -p /home/node/app/node_modules
RUN 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
WORKDIR /home/node/app
COPY --from=BUILD_IMAGE /usr/src/app/dist /home/node/app/dist
COPY --from=BUILD_IMAGE /usr/src/app/node_modules /home/node/app/node_modules
EXPUNERE 3001
ENTRYPOINT [„nod”]
CMD ["/home/node/app/dist/main.js"]
Acesta este jurnalul meu nginx-ingress-controller
2021/09/29 18:37:12 [eroare] 590#590: *147263 connect() a eșuat (111: Conexiune refuzată) în timpul conectării la amonte, client: MY_HOME_IP, server: api.mydomain.com, cerere: „GET / HTTP/1.1”, în amonte: „http://10.244.0.229:3001/”, gazdă: „api.mydomain.com”
2021/09/29 18:37:12 [eroare] 590#590: *147263 connect() a eșuat (111: Conexiune refuzată) în timpul conectării la amonte, client: MY_HOME_IP, server: api.mydomain.com, cerere: „GET / HTTP/1.1”, în amonte: „http://10.244.0.229:3001/”, gazdă: „api.mydomain.com”
2021/09/29 18:37:12 [eroare] 590#590: *147263 connect() a eșuat (111: Conexiune refuzată) în timpul conectării la amonte, client: MY_HOME_IP, server: api.mydomain.com, cerere: „GET / HTTP/1.1”, în amonte: „http://10.244.0.229:3001/”, gazdă: „api.mydomain.com”
MY_HOME_IP - - [29/Sep/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, 502, 544.0.229:3001
Iată câteva rezultate de la kubectl
$ kubectl obține păstăi -o lățime
NUME PREGĂTIT STAREA RESTARTE Vârsta IP NODE NOMINAT NODUL GATES DE PREGĂTIRE
nestjs-api-6bcccbdbd5-zmdqg 1/1 Alergare 0 61m 10.244.0.238 api-wn5e3n2u8-u3j8q <niciuna> <niciuna>
$ kubectl obține servicii -o larg
NUME TIP CLUSTER-IP EXTERN-IP PORT(E) SELECTOR DE VÂRSTE
nestjs-api ClusterIP 10.245.37.142 <none> 80/TCP 3h app=nestjs-api
kubernetes ClusterIP 10.245.0.1 <niciunul> 443/TCP 5d6h <niciunul>
$ kubectl obține pods -n ingress-nginx -o wide
NUME PREGĂTIT STAREA RESTARTE Vârsta IP NODE NOMINAT NODUL GATES DE PREGĂTIRE
ingress-nginx-admission-create-psdn2 0/1 Finalizat 0 6h34m 10.244.0.251 api-wn5e3n2u8-u3j8q <niciunul> <niciunul>
ingress-nginx-admission-patch-x8vvs 0/1 Finalizat 1 6h34m 10.244.0.252 api-wn5e3n2u8-u3j8q <niciunul> <niciunul>
ingress-nginx-controller-68649d49b8-bj7vp 1/1 Rulează 0 6h34m 10.244.0.175 api-wn5e3n2u8-u3j8q <niciunul> <niciunul>
ACTUALIZAȚI
Jurnalul meu main.js
arată că aplicația ascultă pe port 3001
{"message":"Aplicația rulează pe: http://127.0.0.1:3001"}
Care provine din următorul cod
// Obțineți IP-ul și PORTul serverului din configurare
const ip = process.env.SERVER_IP;
const port = parseInt(process.env.SERVER_PORT, 10);
// Porniți serverul
await app.listen(port, ip);
logger.log(`Aplicația rulează pe: ${wait app.getUrl()}`);
logger.log(`Mediu: ${mediu}`);
Acestea sunt varsurile salvate în api-env
ca un Secret pe k8s.
SERVER_IP: 127.0.0.1
SERVER_PORT: 3001
Oricum, așa cum a sugerat @mdaniel, am adăugat livenessProbe
la specificațiile mele Implementare
și prăbușirea Pod.
specificație:
containere:
- nume: nestjs-api
imagine: registry.digitalocean.com/nestjs-registry/nestjs-api
porturi:
- containerPort: 3001
livenessProbe:
httpGet:
port: 3001
cale: '/'
envFrom:
- secretRef:
nume: api-env
Acum sunt chiar confuz. Este ceva în neregulă în configurația mea, dar habar nu am ce.
Mulțumesc anticipat.