LProbe: เครื่องมือครบวงจรสำหรับตรวจสอบสถานะภายในเครื่องอย่างปลอดภัย ลิงก์ไปยังหัวข้อ

แม้แอปจะยังทำงานอยู่ ก็ไม่ได้หมายความว่าทำงานถูกต้องเสมอไป FivexL จึงพัฒนา LProbe ซึ่งเป็นโซลูชันโอเพนซอร์สสำหรับตรวจสอบสถานะคอนเทนเนอร์ภายในเครื่องโดยอัตโนมัติและปลอดภัยก่อนระบบล้มเหลว ตัวอย่างชัดเจนคือแอปค้างรอโดยไม่หมดเวลา แอปไม่ได้ล่มแต่ไม่เคยได้รับการตอบกลับ หากไม่มีการแจ้งเตือนเมื่อระบบไม่ตอบสนองภายในเวลาที่กำหนด เช่น 30 วินาที คุณอาจไม่ทราบว่ามีปัญหา การตรวจสอบสถานะจึงจำเป็นเพื่อยืนยันว่าแอปทำงานถูกต้อง

การตรวจสอบสุขภาพคืออะไร? ลิงก์ไปยังหัวข้อ

การตรวจสอบสุขภาพคือกระบวนการตรวจสอบว่าทรัพยากรเฉพาะภายในคอนเทนเนอร์ของคุณทำงานถูกต้องหรือไม่ คำสั่งจะทำการตรวจสอบสุขภาพเป็นประจำภายในช่วงเวลาที่กำหนดและแจ้งเตือนคุณหากระบบล้มเหลว นี่คือวิธีการทำงานของ LProbe
สมมติว่าคุณต้องตรวจสอบว่าแอปเข้าถึงฐานข้อมูลหรือ bucket และเขียนข้อมูลได้หรือไม่ LProbe จะรันคำสั่งอัตโนมัติตามช่วงเวลาที่กำหนดเพื่อยืนยันว่าคอนเทนเนอร์ทำงานปกติ หากไม่ปกติ ระบบ orchestrator สามารถหยุดและสร้างคอนเทนเนอร์ใหม่ได้

หมายเหตุสั้น ๆ: ข้อมูลทั้งหมดต่อไปนี้เกี่ยวข้องกับทั้ง API และ Web Services LProbe ยังสามารถครอบคลุมความต้องการส่วนใหญ่ของทั้งสองประเภท เนื่องจากมันไม่ครอบคลุมความต้องการของแอปที่ไม่มีอินเทอร์เฟซเลย

ปัญหาได้รับการแก้ไขอย่างไรก่อน LProbe? ลิงก์ไปยังหัวข้อ

ปัจจุบันมีวิธีดั้งเดิมหลายวิธีในการรันการตรวจสอบสุขภาพ: คำสั่ง curl หรือ wget แม้ว่าคุณจะไม่มีคำสั่งเหล่านี้ คู่มือจะแนะนำให้คุณติดตั้งและรันคำสั่งเหล่านี้ โดยไม่คำนึงถึงข้อควรระวังด้านความปลอดภัยทั้งหมด
ในความเป็นจริง คุณ ทำลายการป้องกันแอปของคุณ อย่างมาก เนื่องจากคำสั่ง wget/curl ถูกใช้ในสคริปต์และอนุญาตให้ดาวน์โหลดยูทิลิตี้อื่น ๆ เพื่อโจมตีเพิ่มเติม หากผู้โจมตีอยู่ภายในระบบไฟล์ของคุณและมันไม่ใช่แบบอ่านอย่างเดียว พวกเขาจะสามารถดาวน์โหลดข้อมูลจากเว็บและรันโค้ดหรือไฟล์ไบนารีได้—ทั้งหมดนี้เปิดโอกาสให้ผู้บุกรุกเข้ามาได้อย่างมากมาย
หากคุณต้องการตัวเลือกที่ปลอดภัยกว่า คู่มือจะแนะนำให้คุณเขียนโค้ดของคุณเอง ซึ่งต้องใช้เวลาและความพยายามเพิ่มเติมในการรวมและดูแลรักษา FivexL ได้พัฒนาโซลูชันตรวจสอบสุขภาพภายในเครื่องที่เชื่อถือได้และปลอดภัย - LProbe มาดูกันว่าทำไมมันจึงสะดวกและปลอดภัยกว่าทางเลือกการตรวจสอบสุขภาพที่มีอยู่

