Ảo hóa cấp độ hệ điều hành (container) cho OS X


31

Tôi tự hỏi tại sao, ngoài chroot cũ, không có triển khai ảo hóa cấp hệ điều hành (hoặc container nếu bạn thích) tồn tại cho Mac OS X.

Nó có thể là do giới hạn kernel hoặc hạn chế giấy phép? Hoặc đơn giản là chưa có ai đưa ra một dự án tương tự?

Câu trả lời:


16

Một yếu tố quan trọng cần thiết cho việc container hóa là sự cô lập của mạng và các dịch vụ khác, nhưng không chỉ là sự cô lập mà còn là sự ảo hóa . FreeBSD Jails, Linux "container" (hay chính xác hơn là "không gian tên") và các vùng Solaris / illumos đều cung cấp một mức độ "ảo hóa" các dịch vụ hệ thống hệ điều hành này.

Bằng cách ảo hóa, điều này có nghĩa là các máy chủ này có sẵn (hoặc có khả năng khả dụng ) cho những thứ bên trong "container", nhưng theo cách bảo vệ những thứ khác trên cùng một máy chủ bên ngoài container. (Ví dụ: một container có thể có ngăn xếp TCP / IP riêng, với địa chỉ IP riêng, bộ đệm ARP, v.v.)

Ảo hóa hệ điều hành (hệ điều hành) là cách chúng ta thường đề cập đến loại ảo hóa "trọng lượng nhẹ" này, trong đó các quá trình nghĩ rằng chúng nhìn thấy một hạt nhân ảo, nhưng tất cả đều chia sẻ cùng một hạt nhân thực sự dưới mui xe; hạt nhân đó hoạt động như một loại trình ảo hóa trong việc đảm bảo rằng các ranh giới vùng chứa / ảo hóa không bị vượt qua. (Nói cách khác, các dịch vụ HĐH được ảo hóa.) So sánh điều này với ảo hóa phần cứng, trong đó phần ảo hóa là phần cứng - ví dụ như các thiết bị được mô phỏng trong phần mềm và được trình bày cho một hệ điều hành chạy trong container. Điều này rất mạnh, nhưng khá tốn tài nguyên - mỗi máy ảo phải có bản sao riêng của hệ điều hành.

