Score:0

kubernetes คอนเทนเนอร์ postfix - การตั้งค่าความลับที่เข้ารหัส configmap สำหรับการเชื่อมต่อฐานข้อมูลที่ประสบความสำเร็จ

ธง in

ฉันพยายามเรียกใช้ postfix เป็นคอนเทนเนอร์ใน k8s คอนเทนเนอร์เริ่มต้น (รวมถึง svcs) แต่ config map และความลับของฉันไม่ต้องการให้เล่นได้ดี ฉันลองต่อไปนี้:

  1. ตั้งค่า config map ด้วยผู้ใช้และรหัสผ่านเป็นข้อความธรรมดา ผลลัพธ์: ทำงาน postmap -q someuser@localhost mysql:./virtual_mailbox.cf
  2. เข้ารหัสรหัสผ่านและชื่อผู้ใช้ด้วย base64 (ตามคำสั่ง k8s) อ่านค่าที่เข้ารหัสเหล่านี้ในตัวแปรสภาพแวดล้อมของคอนเทนเนอร์ (envFrom:- secretRef: ชื่อ: postfix-db-access) ลองเชื่อมต่อกับฐานข้อมูลด้วย แผนที่ไปรษณีย์ สำหรับสถานการณ์นี้ config map จะมีลักษณะดังนี้:
  1 api เวอร์ชัน: v1
  2 ประเภท: ConfigMap
  3 ข้อมูลเมตา:
  4 ชื่อ: postfix-db-configs
  5 เนมสเปซ: เมลเซิร์ฟเวอร์
  6 ข้อมูล:
  7 virtual_mailbox.cf: |
  8 ผู้ใช้=$(echo ${POSTFIX_USER} | base64 -d)
  9 รหัสผ่าน=$(echo ${POSTFIX_PASS} | base64 -d)
 10 โฮสต์=database.default.svc.cluster.local
 11 dbname=postfix
 12 แบบสอบถาม=เลือกจดหมายจาก generic_map โดยที่ local_mail='%s' AND active=1;

ผลลัพธ์: ล้มเหลว. ผู้ใช้ '$(echo ${POSTFIX_USER} | base64 -d)' ไม่มีสิทธิ์เข้าถึงฐานข้อมูล

  1. เก็บชื่อผู้ใช้และรหัสผ่านสำหรับผู้ใช้ postfix เป็นข้อความที่ชัดเจนในความลับดังนี้:
  1 api เวอร์ชัน: v1
  2 ประเภท: ความลับ
  3 ข้อมูลเมตา:
  4 ชื่อ: postfix-db-access
  5 เนมสเปซ: เมลเซิร์ฟเวอร์
  6 ประเภท: ทึบแสง
  7 ข้อมูลสตริง:
  8 POSTFIX_USER: ผู้ใช้ Postfix
  9 POSTFIX_PASS: รหัสผ่านบางอย่าง

และบรรทัดที่เกี่ยวข้องใน config map

    user=$(เสียงสะท้อน ${POSTFIX_USER})

ผลลัพธ์: ล้มเหลว โดยที่ผู้ใช้ 'echo ${POSTFIX_USER}) ไม่มีสิทธิ์เข้าถึงฐานข้อมูล' คำขอไม่ประมวลผลตัวแปรสภาพแวดล้อม ซึ่งตั้งค่าไว้อย่างถูกต้อง

การเชื่อมต่อกับฐานข้อมูลและการสืบค้นทำงานได้ดีด้วยคำสั่ง mysql -h database.default.svc.cluster.local -u postfix -p -e 'use postfix;SELECT mail FROM generic_map WHERE local_mail='someuser@localhost' AND active=1;. ฉันได้รับผลลัพธ์ทั้งหมดที่ฉันต้องการและคาดหวัง

คำถามคือ ฉันจะตั้งค่าความลับและ config map ได้อย่างไรเพื่อให้กระบวนการนี้ทำงานและสร้างการเชื่อมต่อกับฐานข้อมูลตามที่ตั้งใจไว้

เงาจริง

in flag
ดูเหมือนว่าคุณกำลังปฏิบัติต่อ `$(echo ${POSTFIX_USER} | base64 -d)` ราวกับว่ามีเชลล์สคริปต์บางตัวที่เรียกใช้ ConfigMaps แต่นั่นไม่เป็นความจริง 100% หากคุณต้องการให้ประมวลผลล่วงหน้าก่อนใช้งาน คุณจะต้องการ `initContainer:` และ `emptyDir:{}` หรือไดรฟ์ข้อมูล "ที่ใช้ร่วมกัน" อื่นๆ ระหว่าง initContainer และคอนเทนเนอร์หลักของคุณ
realShadow avatar
in flag
@mdaniel ขอบคุณ ฉันจะทำคอนเทนเนอร์เริ่มต้นเพื่อตั้งค่าไฟล์เหล่านี้ นั่นสมเหตุสมผลแล้ว
Score:1
ธง tr

นี่คือคำตอบ wiki ของชุมชนที่โพสต์เพื่อให้มองเห็นได้ดีขึ้น อย่าลังเลที่จะขยาย

ทางออกที่เป็นไปได้จาก @mdaniel:

หากต้องการใช้ค่าที่ประมวลผลล่วงหน้าสำหรับ POSTFIX_USER, POSTFIX_PASS และอื่นๆ คุณสามารถใช้ คอนเทนเนอร์เริ่มต้น ด้วย Volume ที่ init container และ application container ใช้ร่วมกัน

ข้อมูลเพิ่มเติมสามารถดูได้ที่ เว็บไซต์ Kubernetes

โพสต์คำตอบ

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