Score:1

แอปพลิเคชันทำงานในเครื่อง แต่ล้มเหลวด้วย 502 ในการรันบนคลาวด์ - "ข้อผิดพลาดการเชื่อมต่ออัปสตรีมหรือยกเลิกการเชื่อมต่อ / รีเซ็ตก่อนส่วนหัว เหตุผลในการรีเซ็ต: ข้อผิดพลาดของโปรโตคอล"

ธง cn

ฉันมีแอปพลิเคชันที่สร้างเป็นอิมเมจ Docker ที่ทำงานได้อย่างถูกต้องในเครื่อง แต่ล้มเหลวใน Google Cloud Run โดยมี "ข้อผิดพลาดในการเชื่อมต่ออัปสตรีมหรือยกเลิกการเชื่อมต่อ/รีเซ็ตก่อนส่วนหัว เหตุผลในการรีเซ็ต: ข้อผิดพลาดของโปรโตคอล"

แอปพลิเคชันกำลังฟัง 0.0.0.0:8080 และไม่ต้องการการตรวจสอบสิทธิ์ฉันใช้งานใน Docker ในเครื่องด้วย

นักเทียบท่ารัน --rm --name myapp -p 8080:8080 myapp:1.0

ด้วย curl ในเครื่อง ฉันได้รับการตอบกลับที่ประสบความสำเร็จใน /