วิธีการตรวจสอบสุขภาพแบบดั้งเดิมสำหรับ Docker, ECS และ Kubernetes (กรณี mTLS และ Istio) ลิงก์ไปยังหัวข้อ

ถ้าคุณค้นหาใน Google ว่าจะทำการตรวจสอบสุขภาพภายในเครื่องอย่างไร ผลลัพธ์อันดับต้น ๆ จะบอกเป็นเสียงเดียวกันว่า wget และ curl คือทางเลือกที่ดีที่สุด เราได้ทำการวิจัยเพื่อดูว่ามีอะไรเสนอสำหรับการตรวจสอบสุขภาพภายในเครื่องต่าง ๆ

Docker Health Check
ถ้าคุณต้องการคำสั่งเพื่อให้ docker ตรวจสอบว่าคอนเทนเนอร์ของคุณทำงานถูกต้องหรือไม่ 99% ของคู่มือแนะนำให้ใช้ CMD curl หรือ CMD wget แบบดั้งเดิม เช่นใน ตัวอย่างนี้

HEALTCHECK --interval=5m --timeout=3s \
    CMD curl -f http://localhost/ || exit 1

ในแง่ของโค้ด คุณต้องใส่ใจผลลัพธ์ กำหนดเพียงสองผลลัพธ์เท่านั้น: 0 - สำหรับการตรวจสอบสุขภาพที่สำเร็จ หมายความว่าทุกอย่างทำงานตามที่ควรจะเป็น และ 1 - สำหรับสถานะไม่ดี

Amazon ECS Health Check
เอกสาร Amazon ECS Container เน้นคำสั่งเดียวกันและกำหนดสองตัวเลือกในการรันคำสั่งตรวจสอบสุขภาพ:

  • ตัวเลือกเริ่มต้นคือ CMD ซึ่งรันโดยตรง เป็นตัวเลือกเดียวสำหรับคอนเทนเนอร์ที่ไม่มี shell
  • อีกตัวเลือกคือ CMD-SHELL ซึ่งรันด้วย shell เริ่มต้นของคอนเทนเนอร์

ทำไมเราถึงพูดถึงเรื่องนี้? เอกสารมีตัวอย่าง CMD-SHELL เพียงตัวอย่างเดียว และตัวอย่างนี้ก็ใช้เครื่องมือ curl คุณอาจลองค้นหาข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสุขภาพสำหรับคอนเทนเนอร์ใน re:post แต่คุณก็ยังจะพบคำแนะนำ CMD-SHELL + curl/wget เช่นเดิม นี่คือตัวอย่างหนึ่ง ตัวอย่าง
ทั้งหมดนี้พิสูจน์อีกครั้งว่าคำสั่ง curl และ wget ฝังลึกอยู่ในความคิดของผู้คนอย่างมาก

Kubernetes Health Check
Kubernetes มี ฟีเจอร์ในตัว สำหรับรันการตรวจสอบสุขภาพโดยไม่ต้องใช้ความพยายามเพิ่มเติม คุณสามารถเริ่มต้นด้วยคำสั่ง HTTP-get หรือรัน gRPC liveness probe สำหรับ Kubernetes v. 1.24 ซึ่งไม่สามารถใช้ได้อีกต่อไปเมื่อคุณเพิ่ม Istio Sidecar พร้อม mTLS เพราะ liveness probes จะทำงานนอก service mesh

อีกครั้งที่แนวทางมาตรฐานพึ่งพา wget โดยเรียกผ่าน exec เพื่อรับผลการตรวจสอบสถานะ

โซลูชันตรวจสอบสุขภาพที่ ChatGPT แนะนำคืออะไร? ลิงก์ไปยังหัวข้อ

แม้แต่ AI ก็ไม่สามารถหาตัวเลือกที่ดีกว่าการใช้คำสั่งที่ไม่ปลอดภัยหรือเครื่องมือของบุคคลที่สามที่มีช่องโหว่ต่อผู้บุกรุก เพื่อพิสูจน์เรื่องนี้ เราได้ถาม ChatGPT เกี่ยวกับโซลูชันตรวจสอบสุขภาพ ทีมงาน FivexL ขอคำแนะนำดังนี้:
“ฉันต้องการให้คุณทำหน้าที่เป็น Cloud Engineer ที่เน้น AWS และความปลอดภัยของ Container คุณจะให้คำแนะนำเกี่ยวกับ Docker Containers และ Dockerfiles และช่วยสร้าง Dockerfile ที่ปลอดภัยที่สุด และมันจะไม่ใช่ไฟล์ว่าง คำขอแรกของฉันคือ “ฉันต้องการ Dockerfile ที่มีคำสั่ง HEALTHCHECK อยู่ในนั้น โปรดใช้เครื่องมือหรือคำสั่งที่ปลอดภัยที่สุดในการรันการตรวจสอบสุขภาพ”
นี่คือสิ่งที่ ChatGPT แนะนำ:

FROM alpine:latest
RUN apk add --no-cache curl
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
  CMD curl -f http://localhost/ || exit 1
CMD ["/bin/sh"]

Dockerfile นี้ระบุว่าการตรวจสอบสุขภาพควรรันทุก 30 วินาที โดยมี timeout 30 วินาที และช่วงเริ่มต้น 5 วินาที นอกจากนี้ยังระบุว่าการตรวจสอบสุขภาพควรลองใหม่ 3 ครั้งหากล้มเหลว คำสั่ง curl ถูกใช้เพื่อตรวจสอบสถานะของ endpoint http://localhost/ หากคำสั่ง curl ส่งคืนข้อผิดพลาด การตรวจสอบสุขภาพจะล้มเหลวและคอนเทนเนอร์จะถูกพิจารณาว่าไม่แข็งแรง
คุณยังสามารถใช้เครื่องมือหรือคำสั่งอื่น ๆ เพื่อทำการตรวจสอบสุขภาพ ขึ้นอยู่กับความต้องการเฉพาะของคุณ ตัวอย่างเช่น คุณอาจใช้ wget หรือ httpie แทน curl หรืออาจใช้เครื่องมืออย่าง nmap เพื่อสแกนเครือข่าย สุดท้าย การเลือกเครื่องมือหรือคำสั่งจะขึ้นอยู่กับความต้องการเฉพาะของคุณและทรัพยากรที่มีอยู่ภายในคอนเทนเนอร์ของคุณ

โซลูชันเดียวสำหรับทุกคน: LProbe ลิงก์ไปยังหัวข้อ

องค์กรส่วนใหญ่มักเขียนเครื่องมือไบนารีเฉพาะของตนเองและเพิ่มลงใน docker image เพื่อรันการตรวจสอบสุขภาพพร้อมกับรักษาระดับความปลอดภัยที่เหมาะสม แม้ว่าโค้ดจะง่าย แต่ก็ต้องใช้เวลาในการเขียนและดูแลรักษา เพื่อทำงานนี้ให้เสร็จสิ้นครั้งเดียวและตลอดไป เราที่ FivexL ได้สร้าง LProbe — เครื่องมือรันตรวจสอบสุขภาพแบบโอเพนซอร์ส
ด้วยชื่อที่มาจาก “local probe” LProbe สามารถเป็นเครื่องมือรันตรวจสอบสุขภาพครบวงจรสำหรับทุกสตาร์ทอัพที่ต้องการมุ่งเน้นที่ผลิตภัณฑ์หลัก:

  • ผู้ที่ทำคอนเทนเนอร์ที่ปลอดภัยโดยใช้ scratch image ที่ไม่มี shell หรือยูทิลิตี้อื่น ๆ
  • ผู้ที่ใช้ ECS
  • ผู้ที่ใช้ Kubernetes กับ Istio และต้องทนกับ CMD-probe

สิ่งที่ดีที่สุด — มันคือโซลูชันโอเพนซอร์สพร้อมใช้งานเพื่อรันการตรวจสอบสุขภาพของคุณอย่างปลอดภัย ตอนนี้รองรับ สองโปรโตคอล: HTTP และ GRPC โปรโตคอลหลังได้รับการออกแบบโดยใช้ Grpc health probe ที่ Google เพิ่มเข้ามาใน Kubernetes 1.23 ตามคำขอของคุณ เราสามารถเพิ่มโปรโตคอลอื่น ๆ เช่น Apache JServ Protocol ได้
ในอนาคตอันใกล้นี้ เราวางแผนที่จะพัฒนาฟังก์ชันของเครื่องมือต่อไปเพื่อให้ตอบสนองความต้องการของบริษัทให้มากที่สุด หากคุณมีข้อกำหนดเฉพาะหรือไอเดียในการทำให้ LProbe ดีขึ้น โปรดอย่าลังเลที่จะแบ่งปันความคิดเห็นของคุณ
เราจะดีใจมากหากคุณร่วมมือกับเราเพื่อความปลอดภัยของการตรวจสอบสุขภาพภายในเครื่อง และเราจะขอบคุณหากคุณ ให้คะแนน LProbe บน GitHub เพื่อส่งเสริมความน่าเชื่อถือในชุมชนด้วยเช่นกัน