sertifikat ssl kontainer buruh pelabuhan

88

Apakah ada cara elegan untuk menambahkan sertifikat ssl ke gambar yang berasal dari docker pull ?.

Saya mencari cara sederhana dan dapat direproduksi untuk menambahkan file ke / etc / ssl / certs dan menjalankan update-ca-certificate. (Ini harus mencakup gambar ubuntu dan debian).

Saya menggunakan buruh pelabuhan di CoreOS, dan mesin coreos mempercayai sertifikat ssl yang diperlukan, tetapi kontainer buruh pelabuhan jelas hanya memiliki default.

Saya sudah mencoba menggunakan docker run --entrypoint=/bin/bashuntuk kemudian menambahkan sertifikat dan menjalankan update-ca-certificates, tetapi ini tampaknya mengganti titik masuk secara permanen.

Saya juga bertanya-tanya sekarang, apakah akan lebih elegan untuk hanya memasang /etc/ssl/certsdi wadah dari salinan mesin host? Melakukan ini secara implisit akan memungkinkan container untuk mempercayai hal yang sama sebagai host.

Saya sedang bekerja dengan proxy yang mengganggu yang mengundurkan diri semuanya :(. Yang merusak SSL dan membuat penampung agak aneh untuk digunakan.

Beau Trepp
sumber
3
Pernahkah Anda berpikir untuk membuat Dockerfile yang akan menggunakan image Anda, menambahkan file dan menjalankan update-ca-certificate? atau bukankah itu yang Anda cari?
Céline Aussourd
Saya telah melakukan itu untuk beberapa gambar. Ini bukan solusi yang buruk. Apakah mengharuskan Anda untuk membangun semua gambar dengan milik Anda sendiri.
Beau Trepp

Jawaban:

75

Pasang sertifikat ke kontainer Docker menggunakan -v:

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates"
cdrev
sumber
5
Itu cukup bagus. Jika penampung menggunakan gaya ssl_certs yang sama, Anda bahkan tidak memerlukan baris update-ca-certificate, host pasti sudah melakukannya :).
Beau Trepp
2
dan jika kita membangun di cloud?
Ewoks
27

Saya mencoba melakukan sesuatu yang mirip dengan ini. Seperti yang dikomentari di atas, saya rasa Anda ingin membuat image baru dengan Dockerfile kustom (menggunakan gambar yang Anda tarik sebagai gambar dasar), lalu ADDsertifikat Anda RUN update-ca-certificates. Dengan cara ini Anda akan memiliki status yang konsisten setiap kali Anda memulai penampung dari gambar baru ini.

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

Misalkan saja, docker buildDockerfile menghasilkan IMAGE_ID. Selanjutnya docker run -d [any other options] IMAGE_ID, wadah yang dimulai dengan perintah itu akan memiliki info sertifikat Anda. Sederhana dan dapat direproduksi.

shudgston
sumber
Biasanya saya lebih suka solusi docker run -v yang disebutkan dalam jawaban lain. Tetapi solusi Anda juga berfungsi jika Anda memerlukan sertifikat selama pembuatan buruh pelabuhan. Terima kasih!
bastian
10
Saya akan berhati-hati dalam memasukkan sertifikat ke dalam wadah publik mana pun. Orang lain dapat menarik wadah Anda dan mengekstrak sertifikat pribadi Anda.
skibum55
4
Meskipun itu adalah poin yang sangat bagus, solusi di atas tidak mengumumkan apa pun kepada publik. Ini dimaksudkan untuk menambahkan sertifikat Anda sendiri ke dalam gambar yang dibuat secara lokal dan kemudian digunakan secara pribadi. Anda kemudian dapat mendorong gambar yang dihasilkan ke repositori publik, tetapi itu akan menjadi ide yang buruk seperti yang Anda katakan.
shudgston
9
Sejak kapan sertifikat dirahasiakan?
techraf
4
Karena server Anda memerlukan kunci pribadi untuk mencocokkan sertifikat yang diterbitkannya.
John Rix
22

Seperti yang disarankan dalam komentar di atas , jika penyimpanan sertifikat di host kompatibel dengan tamu, Anda dapat langsung memasangnya.

Di host Debian (dan container), saya berhasil melakukan:

docker run -v /etc/ssl/certs:/etc/ssl/certs:ro ...
Jonathon Reinhart
sumber
Jadi apa yang harus dilakukan saat membangun image Docker di server build? : /
Ewoks
@Ewoks Anda dapat meng-host sertifikat Anda pada beberapa DNS pribadi dan memuatnya di dalam bagan helm Anda dan Anda dapat secara otomatis membuat volume pada klaster Anda.
Bassam Gamal
2

Anda dapat menggunakan jalur relatif untuk memasang volume ke penampung:

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

Perhatikan centang kembali pwdyang memberi Anda direktori kerja saat ini. Ini mengasumsikan Anda memiliki certsfolder di direktori saat docker runini yang dijalankan. Agak bagus untuk pengembangan lokal dan menjaga folder certs tetap terlihat oleh proyek Anda.

alltej
sumber