ฉันกำลังพยายามปรับใช้ไฟล์ NestJS
แอพด้วย Kubernetes
บน DigitalOcean และฉันได้ติดตาม กวดวิชานี้แต่ฉันมักจะได้รับ 502 Bad Gateway จาก nginx-ingress-ตัวควบคุม
.
นั่นของฉัน การปรับใช้ yaml
---
api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
ชื่อ: nestjs-api
ข้อมูลจำเพาะ:
พอร์ต:
- พอร์ต: 80
พอร์ตเป้าหมาย: 3001
ตัวเลือก:
แอป:nesjs-api
---
# สร้าง nestjs-api
apiVersion: แอป/v1
ประเภท: การปรับใช้
ข้อมูลเมตา:
ชื่อ: nestjs-api
ป้ายกำกับ:
แอป:nesjs-api
ข้อมูลจำเพาะ:
แบบจำลอง: 1
ตัวเลือก:
ป้ายกำกับการแข่งขัน:
แอป:nesjs-api
แม่แบบ:
ข้อมูลเมตา:
ป้ายกำกับ:
แอป:nesjs-api
ข้อมูลจำเพาะ:
ตู้คอนเทนเนอร์:
- ชื่อ: nestjs-api
ภาพ: Registry.digitalocean.com/nestjs-registry/nestjs-api
พอร์ต:
- พอร์ตคอนเทนเนอร์: 3001
envจาก:
- ความลับอ้างอิง:
ชื่อ: api-env
---
รุ่น api: networking.k8s.io/v1
ชนิด: ทางเข้า
ข้อมูลเมตา:
ชื่อ: nestjs-เข้า
ข้อมูลจำเพาะ:
กฎ:
- โฮสต์: api.mydomain.com
http:
เส้นทาง:
- เส้นทาง: /
pathType: คำนำหน้า
แบ็กเอนด์:
บริการ:
ชื่อ: nestjs-api
ท่า:
จำนวน: 80
นั่นคือภาพ Docker บน Registry.digitalocean.com/nestjs-registry/nestjs-api
จากโหนด:14-alpine3.14 AS BUILD_IMAGE
RUN อัปเดต apk && apk เพิ่มเส้นด้าย curl ทุบตี && rm -rf /var/cache/apk/*
RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | ทุบตี -s -- -b /usr/local/bin
เวิร์กดีอาร์ /usr/src/app
#ติดตั้งการพึ่งพา
RUN เส้นด้าย --frozen-lockfile
สำเนา .
ติดตั้งเส้นด้าย RUN
สร้างเส้นด้าย RUN
RUN npm ลูกพรุน -- การผลิต
RUN /usr/local/bin/node-prune
จากโหนด:14-alpine3.14
ผู้ใช้ 1,000
รัน mkdir -p /home/node/app/
เรียกใช้ mkdir -p /home/node/app/node_modules
รัน mkdir -p /home/node/app/dist
RUN chown -R 1,000:1000 /home/node/app
RUN chown -R 1,000:1000 /home/node/app/node_modules
RUN chown -R 1,000:1000 /home/node/app/dist
WORKDIR /home/node/app
COPY --from=BUILD_IMAGE /usr/src/app/dist /home/node/app/dist
สำเนา --จาก=BUILD_IMAGE /usr/src/app/node_modules /home/node/app/node_modules
เปิดเผย 3001
ENTRYPOINT ["โหนด"]
CMD ["/home/node/app/dist/main.js"]
นั่นคือบันทึกของฉัน nginx-ingress-ตัวควบคุม
29/09/2021 18:37:12 [ข้อผิดพลาด] 590#590: *147263 การเชื่อมต่อ() ล้มเหลว (111: การเชื่อมต่อถูกปฏิเสธ) ขณะเชื่อมต่อกับอัปสตรีม ไคลเอ็นต์: MY_HOME_IP เซิร์ฟเวอร์: api.mydomain.com คำขอ: "GET / HTTP/1.1", อัพสตรีม: "http://10.244.0.229:3001/", โฮสต์: "api.mydomain.com"
29/09/2021 18:37:12 [ข้อผิดพลาด] 590#590: *147263 การเชื่อมต่อ() ล้มเหลว (111: การเชื่อมต่อถูกปฏิเสธ) ขณะเชื่อมต่อกับอัปสตรีม ไคลเอ็นต์: MY_HOME_IP เซิร์ฟเวอร์: api.mydomain.com คำขอ: "GET / HTTP/1.1", อัพสตรีม: "http://10.244.0.229:3001/", โฮสต์: "api.mydomain.com"
29/09/2021 18:37:12 [ข้อผิดพลาด] 590#590: *147263 การเชื่อมต่อ() ล้มเหลว (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 รับพ็อด -o กว้าง
ชื่อ พร้อม สถานะ เริ่มใหม่ อายุ IP โหนด โหนดที่ได้รับการเสนอชื่อ เกตส์ความพร้อม
nestjs-api-6bcccbdbd5-zmdqg 1/1 กำลังทำงาน 0 61m 10.244.0.238 api-wn5e3n2u8-u3j8q <ไม่มี> <ไม่มี>
$ kubectl รับบริการ -o กว้าง
ประเภทชื่อ CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
Nestjs-api ClusterIP 10.245.37.142 <ไม่มี> 80/TCP 3h app=nestjs-api
kubernetes ClusterIP 10.245.0.1 <ไม่มี> 443/TCP 5d6h <ไม่มี>
$ kubectl รับพ็อด -n ingress-nginx -o กว้าง
ชื่อ พร้อม สถานะ เริ่มใหม่ อายุ IP โหนด โหนดที่ได้รับการเสนอชื่อ เกตส์ความพร้อม
ingress-nginx-admission-create-psdn2 0/1 เสร็จสิ้น 0 6h34m 10.244.0.251 api-wn5e3n2u8-u3j8q <ไม่มี> <ไม่มี>
ingress-nginx-admission-patch-x8vvs 0/1 เสร็จสิ้น 1 6h34m 10.244.0.252 api-wn5e3n2u8-u3j8q <ไม่มี> <ไม่มี>
ingress-nginx-controller-68649d49b8-bj7vp 1/1 กำลังทำงาน 0 6h34m 10.244.0.175 api-wn5e3n2u8-u3j8q <ไม่มี> <ไม่มี>
อัปเดต
บันทึกของฉัน main.js
แสดงว่าแอปกำลังฟังพอร์ตอยู่ 3001
{"message":"แอปพลิเคชันทำงานบน: http://127.0.0.1:3001"}
ซึ่งมาจากรหัสต่อไปนี้
// รับ IP ของเซิร์ฟเวอร์และ PORT จากการกำหนดค่า
const ip = process.env.SERVER_IP;
พอร์ต const = parseInt (process.env.SERVER_PORT, 10);
// เริ่มเซิร์ฟเวอร์
รอ app.listen (พอร์ต, ip);
logger.log(`แอปพลิเคชันกำลังทำงานบน: ${await app.getUrl()}`);
logger.log(`สิ่งแวดล้อม: ${environment}`);
นี่คือ vars ที่บันทึกไว้ api-env
เป็นความลับใน k8s
SERVER_IP: 127.0.0.1
SERVER_PORT: 3001
อย่างไรก็ตาม ตามที่ @mdaniel แนะนำ ฉันได้เพิ่มไฟล์ ความสด
ตรงสเป็คของผม การปรับใช้
และ Pod พัง
ข้อมูลจำเพาะ:
ตู้คอนเทนเนอร์:
- ชื่อ: nestjs-api
ภาพ: Registry.digitalocean.com/nestjs-registry/nestjs-api
พอร์ต:
- พอร์ตคอนเทนเนอร์: 3001
livenessProbe:
httpรับ:
พอร์ต: 3001
เส้นทาง: '/'
envจาก:
- ความลับอ้างอิง:
ชื่อ: api-env
ตอนนี้ฉันสับสนจริงๆ มีบางอย่างผิดปกติในการกำหนดค่าของฉัน แต่ฉันไม่รู้ว่าเกิดอะไรขึ้น
ขอบคุณล่วงหน้า.