ใบรับรอง ssl คอนเทนเนอร์ของนักเทียบท่า


88

มีวิธีที่สวยงามในการเพิ่มใบรับรอง ssl ให้กับภาพที่มาจาก docker pull หรือไม่?

ฉันกำลังมองหาวิธีที่ง่ายและทำซ้ำได้ในการเพิ่มไฟล์ลงใน / etc / ssl / certs และเรียกใช้ update-ca-certificate (ควรครอบคลุมอิมเมจของอูบุนตูและเดเบียน)

ฉันใช้นักเทียบท่าบน CoreOS และเครื่อง coreos เชื่อถือใบรับรอง ssl ที่จำเป็น แต่คอนเทนเนอร์นักเทียบท่ามีเฉพาะค่าเริ่มต้นเท่านั้น

ฉันได้ลองใช้docker run --entrypoint=/bin/bashเพื่อเพิ่มใบรับรองแล้วเรียกใช้update-ca-certificatesแต่ดูเหมือนว่าจะแทนที่จุดเข้าอย่างถาวร

ตอนนี้ฉันก็สงสัยเหมือนกันว่าจะสวยกว่าไหมถ้าจะติด/etc/ssl/certsบนคอนเทนเนอร์จากเครื่องโฮสต์ก็อปปี้ การทำเช่นนี้จะทำให้คอนเทนเนอร์เชื่อถือสิ่งเดียวกับโฮสต์โดยปริยาย

ฉันทำงานกับพร็อกซีที่น่ารำคาญซึ่งจะลาออกทุกอย่าง :( ซึ่งทำลาย SSL และทำให้คอนเทนเนอร์แปลก ๆ ที่จะใช้งานได้


3
คุณเคยคิดเกี่ยวกับการสร้าง Dockerfile ที่จะใช้รูปภาพของคุณเพิ่มไฟล์และเรียกใช้ update-ca-certificate หรือไม่? หรือนั่นไม่ใช่สิ่งที่คุณกำลังมองหา?
Céline Aussourd

ฉันได้ทำเช่นนั้นสำหรับบางภาพ ไม่ใช่ทางออกที่เลวร้าย ต้องการให้คุณสร้างภาพทั้งหมดด้วยตัวคุณเอง
Beau Trepp

คำตอบ:


75

ติดตั้งใบรับรองลงบนคอนเทนเนอร์ Docker โดยใช้-v:

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates"

5
ดีทีเดียว หากคอนเทนเนอร์ใช้ ssl_certs รูปแบบเดียวกันคุณไม่จำเป็นต้องใช้บรรทัด update-ca-certificate โฮสต์ก็คงทำไปแล้ว :)
Beau Trepp

2
และถ้าเราสร้างบนคลาวด์ล่ะ?
Ewoks

27

ฉันกำลังพยายามทำสิ่งที่คล้ายกับสิ่งนี้ ขณะที่ความเห็นข้างต้นผมคิดว่าคุณจะต้องการที่จะสร้างภาพใหม่กับที่กำหนดเอง Dockerfile (โดยใช้ภาพที่คุณดึงเป็นภาพฐาน) ใบรับรองของคุณแล้วADD RUN update-ca-certificatesด้วยวิธีนี้คุณจะมีสถานะที่สอดคล้องกันทุกครั้งที่คุณเริ่มคอนเทนเนอร์จากอิมเมจใหม่นี้

# Dockerfile
FROM some-base-image:0.1
ADD you_certificate.crt:/container/cert/path
RUN update-ca-certificates

สมมติว่าdocker buildเทียบกับ Dockerfile ที่สร้าง IMAGE_ID ในขั้นต่อไปdocker run -d [any other options] IMAGE_IDคอนเทนเนอร์ที่เริ่มต้นด้วยคำสั่งนั้นจะมีข้อมูลใบรับรองของคุณ ง่ายและทำซ้ำได้


โดยปกติฉันจะชอบโซลูชัน docker run -v ที่กล่าวถึงในคำตอบอื่น ๆ แต่โซลูชันของคุณยังใช้งานได้หากคุณต้องการใบรับรองระหว่างการสร้างนักเทียบท่า ขอบคุณ!
bastian

10
ฉันจะระมัดระวังในการใส่ใบรับรองลงในภาชนะสาธารณะ มีคนอื่นดึงคอนเทนเนอร์ของคุณและดึงใบรับรองส่วนตัวของคุณออกมาได้
skibum55

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

9
ใบรับรองเป็นความลับตั้งแต่เมื่อใด
techraf

4
เนื่องจากเซิร์ฟเวอร์ของคุณต้องการคีย์ส่วนตัวเพื่อให้ตรงกับใบรับรองที่กำลังเผยแพร่
John Rix

22

ตามที่แนะนำในความคิดเห็นด้านบนหากที่เก็บใบรับรองบนโฮสต์เข้ากันได้กับแขกคุณก็สามารถต่อเชื่อมโดยตรง

บนโฮสต์ Debian (และคอนเทนเนอร์) ฉันทำสำเร็จแล้ว:

docker run -v /etc/ssl/certs:/etc/ssl/certs:ro ...

แล้วจะทำอย่างไรเมื่อสร้างอิมเมจ Docker บนบิลด์เซิร์ฟเวอร์ : /
Ewoks

@Ewoks คุณสามารถโฮสต์ใบรับรองของคุณบน DNS ส่วนตัวและโหลดไว้ในแผนภูมิหางเสือของคุณและคุณสามารถสร้างไดรฟ์ข้อมูลบนคลัสเตอร์ของคุณโดยอัตโนมัติ
Bassam Gamal

2

คุณสามารถใช้เส้นทางสัมพัทธ์เพื่อต่อเชื่อมไดรฟ์ข้อมูลกับคอนเทนเนอร์:

docker run -v `pwd`/certs:/container/path/to/certs ...

สังเกตเครื่องหมายขีดหลังpwdซึ่งให้ไดเร็กทอรีการทำงานปัจจุบันแก่คุณ ถือว่าคุณมีcertsโฟลเดอร์ในไดเร็กทอรีปัจจุบันที่docker runเรียกใช้งาน เหมาะอย่างยิ่งสำหรับการพัฒนาในท้องถิ่นและทำให้โครงการของคุณสามารถมองเห็นโฟลเดอร์ใบรับรองได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.