Làm thế nào để sử dụng bí mật docker mà không có một cụm swarm?


29

Hiện tại chúng tôi là một ứng dụng đang chạy trên một container docker, ứng dụng cần tất cả các loại dữ liệu nhạy cảm được truyền dưới dạng các biến môi trường,

Tôi đang đặt những thứ đó vào lệnh chạy để chúng không xuất hiện trong ảnh và sau đó trên một kho lưu trữ, tuy nhiên tôi kết thúc bằng một lệnh chạy không an toàn,

Bây giờ, tôi hiểu rằng các bí mật docker tồn tại, tuy nhiên, làm thế nào tôi có thể sử dụng chúng mà không cần triển khai một cụm? hoặc có cách nào khác để bảo mật dữ liệu này không?

Trân trọng,


6
Có một số cách để sử dụng các bí mật mà không cần blog swarm.mikeir87.io/2017/05/
Alexanderr Aksarin

Câu trả lời:


6

Bạn không thể ... Nó không hỗ trợ bí mật nếu không có Swarm. Trừ khi '' có thể là '' bạn '' Swarm '' chỉ sử dụng một nút.

Giải pháp khác là, tôi nghĩ sẽ sử dụng phần mềm kho tiền của bên thứ ba như thế này:

https://www.vaultproject.io/

Nhưng sau đó, để sử dụng các bí mật trong các thùng chứa của bạn từ Vault, bạn sẽ cần phải đọc tài liệu.

Hy vọng điều này đưa bạn đến đúng con đường để bắt đầu.


Trên thực tế tôi chỉ cần tiêm những bí mật này khi tạo các thùng chứa, chúng thực sự không cần phải giữ "bí mật" bên trong các container đang chạy, vì vậy tôi đoán rằng sẽ có ý nghĩa khi chủ nhà có thể truy cập và sử dụng các bí mật khi gọi Docker chạy lệnh, tôi đoán tôi có thể viết một kịch bản với một loạt các thay thế và các cuộc gọi đến vault.
Juan Sebastian

@JuanSebastian bạn nên kiểm tra Docker 'build-args' cho trường hợp sử dụng đó.
user23390

@JuanSebastian Tôi có thể sai, nhưng nhận được ENV địa phương sẽ cung cấp cho bạn những gì bên trong bản dựng .... Không chắc chắn .....
mang lại

build-argskhông được bao gồm trong hình ảnh cuối cùng, nhưng chỉ có thể được truy cập trong thời gian xây dựng hình ảnh. Một giải pháp phù hợp là viết các bí mật vào các tệp trên máy chủ (dĩ nhiên là có quyền thích hợp), sau đó gắn khối lượng chúng vào thùng chứa docker của bạn. Ứng dụng của bạn bên trong container sau đó có thể đọc các bí mật từ các tệp đó
Brandon

22

, bạn có thể sử dụng các bí mật nếu bạn sử dụng tệp soạn thảo . (Bạn không cần phải chạy một bầy).

Bạn sử dụng tệp soạn thảo với docker-compose : có tài liệu về "bí mật" trong tệp docker-compose.yml .

Tôi chuyển sang docker-compose vì tôi muốn sử dụng các bí mật. Tôi hạnh phúc tôi đã làm, nó có vẻ sạch sẽ hơn nhiều. Mỗi dịch vụ ánh xạ tới một container. Và nếu bạn muốn chuyển sang chạy một bầy thay thế, về cơ bản bạn đã ở đó.

Lưu ý: Bí mật không được tải vào môi trường chứa, chúng được gắn vào / run / secret /

Đây là một ví dụ:

1) Cấu trúc dự án:

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

2) nội dung 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) nội dung super_duper_secret.txt:

Whatever you want to write for a secret really.

4) Chạy lệnh này từ thư mục gốc của dự án để thấy rằng container có quyền truy cập vào bí mật của bạn, (Docker phải được chạy và cài đặt docker-compose):

docker-compose up --build my_service

Bạn sẽ thấy đầu ra container của bạn bí mật của bạn.


Bạn có thể cho thấy một ví dụ làm việc của docker-composeviệc sử dụng một bí mật? Tài liệu và sự hiểu biết của tôi về việc thực hiện chỉ ra rằng bí mật sẽ không được cấu hình trong container.
BMitch

2
Bí mật Docker chỉ có sẵn cho các dịch vụ swarm, không phải cho các container độc lập. Để sử dụng tính năng này, hãy xem xét điều chỉnh container của bạn để chạy như một dịch vụ. Các thùng chứa trạng thái thường có thể chạy với tỷ lệ 1 mà không thay đổi mã vùng chứa. bến tàu
Alwin Kesler

@BMitch Đã thêm một ví dụ. Hy vọng nó sẽ giúp bạn! (Đã được một lúc kể từ khi tôi làm việc với docker và môi trường của tôi có nhiều hơn một chút ... nhưng tôi nghĩ việc này sẽ hiệu quả. Xin vui lòng cho tôi biết nếu tôi bỏ lỡ điều gì đó!)
Lindsay-N Nhu-Ngủ

Tôi không thể sao chép điều này trên các dịch vụ của mình mà không có một bầy đàn ( docker-compose.ymltrên một nút); Khi tôi khởi động container /runchỉ chứa một nginx.pidvà không được Mountshiển thị bởi docker inspect $container.
giorgiosironi

2
Chỉ cần nghĩ rằng tôi đã liên kết với PR đã thêm phần này vào docker-compose (không có swarm). github.com/docker/compose/pull/4368 Nó thực sự nằm trong đó và từ mã, có vẻ như phiên bản tối thiểu cho tệp soạn thảo là 3.1 và API là 1.13.0. Mã vẫn ở trong bản chính hiện tại ( github.com/dnephin/compose/blob/ ,), vì vậy sẽ không mong đợi phiên bản tối đa.
ssnobody
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.