$ curl -v localhost:8080
* พยายาม ::1...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับ localhost (::1) พอร์ต 8080 (#0)
> เก็ท / HTTP/1.1
> โฮสต์: localhost:8080
> User-Agent: curl/7.64.1
> ยอมรับ: */*
>
< HTTP/1.1 200 ตกลง
< ประเภทเนื้อหา: application/json
< ต่างกันไป: แหล่งกำเนิด
< วันที่: วันเสาร์ที่ 24 กรกฎาคม 2021 13:54:11 GMT
< ความยาวเนื้อหา: 2
<
* การเชื่อมต่อ #0 ไปยังโฮสต์ localhost ยังคงอยู่
ตกลง* กำลังปิดการเชื่อมต่อ 0

ฉันได้ปรับใช้สิ่งนี้กับ Google cloud run as a service และเมื่อทำการร้องขอครั้งแรก ฉันเห็นเอาต์พุตบันทึกจากแอปพลิเคชันของฉันในบันทึกการรันบนคลาวด์ซึ่งแสดงว่าได้เริ่มต้นและกำลังฟังบนพอร์ต 8080

อย่างไรก็ตาม คำขอล้มเหลวด้วย

"ข้อผิดพลาดในการเชื่อมต่ออัปสตรีมหรือยกเลิกการเชื่อมต่อ/รีเซ็ตก่อนส่วนหัว เหตุผลในการรีเซ็ต: ข้อผิดพลาดของโปรโตคอล"

เอาต์พุตแบบเต็มจาก curl -v https://cloudrun-srv-stuff.a.run.app/ มีดังนี้

* ลอง 216.239.36.53...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับ cloudrun-srv-lz5wvvl32a-ez.a.run.app (216.239.36.53) พอร์ต 443 (#0)
* ALPN ให้บริการ h2
* ALPN ให้บริการ http/1.1
* ตั้งค่าตำแหน่งการตรวจสอบใบรับรองสำเร็จแล้ว:
* ไฟล์ CA: /etc/ssl/cert.pem
  CApath: ไม่มี
* TLSv1.2 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* TLSv1.2 (IN), การจับมือ TLS, สวัสดีเซิร์ฟเวอร์ (2):
* TLSv1.2 (IN), การจับมือ TLS, ใบรับรอง (11):
* TLSv1.2 (IN), การจับมือ TLS, การแลกเปลี่ยนคีย์เซิร์ฟเวอร์ (12):
* TLSv1.2 (IN), การจับมือ TLS, เซิร์ฟเวอร์เสร็จสิ้น (14):
* TLSv1.2 (ออก), การจับมือ TLS, การแลกเปลี่ยนคีย์ไคลเอนต์ (16):
* TLSv1.2 (ออก), TLS เปลี่ยนรหัส, เปลี่ยนข้อมูลจำเพาะของรหัส (1):
* TLSv1.2 (ออก), การจับมือ TLS, เสร็จสิ้น (20):
* TLSv1.2 (IN), TLS เปลี่ยนรหัส, เปลี่ยนข้อมูลจำเพาะของรหัส (1):
* TLSv1.2 (IN), การจับมือ TLS, เสร็จสิ้น (20):
* การเชื่อมต่อ SSL โดยใช้ TLSv1.2 / ECDHE-ECDSA-CHACHA20-POLY1305
* ALPN เซิร์ฟเวอร์ที่ยอมรับให้ใช้ h2
* ใบรับรองเซิร์ฟเวอร์:
* หัวเรื่อง: C=US; ST=แคลิฟอร์เนีย; L=วิวภูเขา; O=Google LLC; CN=*.a.run.app
* วันที่เริ่ม: 28 มิ.ย. 01:08:46 น. 2021 GMT
* วันหมดอายุ: 20 กันยายน 01:08:45 น. 2021 GMT
* subjectAltName: โฮสต์ "cloudrun-srv-stuff.a.run.app" ตรงกับ "*.a.run.app" ของใบรับรอง
* ผู้ออก: C=US; O=Google Trust Services; CN=จีทีเอส CA 1O1
* ใบรับรอง SSL ตรวจสอบตกลง
* การใช้ HTTP2 เซิร์ฟเวอร์รองรับการใช้งานหลายอย่าง
* เปลี่ยนสถานะการเชื่อมต่อ (ยืนยัน HTTP/2)
* การคัดลอกข้อมูล HTTP/2 ในสตรีมบัฟเฟอร์ไปยังบัฟเฟอร์การเชื่อมต่อหลังจากอัปเกรด: len=0
* ใช้ Stream ID: 1 (จัดการง่าย 0x7f83b4810a00)
> เก็ท / HTTP/2
> โฮสต์: cloudrun-srv-stuff.a.run.app
> User-Agent: curl/7.64.1
> ยอมรับ: */*
>
* เปลี่ยนสถานะการเชื่อมต่อ (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 502
< ความยาวเนื้อหา: 87
< ประเภทเนื้อหา: ข้อความ/ธรรมดา
< วันที่: วันเสาร์ที่ 24 กรกฎาคม 2021 13:58:13 GMT
< เซิร์ฟเวอร์: Google Frontend
< x-cloud-trace-บริบท: 1370fab1a02839b367048f855593cbef/5890123523738625787;o=1
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; แม่=2592000; v="46,43"
<

ขั้นตอนต่อไปในการดีบักนี้คืออะไร

John Hanley avatar
cn flag
1) คุณเปิดใช้งาน Cloud Run **end-to-end** http2 หรือไม่ 2) แสดงคำสั่งปรับใช้ gcloud 3) แสดงรหัสที่ตั้งค่าฟังแอปพลิเคชัน 4) ตรวจสอบบันทึก Cloud Run สำหรับบริการนี้ 5) เพิ่มตัวเลือกบรรทัดคำสั่ง curl **--http1.1** และทดสอบอีกครั้ง
cn flag
คำตอบของ John ข้างต้นคือปัญหา - เปิดใช้งาน http2 ตั้งแต่ต้นจนจบ แต่รหัส Go ของฉันไม่รองรับ H2C
Score:5
ธง cn

John Hanely's response to my question identified the issue. https://cloud.google.com/run/docs/configuring/http2#console allowed me to disable http/2 end-to-end, and this resolved the issue.

za flag
คอนโซล GCP อธิบายตัวเลือกนี้ง่ายๆ ว่า "เปิดใช้งานการเชื่อมต่อ http/2: การเชื่อมต่อ HTTP/2 ไปยังการแก้ไขนี้จะเปิดใช้งาน" มันไม่ได้บอกว่ามันจบสิ้น และฉันสงสัยว่ามีกี่คนที่เจอปัญหานี้เพราะเรื่องนั้น
Reza avatar
pk flag
ฉันมีปัญหาเดียวกัน การเปลี่ยนตัวเลือกนั้นและการปรับใช้ใหม่ไม่สามารถแก้ปัญหาได้
คำถามนี้เป็นภาษาอื่นๆ:

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา