ข้ามไปยังเนื้อหาหลัก

การโปรโมตอิมเมจ (เกตก่อนแท็ก)

เมื่อนโยบายความปลอดภัยอยู่ในโหมด Enforce Loha จะยังไม่ปล่อยอิมเมจใหม่จนกว่าเกตความปลอดภัยสุดท้ายจะผ่าน บิลด์จะพุชอิมเมจไปที่แท็กชั่วคราว loha-q-* ในรีโพสิทอรีเดียวกันก่อน เมื่อเกตผ่าน Loha จะย้ายแท็กที่คุณระบุไว้ (เช่น :main หรือ :latest) ไปยังอิมเมจนั้นพอดี หากเกตบล็อกบิลด์ แท็กที่คุณระบุจะยังชี้อิมเมจเดิม

ทุกระบบที่ดึงอิมเมจด้วยแท็ก เช่น เซิร์ฟเวอร์ที่รัน docker pull คลัสเตอร์ที่ตั้ง imagePullPolicy: Always หรือเครื่องมือ GitOps ที่เฝ้าดูแท็ก จะเห็นเฉพาะอิมเมจที่ผ่านเกตแล้วเท่านั้น

ความพร้อมใช้งาน

การโปรโมตอิมเมจอยู่หลังแฟล็กฟีเจอร์ของเวิร์กสเปซ หากแท็บ Security ของบิลด์ไม่มีส่วน การโปรโมตอิมเมจ แสดงว่ายังไม่ได้เปิดใช้งานสำหรับเวิร์กสเปซของคุณ

ใช้เมื่อใด​

ขั้นตอนอิมเมจ (buildah-build หรือ docker-build) ต้องเป็นไปตามเงื่อนไขทั้งหมดนี้:

  • นโยบายความปลอดภัยของเวิร์กสเปซอยู่ในโหมด Enforce โหมด Observe และ Off จะพุชเหมือนเดิมทุกประการ
  • ขั้นตอนนั้นพุชไปยังรีจิสทรีที่ผู้ดูแลระบบรองรับการสแกนแบบ managed และเวิร์กสเปซมีข้อมูลรับรองของตัวเองสำหรับรีจิสทรีนั้น ที่ ตั้งค่า → รีจิสทรี Loha ใช้ข้อมูลรับรองนั้นในการย้ายแท็ก
  • IMAGE ของขั้นตอนระบุแท็ก (หรือไม่ระบุ ซึ่งหมายถึง latest) ไม่ใช่ digest และไม่มี ${VARIABLE} ใน IMAGE ที่รู้ค่าเฉพาะตอนรันขั้นตอนเท่านั้น
  • ขั้นตอนนั้นเป็นหนึ่งใน 10 ขั้นตอนอิมเมจแรกของ pipeline ขั้นตอนอิมเมจหลังจากลำดับที่สิบจะไม่ถูกโปรโมตเลย

ภายใต้โหมด Enforce ขั้นตอนที่ไม่เข้าเงื่อนไขจะพุชไปที่แท็กที่คุณระบุโดยตรง และบิลด์จะแสดงคำเตือน PROMOTION_UNAVAILABLE พร้อมชื่อขั้นตอน ในโหมด Observe และ Off ขั้นตอนเหล่านี้จะไม่มีคำเตือน

สิ่งที่คุณจะเห็น​

แท็บ Security ของบิลด์มีส่วน การโปรโมตอิมเมจ:

สถานะความหมาย
รอผลเกตอิมเมจอยู่ที่แท็ก loha-q-* และเกตยังไม่ตัดสิน
กำลังโปรโมตเกตผ่านแล้ว Loha กำลังย้ายแท็กของคุณ
โปรโมตไปที่ :tag แล้วแท็กของคุณชี้อิมเมจที่ผ่านเกตแล้ว
ถูกระงับไม่ได้ย้ายแท็ก พร้อมเหตุผล (เช่น เกตบล็อก)
โปรโมตไม่สำเร็จLoha ย้ายแท็กไม่ได้ Job ที่ล้มเหลวจะถูกลองใหม่ ส่วนข้อมูลรับรองของรีจิสทรีที่หายไปหรือรีจิสทรีที่ไม่รองรับจะล้มเหลวทันที แก้ไขข้อมูลรับรองแล้วกด ลองใหม่

loha builds security <build-id> แสดงรายการเดียวกัน

หากบิลด์ไม่สำเร็จ แถวที่ยังรออยู่จะแสดงเป็น ถูกระงับ ประมาณ 10 นาทีหลังบิลด์จบ

อิมเมจที่ถูกระงับจะไม่ถูกโปรโมตเลย เพราะไม่ผ่านเกต ให้แก้ไขปัญหาที่พบแล้วบิลด์ใหม่

ข้อควรทราบ​

  • ขั้นตอนถัดไปใน pipeline เดียวกัน แท็กจะย้ายหลังจากทั้งบิลด์ผ่านเกต ขั้นตอนถัดไปที่ดึง app:main จึงยังได้อิมเมจเดิม ให้ใช้ผลลัพธ์ IMAGE_URL ของขั้นตอน ($(tasks.<step>.results.IMAGE_URL)) เพื่ออ้างถึงอิมเมจที่บิลด์นี้สร้าง
  • ลายมือชื่อ ลายมือชื่อและ attestation ผูกกับ digest ไม่ใช่แท็ก เมื่ออิมเมจถูกลงลายมือชื่อแล้ว cosign verify <repository>:<tag> จะใช้ได้กับแท็กที่ย้ายแล้ว การลงลายมือชื่ออาจเสร็จหลังแท็กย้ายไปเล็กน้อย
  • บิลด์เก่าไม่เคยแย่งแท็ก บิลด์เก่าจะไม่ย้ายแท็กกลับไปทับบิลด์ใหม่ที่โปรโมตแล้ว การโปรโมตของบิลด์เก่าจะถูกระงับเป็น Superseded และไม่อนุญาตให้ลองใหม่
  • Delivery deploy ด้วย digest จึงไม่ได้รับผลกระทบ
  • แท็ก loha-q-* ยังอยู่ในรีจิสทรีของคุณ Loha ไม่ลบให้ เพราะแต่ละรีจิสทรีลบแท็กต่างกัน ให้ตั้งกฎ retention ในรีจิสทรี เพื่อลบแท็กที่ตรงกับ loha-q-* หลังผ่านไปไม่กี่วัน (เช่น 7 วัน) อย่าลบแท็กที่ deployment ของคุณใช้อยู่
  • ความล้มเหลวปลอดภัยเสมอ หากย้ายแท็กไม่สำเร็จ แท็กจะยังชี้อิมเมจเดิม และไม่มีวันชี้อิมเมจที่ไม่ผ่านเกต