Namespaces: ranh giới nhìn thấy
Vì sao process trong container thấy filesystem và network khác host.
Nắm bản chất
Linux namespaces cô lập các dạng tài nguyên: PID, mount, network, UTS, IPC, user và cgroup namespaces. Một tiến trình trong PID namespace có thể thấy mình là PID 1 dù host gán một PID khác. Network namespace chứa interfaces, routing và socket tables riêng.
Namespaces cô lập góc nhìn, không tự đặt quota tài nguyên. Để hạn chế mức CPU/memory tiêu thụ cần cgroups. User namespaces có thể ánh xạ UID trong container sang UID khác ở host; điều này cải thiện mô hình bảo vệ khi được cấu hình đúng.
Luồng hoạt động
Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?
Lệnh & cấu hình mẫu
docker run -d --name ns-demo alpine:3.20 sleep 600
PID=$(docker inspect -f '{{.State.Pid}}' ns-demo)
echo "Host PID=$PID"
ls -l /proc/$PID/ns/
docker exec ns-demo ps -ef
docker rm -f ns-demo
Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.
Bài tập 10–20 phút
So sánh PID của container trên host với PID thấy bên trong. Nếu host có
nsenter và quyền thích hợp, dùng nó chỉ trên máy lab để kiểm
tra namespace tương ứng.
Lỗi dễ mắc
Không kết luận container “an toàn như VM” chỉ vì nó có PID namespace. Container vẫn chia sẻ kernel; privileged mode làm suy yếu nhiều lớp cách ly.
Tự kiểm tra
Namespace nào giúp mỗi container có bảng routing riêng?Xem đáp án ↗
Network namespace.
Học thêm qua lab
Bài học nền tảng có thể thực hiện trực tiếp bằng các lệnh trên; bảng tra cứu nhanh giúp ôn tập.
→ Mở bảng lệnh tra cứu nhanhĐối chiếu tài liệu gốc
Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.
Mở tài liệu chính thức ↗