Cấu hình VPN chỉ tồn tại qua lần tạo lại container nếu bạn gắn nó bằng mount
Tệp được sửa bên trong một container đang chạy nằm trong một lớp sẽ biến mất. Hãy so sánh bind mount, volume và secret, sau đó tạo lại và xác minh bốn điều.
Bạn sửa cấu hình WireGuard bên trong một container đang chạy, nó hoạt động, và lần cập nhật image tiếp theo xóa nó đi. Không có gì bị cấu hình sai. Tệp nằm trong lớp ghi được của container, lớp này chỉ tồn tại cho phiên bản container đó. Phép so sánh quan trọng không phải là dùng công cụ nào, mà là triển khai của bạn khai báo những đầu vào nào. Mọi thứ bạn sửa bằng tay là một đầu vào mà triển khai không biết.
Hai loại trạng thái, một loại dùng một lần
Một container có một lớp ghi được cho các thay đổi thực hiện lúc chạy, và lớp đó bị bỏ đi khi container được thay thế. Nó không phải kho cấu hình và không phải bản sao lưu. Image cộng với các đầu vào được khai báo là toàn bộ định nghĩa của những gì đang chạy.
Hãy hỏi tệp VPN nào của bạn là đầu vào được khai báo và tệp nào là sự tình cờ:
docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpnDiff liệt kê những gì đã thay đổi trong lớp ghi được, và đó chính xác là tập hợp những thứ sẽ biến mất. Danh sách mount cho thấy những gì còn lại. So sánh hai thứ đó trả lời câu hỏi trước khi bạn mất bất cứ thứ gì.
Bind mount, volume có tên hoặc secret: mỗi thứ bảo vệ điều gì
Cả ba đều có thể chứa một hồ sơ VPN, và chúng khác nhau ở việc ai có thể đọc nó và điều gì xảy ra khi thay thế.
| Mechanism | Survives recreation | Who can read it |
|---|---|---|
| Writable layer | No | Anyone with container access, until it is gone |
| Bind mount | Yes, while the host path exists | Whatever the host permissions allow |
| Named volume | Yes, until the volume is removed | Managed by the runtime |
| Secret | Yes, as a declared input | The container process, by design |
Một bind mount ánh xạ một đường dẫn của máy chủ, vì vậy tệp được bảo vệ như đường dẫn đó và hiển thị như quyền của máy chủ cho phép. Một volume có tên được runtime quản lý và tồn tại qua việc xóa container, khiến nó trở thành lựa chọn mặc định an toàn hơn cho trạng thái mà triển khai sở hữu. Một cơ chế secret dành cho tài liệu mà bạn không muốn đặt trong image hay biến môi trường.
Đừng coi mọi biến môi trường và mọi tệp của máy chủ là mức bảo vệ tương đương, vì chúng không như vậy.
Sửa bên trong container chính là cái bẫy
Cái bẫy không phải là công cụ, mà là hướng của việc sửa. Một thay đổi được thực hiện bên trong container đang chạy là vô hình với triển khai, nên lần tạo lại tiếp theo lặng lẽ hoàn nguyên nó và triệu chứng trông như một hồi quy trong image. Nếu bạn phải thay đổi gì đó ở đó để chẩn đoán, hãy sao chép nó ra ngay và đặt vào đầu vào được khai báo. Sau đó tạo lại để chứng minh rằng triển khai tái tạo được nó.
Một hồ sơ có thể mang khóa riêng và tài liệu tài khoản, khiến bản sao lưu của tệp đó trở thành công việc xử lý bí mật thay vì sao chép tệp. Hãy giữ quyền sở hữu và quyền truy cập đọc giới hạn trong tiến trình thực tế của container, thay vì mở rộng một thư mục của máy chủ để lỗi quyền biến mất.
Chính việc mở rộng đó biến sự tiện lợi trong container thành sự phơi bày của máy chủ.
Tạo lại có chủ đích, sau đó xác minh bốn điều
Ghi lại phiên bản image, thiết bị và khả năng cần thiết, kết nối mạng và các đầu vào lâu dài. Danh sách thiết bị và khả năng đặc biệt quan trọng với một container VPN, vì đường hầm cần thiết bị mạng và đặc quyền để cấu hình nó.
Xác nhận trạng thái chạy được tạo ra nào nên được dựng lại thay vì lưu lại. Các khóa mà đường hầm tạo ra ở lần khởi động đầu tiên là trạng thái, và việc giữ chúng hay tạo lại là quyết định có hệ quả với mọi peer biết khóa công khai cũ.
Sau một lần tạo lại có kiểm soát, hãy xác minh danh tính, định tuyến, DNS và khối chặn khi lỗi theo yêu cầu. Một tiến trình khởi động không lỗi không chứng minh được điều nào trong bốn điều đó. Hãy kiểm tra khi đường hầm đang hoạt động và kiểm tra lại sau khi bạn dừng nó, vì khối chặn khi lỗi chỉ lộ ra khi đường hầm biến mất.
Giữ bản sao khôi phục bên ngoài container
Giữ một bản sao để khôi phục sống độc lập với container, và thử khôi phục nó theo quy trình đã ghi lại. Một bản sao lưu chưa được kiểm tra của hồ sơ VPN chỉ là hy vọng, đặc biệt khi đường khôi phục liên quan đến các quyền mà tiến trình container cần.
Nếu một container sở hữu VPN bị thay thế, hãy điều phối các ứng dụng chia sẻ ngăn xếp mạng của nó trong vòng đời được runtime hỗ trợ.
Sự điều phối đó là khác biệt giữa một lần khởi động lại và một lần gián đoạn. Triển khai nên mô tả cấu hình đến từ đâu, và tài liệu về volume là nơi để kiểm tra những gì runtime thực sự lưu giữ.