MacOS gần đây có hỗ trợ hypanneror riêng thông qua Hypervisor.framework cho phép phần mềm như "XHyve" [Cổng của FreeBSD's BHyve] (docker trên macOS sử dụng điều này), nhưng thiếu các dịch vụ cần thiết trong hệ thống để ảo hóa hoàn toàn các dịch vụ hệ điều hành.

Trong thực tế, rất nhiều thứ cần thiết có lẽ đã có sẵn, vì công việc cung cấp hộp cát có nghĩa là đã có những điểm logic trong đó các cuộc gọi hệ thống bị chặn và xử lý khác nhau cho các ứng dụng khác nhau. Tuy nhiên, đó là xa câu chuyện hoàn chỉnh - thực hiện mạng riêng biệt thực sự, IPC và các không gian tên khác là khá nhiều công việc.

Lý do tốt nhất cho lý do tại sao Apple không làm điều này có thể là lý do tương tự vì Apple đã không phát hành một nền tảng phù hợp để chạy macOS trong trung tâm dữ liệu trong nhiều năm - thiếu nhu cầu thị trường, hoặc nhận thấy thiếu nhu cầu thị trường của lãnh đạo Apple. Trọng tâm máy tính để bàn và thiết bị di động nơi họ tập trung sự chú ý của họ chỉ đơn giản là không cần các phiên bản macOS ảo nhiều như vậy. (Điều này thật đáng buồn, vì tôi rất thích có hỗ trợ macOS ảo - ví dụ: chạy macOS trên máy ảo tại Travis CI thực sự tốn thời gian so với các container Linux).


1
câu trả lời hay ... tôi đoán là Apple tránh hỗ trợ OSX trên máy chủ vì nó sẽ đánh sập thị trường MBP của họ nếu các nhà phát triển iOS có thể chạy một máy tính xách tay linux mạnh mẽ giá rẻ và biên dịch apk của họ trên một nhà cung cấp dịch vụ lưu trữ VPS
Scott Stensland

6

Bạn sẽ ngạc nhiên - Các container thực sự được hỗ trợ - Sandbox OS X (và iOS) đã phát triển để sử dụng chúng. Chúng đã được giới thiệu vào 10.7 và hiện đang là tiêu chuẩn thực tế trong 10.10 và iOS 8. Sau đó, chúng được thực thi nghiêm ngặt hơn (chủ yếu là vì lý do bảo mật ứng dụng), đến mức mà một ứng dụng chỉ có thể nhìn thấy và trước đó các phương thức liệt kê các quy trình hoặc tài nguyên hiện trả về kết quả dựa trên vùng chứa - tương tự như không gian tên ipc của Linux - nhưng mạnh hơn.


2
Tuy nhiên, đây là những hộp cát, không phải ảo hóa hệ điều hành (ví dụ: container, vùng, nhà tù), phải không?
smvlpr 17/2/2015

1
Docker cũng không ảo hóa. Container! = VM. Docker về cơ bản san bằng một loạt các tính năng hạt nhân khác nhau, cgroups, chroot, hệ thống tệp lớp, định tuyến iptables, v.v., để cô lập một nhóm các quy trình mà ứng dụng tự thấy là có hệ thống với chính nó, trong khi cô lập các môi trường đó để cải thiện bảo mật và giảm thiểu khả năng của các container để can thiệp lẫn nhau và hệ thống. Các thùng chứa OSX đạt được một số chức năng này, nhưng không phải tất cả. Nó có lẽ là một cái gì đó có thể được thực hiện bởi một lập trình viên đủ xảo quyệt.
Shayne

3
@ Công nghệ, bạn có thể chỉ ra bất kỳ tài liệu tham khảo nào trên các thùng chứa / hộp cát trong OS X không?
Ken Williams

3

Tôi sẽ tưởng tượng câu trả lời là không ai thực sự muốn nó. Nó dường như có thể làm được. Những điều này được thực hiện chủ yếu cho một mục đích, bảo tồn hiệu suất cho các nhà cung cấp VPS. Và thực sự không ai muốn một ví dụ VPS dựa trên OS X.


5
Cảm ơn quan điểm của bạn. IMHO có ít nhất một trường hợp sử dụng khác cho các container, đó là tạo ra các môi trường phát triển. BTW, tôi cũng đã tìm thấy ngọn lửa cũ này: Groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4
Emyl

Mật độ tăng là một tác dụng phụ tốt đẹp của việc cô lập các quy trình vào không gian tên riêng của chúng. Các thùng chứa cho phép bạn chạy nhiều ứng dụng an toàn hơn và kiểm soát tốt hơn những gì chúng có thể làm trên máy. Những lợi ích này được iOS sử dụng để tăng cường bảo mật và giữ cho các ứng dụng không bị ảnh hưởng lẫn nhau, ví dụ, điều này ít liên quan đến mật độ VPS. Ngay cả các máy dịch vụ đơn cũng có thể được hưởng lợi từ bảo mật. Không có cải thiện mật độ ở đó nhưng container vẫn có thể hữu ích.
GargantuChet

2

Trong khi nó sử dụng "chroot cũ tốt (8)", tôi đã bắt đầu một dự án có xu hướng bắt chước hành vi của docker trên OS X và NetBSD. Đó là bài phát biểu miễn phí và có sẵn trên GitHub . Như README nói, dự án này không liên quan đến bảo mật cũng như sản xuất, nhưng sẽ giúp kiểm tra toàn bộ ngăn xếp nguyên bản trên máy trạm của bạn.


0

Docker (theo tôi hiểu) chỉ là "ảo hóa" (phân lớp) hệ thống tệp và mạng (cpu / mem chỉ có giới hạn), vì vậy tất cả các tính năng tương tự sẽ ở đó nhưng không được tiếp thị theo cùng một cách.

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.