‫Được rồi, bây giờ chúng ta đã xem qua các bí mật và các tính năng cũng như cách thức hoạt động và tất cả những điều đó, chúng ta
‫hãy thực sự xem xét một số thực tế.
‫Vì vậy, những gì tôi có ở đây là, tôi đã thiết lập nhóm 3 nút của chúng ta như trước đây.
‫Tôi đang ở trong một
‫thư mục mẫu 1 bí mật mà bạn sẽ thấy trong repo.
‫Và, tất cả những gì tôi có trong đó là một tệp văn bản. Và trong tệp văn bản đó chỉ là một tên người dùng đơn giản, thậm chí không thực sự
‫là một mật khẩu.
‫Có hai cách để chúng ta thực sự có thể tạo ra một bí mật bên trong Swarm.
‫Và một trong số chúng là cung cấp cho nó một tệp, và một trong số đó là chuyển một giá trị tại dòng lệnh.
‫Vì vậy, chúng ta hãy sử dụng tệp trước. docker bí mật tạo. Và sau đó tôi cần đặt tên cho nó trong cơ sở dữ liệu bí mật.
‫Và tôi sẽ gọi nó là người dùng psql.
‫Rõ ràng là nó không nhất thiết phải trùng tên với tệp. Nhưng tôi sẽ gọi nó như vậy.
‫Và sau đó... Nó trả lại ID, giống như nó làm cho các đối tượng khác. Và hãy tạo một cái khác. Hãy thực sự đưa mật
‫khẩu vào.
‫Và lần này chúng tôi thực sự sẽ lặp lại nó từ dòng lệnh.
‫Nếu bạn thấy những gì tôi đang làm, tôi thực sự đang gõ mật khẩu trong dòng lệnh bằng echo
‫và lặp lại nó vào lệnh tạo.
‫Và lưu ý dấu gạch ngang ở cuối, bởi vì đó là lệnh đọc từ đầu vào chuẩn. Đó là những gì chúng tôi cung cấp
‫cho nó bằng lệnh echo.
‫Bây giờ, tôi nên nói rằng cả hai điều này đều có nhược điểm.
‫Đầu tiên, bạn đang thực sự lưu trữ mật khẩu trên ổ cứng của máy chủ trên máy chủ.
‫Và chúng tôi thực sự sẽ không muốn làm điều đó.
‫Vì vậy, có thể bạn sẽ sử dụng API từ xa từ dòng lệnh cục bộ đó trên máy của mình. Và sau đó chuyển các tệp
‫theo cách đó.
‫Và, trong cái thứ hai, nó thực sự đi vào lịch sử của tệp Bash cho người dùng root của chúng tôi.
‫Vì vậy, về mặt kỹ thuật, nếu ai đó có thể truy cập root, họ thực sự có thể lấy được mật khẩu này.
‫Khi bạn đang xử lý các hệ thống sản xuất của riêng mình, bạn sẽ cần xem xét nhiều cách khác nhau để
‫giải quyết hai mối quan tâm tiềm ẩn về bảo mật này.
‫Vì vậy, những gì chúng tôi có ở đây là ... bây giờ, nếu tôi tìm hiểu bí mật về docker, bạn có thể thấy rằng tôi có cả hai điều đó trong đó.
‫Bây giờ, tôi thực sự có thể kiểm tra chúng, nhưng tôi sẽ không bao giờ nhìn thấy mật khẩu hoặc bí mật thực sự.
‫Vì vậy, hãy để tôi chỉ làm người dùng.
‫Nó sẽ không cung cấp cho chúng tôi thông tin, đúng. Bởi vì nếu có được thông tin dễ dàng như vậy thì nó
‫sẽ không thực sự là bí mật.
‫Đúng?
‫Vì vậy, mục tiêu ở đây là một khi bạn đưa bí mật vào hệ thống, nó sẽ được lưu trữ trong cơ sở dữ liệu. Và thứ duy nhất có quyền truy cập vào
‫các bí mật được giải mã sẽ là các thùng chứa và dịch vụ mà chúng
‫tôi gán cho nó.
‫Vì vậy, chúng ta hãy làm điều đó ngay bây giờ.
‫Tôi sẽ tạo một dịch vụ theo cách thủ công.
‫dịch vụ docker tạo. Tôi sẽ gọi nó là psql. Và chúng tôi sẽ vạch ra bí mật cho nó. Về cơ bản, chúng tôi đang nói với lệnh
‫tạo này, lấy bí mật này được gọi là tên cụ thể này ...
‫Tôi cũng có thể sử dụng ID của bí mật ... và gán nó cho dịch vụ này, để tất cả các vùng chứa trong dịch
‫vụ này sẽ thấy bí mật này.
‫Được rồi.
‫Và sau đó đưa người dùng vào đó, sau đó tôi phải thực hiện lại để lấy mật khẩu.
‫Được chứ.
‫Vì vậy, điều này ánh xạ các bí mật cho dịch vụ, để chúng hiển thị dưới dạng tệp bên trong vùng chứa.
‫Nhưng nó không cho cơ sở dữ liệu postgres biết rằng chúng tôi đang tạo từ hình
‫ảnh này cách sử dụng những bí mật đó.
‫Vì vậy, thông thường, chúng ta cần làm gì đó với cấu hình của hình ảnh.
‫Và trong trường hợp này, các hình ảnh chính thức từ Docker Hub đã ổn định trên một
‫tiêu chuẩn mà bạn sử dụng các biến môi trường. Tuy nhiên, thay vì chuyển một cái gì đó có thể là mật khẩu postgres, điều đó sẽ khó sử
‫dụng với một tệp.
‫Chúng tôi thực sự phải đưa tệp vào biến môi trường và đó là một chút
‫khó khăn.
‫Vì vậy, họ có tiêu chuẩn ở đó, nếu bạn chỉ định một tệp ... và đây sẽ là con đường ... vì vậy nó sẽ là bí mật chạy, và
‫sau đó là tên, phải không? Vì vậy, psql vượt qua, tên của bí mật.
‫Nếu tôi làm điều đó, đó thực sự là trong phần khởi động của hình ảnh sẽ tìm kiếm biến môi trường này đang
‫được điền.
‫Và nếu đúng như vậy, nó sẽ kéo tệp đó vào và lưu trữ trong biến môi trường. Nội dung thực tế của tệp
‫đó.
‫Đây là một cách thực sự dễ dàng để tiêu thụ những bí mật có trong các tập tin.
‫Nhưng nó có nghĩa là những hình ảnh bạn sử dụng cần phải có tiêu chuẩn này.
‫Chúng tôi cũng có thể làm điều tương tự cho người dùng.
‫Hy vọng rằng, điều này có ý nghĩa với bạn. Khi tôi tạo dịch vụ,
‫nó sẽ làm điều thông thường mà nó làm khi đưa ra yêu cầu lập lịch cho một vùng chứa mới.
‫Nó sẽ tạo một cơ sở dữ liệu Postgres và nó sẽ chuyển nó
‫các biến môi trường cho vị trí của hai bí mật đó.
‫Và sau đó nó sẽ lập bản đồ, ở dạng tạm thời, nó thực sự sẽ lập bản đồ ở dạng tệp trông giống như vậy.
‫Nhưng một lần nữa, nó thực sự chỉ là một hệ thống tệp RAM hoặc một tmpfs.
‫Hãy đi xem những gì chúng ta có thể thấy trong đó.
‫Vì vậy, tôi thực hiện một psql dịch vụ docker và điều đó sẽ cho chúng tôi biết nó đang chạy trên nút nào.
‫Được rồi, nó đang chạy trên nút này.
‫Hãy làm một giám đốc điều hành để xem những gì chúng ta có thể thấy bên trong vùng chứa.
‫docker thực thi -it.
‫Và sau đó là tên vùng chứa cụ thể cho dịch vụ đó, và sau đó bash.
‫Được rồi.
‫Bây giờ chúng ta có thể thực hiện bí mật ls on run, và bạn sẽ thấy chúng tôi lấy hai tệp ở đó.
‫Và nếu tôi làm một con mèo trên người dùng psql, chúng tôi thấy giá trị. Nó đã làm việc.
‫Và nếu chúng ta nhìn vào nhật ký của psql đó, chúng ta thực sự biết nó hoạt động. Bởi vì nếu nó không ... nếu nó không có các tệp
‫đó, cơ sở dữ liệu thực tế sẽ tiếp tục tự tạo lại và không thể hoạt động vì
‫nó không có mật khẩu và tên người dùng để tạo cơ sở dữ liệu.
‫Nếu bạn thực hiện lại ps dịch vụ docker, những gì bạn sẽ thấy nếu nó không hoạt động chính xác trong một kịch bản cơ sở dữ liệu,
‫là cơ sở dữ liệu sẽ thực sự bị lỗi. Và nó sẽ tiếp tục khởi động lại và bạn sẽ thấy các
‫vùng chứa mới được tạo ở đây.
‫Vì vậy, bây giờ chúng tôi đã thực sự gán nó vào đó, chúng tôi thực sự có thể sử dụng bản cập
‫nhật dịch vụ docker để xóa bí mật. Vì vậy, cập nhật dịch vụ docker --secret-rm.
‫Ngoài ra còn có thêm bí mật. Nhưng nếu tôi loại bỏ một trong những bí mật này thì
‫điều thực sự sẽ xảy ra, nó sẽ triển khai lại vùng chứa. Bởi vì bí mật là một phần của thiết kế bất biến của dịch vụ.
‫Nếu bất kỳ thứ gì trong vùng chứa phải thay đổi cho dịch vụ, dịch vụ sẽ không đi vào và thay
‫đổi thứ gì đó bên trong vùng chứa. Nó thực sự sẽ dừng vùng chứa và triển khai lại một vùng chứa mới.
‫Rõ ràng, điều đó không lý tưởng cho cơ sở dữ liệu. Vì vậy, chúng tôi sẽ phải đưa ra một kế hoạch khác về
‫cách chúng tôi cập nhật mật khẩu cơ sở dữ liệu.
‫Và đó là điều chúng ta có thể nói sau.
‫Hiện tại, tôi chỉ muốn bạn biết rằng bạn có thể xóa chúng và thêm những cái bổ sung vào dịch vụ hiện có.
‫Nó chỉ sẽ tạo lại vùng chứa khi bạn làm điều đó.