วิธีการใช้ความลับของนักเทียบท่าที่ไม่มีกลุ่ม Swarm?


29

ขณะนี้เรากำลังใช้งานแอพพลิเคชั่นบนคอนเทนเนอร์ docker เดียวแอพพลิเคชั่นต้องการข้อมูลที่ละเอียดอ่อนทุกประเภทเพื่อส่งผ่านเป็นตัวแปรสภาพแวดล้อม

ฉันวางสิ่งเหล่านั้นบนคำสั่ง run ดังนั้นพวกเขาจึงไม่ได้อยู่ในอิมเมจแล้วบนที่เก็บ แต่ฉันท้ายด้วยคำสั่ง run ที่ไม่ปลอดภัยมาก

ตอนนี้ฉันเข้าใจว่าความลับของนักเทียบท่านั้นมีอยู่แล้วฉันจะใช้งานได้อย่างไรโดยไม่ต้องปรับใช้คลัสเตอร์ หรือมีวิธีอื่นในการรักษาความปลอดภัยข้อมูลนี้หรือไม่?

ด้วยความเคารพ,


6
มีหลายวิธีในการใช้ความลับโดยไม่มี swarm blog.mikesir87.io/2017/05/…
Aleksandr Aksarin

คำตอบ:


6

คุณทำไม่ได้ ... มันไม่สนับสนุนความลับหากไม่มี Swarm เว้นแต่ว่า '' อาจเป็น '' คุณ '' Swarm '' โดยใช้เพียงหนึ่งโหนด

ฉันคิดว่าจะใช้ซอฟต์แวร์ vault ของบุคคลที่สามเช่นนี้:

https://www.vaultproject.io/

แต่หากต้องการใช้ความลับในตู้คอนเทนเนอร์ของคุณจากห้องนิรภัยคุณจะต้องอ่านเอกสาร

หวังว่าสิ่งนี้จะนำคุณไปสู่เส้นทางที่ถูกต้องในการเริ่มต้น


จริงๆแล้วฉันแค่ต้องฉีดความลับเหล่านี้เมื่อสร้างภาชนะพวกเขาไม่จำเป็นต้องอยู่ใน "ความลับ" ภายในภาชนะที่ใช้งานอยู่ดังนั้นฉันคิดว่ามันจะสมเหตุสมผลสำหรับโฮสต์ที่จะสามารถเข้าถึงและใช้ความลับเมื่อเรียกใช้ คำสั่งเรียกใช้นักเทียบท่า, ฉันเดาว่าฉันสามารถเขียนสคริปต์ที่มีจำนวนมากแทนที่และเรียกไปที่ห้องนิรภัย
Juan Sebastian

@JuanSebastian คุณควรตรวจสอบ Docker 'build-args' สำหรับกรณีการใช้งานนั้น
user23390

@JuanSebastian ฉันอาจจะผิด แต่การได้รับ ENV ในท้องถิ่นจะให้สิ่งที่อยู่ในรูปแบบของการสร้าง args .... ไม่แน่ใจ .....
ให้ผลตอบแทน

build-argsไม่รวมอยู่ในอิมเมจสุดท้าย แต่สามารถเข้าถึงได้เฉพาะในช่วงเวลาที่สร้างอิมเมจ ทางออกที่เหมาะสมคือการเขียนความลับไปยังไฟล์บนโฮสต์ (ด้วยสิทธิ์ที่เหมาะสมแน่นอน) จากนั้นปรับระดับเสียงพวกเขาลงในภาชนะนักเทียบท่าของคุณ แอปพลิเคชันของคุณภายในคอนเทนเนอร์สามารถอ่านความลับจากไฟล์เหล่านั้นได้
แบรนดอน

22

ใช่คุณสามารถใช้ความลับถ้าคุณใช้ไฟล์เขียน (คุณไม่จำเป็นต้องเรียกใช้ฝูง)

คุณสามารถใช้ไฟล์เขียนกับนักเทียบท่า-เขียน : มีเอกสาร "ลับ" ในไฟล์นักเทียบท่า-compose.yml

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

หมายเหตุ: ความลับจะไม่ถูกโหลดเข้าสู่สภาพแวดล้อมของตู้ แต่จะถูกติดตั้งที่ / run / secret /

นี่คือตัวอย่าง:

1) โครงสร้างโครงการ:

|
|---    docker-compose.yml
|---    super_duper_secret.txt

2) เนื้อหา docker-compose.yml:

version: "3.6"

services:

  my_service:
    image: centos:7
    entrypoint: "cat /run/secrets/my_secret"
    secrets:
      - my_secret

secrets:
  my_secret:
    file: ./super_duper_secret.txt

3) เนื้อหา super_duper_secret.txt:

Whatever you want to write for a secret really.

4) เรียกใช้คำสั่งนี้จากรูทของโปรเจ็กต์เพื่อดูว่าคอนเทนเนอร์มีการเข้าถึงข้อมูลลับของคุณ (นักเทียบท่าต้องทำงานและติดตั้งนักเทียบท่า):

docker-compose up --build my_service

คุณควรเห็นความลับของคุณออก


คุณสามารถแสดงตัวอย่างการdocker-composeใช้งานความลับได้หรือไม่? เอกสารและความเข้าใจของฉันเกี่ยวกับการใช้งานระบุว่าความลับจะไม่ถูกกำหนดค่าในคอนเทนเนอร์
BMitch

2
ความลับของนักเทียบท่าใช้ได้เฉพาะกับบริการรุม ในการใช้คุณสมบัตินี้ให้พิจารณาปรับตู้คอนเทนเนอร์ของคุณให้ทำงานเป็นบริการ คอนเทนเนอร์แบบ stateful สามารถรันด้วยขนาด 1 โดยไม่ต้องเปลี่ยนรหัสคอนเทนเนอร์ นักเทียบท่า
Alwin Kesler

@BMitch เพิ่มตัวอย่าง หวังว่ามันจะช่วยคุณ! (มันไม่นานมานี้เพราะฉันได้ทำงานกับนักเทียบท่าและสภาพแวดล้อมของฉันก็ค่อนข้างดำเนินต่อไป ... แต่ฉันคิดว่ามันน่าจะทำงานได้โปรดแจ้งให้เราทราบหากฉันพลาดบางอย่าง!)
Lindsay-Needs-Sleep

ฉันไม่สามารถทำซ้ำสิ่งนี้ในบริการของฉันโดยไม่มีฝูง ( docker-compose.ymlบนโหนดเดียว); เมื่อฉันเริ่มต้นภาชนะ/runเท่านั้นมีnginx.pidและไม่มีกำลังแสดงโดยMounts docker inspect $container
giorgiosironi

2
แค่คิดว่าฉันจะเชื่อมโยงไปยังการประชาสัมพันธ์ที่เพิ่มสิ่งนี้ไปยังนักแต่งเพลงเรียบๆ (ไม่มีฝูง) github.com/docker/compose/pull/4368มันมีอยู่ในนั้นจริงๆและจากโค้ดมันดูเหมือนว่าเวอร์ชั่น min สำหรับการเขียนไฟล์คือ 3.1 และ API คือ 1.13.0 รหัสยังอยู่ในปรมาจารย์ปัจจุบัน ( github.com/dnephin/compose/blob/ ...... ) ดังนั้นอย่าคาดหวังว่าจะเป็นรุ่นสูงสุด
ssnobody
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.