Google mở mã nguồn của gVisor
White

Hoàng Minh Trung viết ngày 03/05/2018

Bài viết dịch từ https://cloudplatform.googleblog.com/2018/05/Open-sourcing-gVisor-a-sandboxed-container-runtime.html?m=1.

Nhờ có công nghệ container mà cách chúng ta phát triển, đóng gói cũng như deploy ứng dụng đã thay đổi theo chiều hướng tích cực trong những năm gần đây. Tuy nhiên, công nghệ container vẫn còn gặp phải nhiều rào cản về security (như đã đề cập tại https://opensource.com/business/14/7/docker-security-selinux), khiến cho nhiều chuyên gia khuyến nghị không dùng docker cho các ứng dụng không tin tưởng được (untrust).

Tuy nhiên, mối quan tâm ngày càng lớn cho việc chạy các ứng dụng bên thứ 3 (heterogenous) đã tạo nên một công nghệ mới gọi là sandboxed containers (hay là container "trong khuôn"). Loại container này sẽ cung cấp một rào cản an toàn hơn giữa host OS và ứng dụng chạy bên trong container.

Do đó google đã giới thiệu gVisor, một loại sandox cung cấp một môi trường cô lập, an toàn cho container, mà nhẹ nhàng hơn công nghệ máy ảo (Virtual Machine(VM)). gVisor kết hợp với Docker cũng như Kubernetes, khiến nó đơn giản hơn cho việc chạy ứng dụng trong đời thực (production env).

Containers truyền thống trên Linux không phải sandbox.

Các ứng dụng sử dụng công nghệ container truyền thống tren Linux có thể tiếp cận tài nguyên hệ thống như các ứng dụng thông thường (không dùng container): thông qua việc gọi trực tiếp system call cho host OS kernel. Kernel sẽ chạy ở chế độ ưu tiên, khiến cho nó có thể tương tác trực tiếp với phần cứng, và trả lại kết quả cho ứng dụng.

alt text

Với Container truyền thống, Kernel sẽ áp đặt một số giới hạn cho tài nguyên mà ứng dụng có thể truy cập. Những giới hạn đó được cài đặt thông qua Linux cgroupsnamespaces, nhưng không phải tất cả mọi tài nguyên đều được kiểm soát thông qua 2 cơ chế đó. Thêm nữa , ngay cả với những giới hạn đó, kernel vẫn để lộ ra các khoảng trống về mặt tài nguyên mà những ứng dụng xấu có thể khai thác trực tiếp được.

Những tính năng của Kernel như là seccomp filters có thể cung cấp một rào cản tốt hơn giữa ứng dụng và Host kernel, nhưng nó bắt user phải tạo một whitelist cho những syscall có thể được gọi trước. Trong thực tế, rất khó để biết được syscall nào sẽ được yêu cầu bởi ứng dụng trước khi ứng dụng được chạy. Filters đồng thời cũng không giúp được nhiều khi syscall đã được whitelist, nhưng lại chứa những bug về mặt security.

Công nghệ container dựa trên VM hiện có.

Một cách tiếp cận để nâng cao hơn khả năng cô lập container chính là việc chạy mỗi container trên máy ảo của riêng nó. Việc cho mỗi container một VM, mà chứa cả kernel lẫn các devices đã được ảo hoá, sẽ tách biệt hoàn toàn nó ra khỏi host. Ngay cả khi có những lỗ hổng trên máy guest, thì hypervisor vẫn được tách biệt với host, cũng như những ứng dụng/container khác chạy trên host.

alt text

Chạy containers trên VM độc lập cung cấp một cô lập tốt hơn, cũng như tính tương thích hay là hiệu năng. Tuy nhiên nó lại đòi hỏi nhiều tài nguyên hơn.

Kata containers là một dự án mã mở sử dụng VM đã được "làm nhẹ" (stripped-down) để giữ tài nguyên ở mức thấp, cũng như tăng hiệu năng của việc cô lập container. Tương tự như gVisor, Kata bao gồm Open Container Initiative runtime mà tương thích với Docker và Kubernetes.

Sandbox Containers với gVisor

gVisor nhẹ hơn VM, tuy nhiên vẫn cung cấp một mức cô lập tương đương cho container. Trong lõi của gVisor chính là kernel mà chạy như bình thường, cung cấp Linux syscall cho những ứng dụng không được ưu tiên (unpriviledged process). Kernel được viết bằng Golang, khi ngôn ngữ này cung cấp memory-safety và type-safty. Tương tự như chạy trong VM, một ứng dụng chạy trong gVisor sandbox sẽ có kernel của riêng nó, cũng như được cấp cả các device được ảo hoá.

alt text

gVisor cung cấp một rào cản rất tốt bằng cách đứng giữa ứng dụng , ngắt các syscall được gọi bới ứng dụng, và hành động như một guest kernel, trong khi vẫn chạy trong user space. Không như VM cần yêu cầu tập hợp các nguồn tài nguyên cần thiết tại thời gian tạo, gVisor có thể thay đổi tài nguyên tại thời điểm bất kì, như mọi process thông thường có thể làm. gVisor có thể được hiểu là một hệ điều hành "siêu ảo hoá?" ([paravirtualized operating system) với tài nguyên linh hoạt. Tuy nhiên việc linh hoạt này sẽ phải trả giá bằng overhead cho mỗi syscall, cũng như tính tương thích của ứng dụng.

Quote từ 2 thành viên của kata project

"Secure workloads are a priority for the industry. We are encouraged to see innovative approaches like gVisor and look forward to collaborating on specification clarifications and making improvements to joint technical components in order to bring additional security to the ecosystem."

Samuel Ortiz, member of the Kata Technical Steering Committee and Principal Engineer at Intel Corporation

“Hyper is encouraged to see gVisor’s novel approach to container isolation. The industry requires a robust ecosystem of secure container technologies, and we look forward to collaborating on gVisor to help bring secure containers into the mainstream.”

Xu Wang, member of the Kata Technical Steering Committee and CTO at Hyper.sh

Tích hợp với Docker và Kubenetes

gVisor runtime tích hợp hoàn hảo với Docker và Kubernetest thong qua runsc (hay là run Sandboxed Container), mà command này tương thích với OCI runtime API.

runsc runtime có thể thay thế bởi runc, Docker container runtime chuẩn. Cài đặt vô cùng đơn giản, sau khi được cài đặt chúng ta chỉ cần thêm flag để chạy sandboxed container trong Docker:

$docker run --runtime=runsc hello-world
$ docker run --runtime=runsc -p 3306:3306 mysql

gVisor có sẵn phần lớn Linux system call API (khoảng 200), nhưng không phải tất cả. Một vài system call chưa support, như một vài phần liên quan đến /proc và /sys filesystems. Do đó không phải toàn bộ ứng dụng chạy được bên trong gVisor, tuy nhiên hầu hết sẽ không gặp vấn đề gì, bao gồm Node.js, Java 8, MySQL, Jenkins, Apache, Redis....

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Hoàng Minh Trung

23 bài viết.
63 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
20 1
Bài viết dịch từ http://arslan.io/tenusefultechniquesingo Sử dụng một GOPATH duy nhất Sử dụng đồng thời nhiều GOPATH sẽ không giúp cho hệ thống ...
Hoàng Minh Trung viết hơn 2 năm trước
20 1
White
19 15
(Ảnh) Mục đích của bài viết là hướng dẫn cơ bản nhất cho những ai chưa biết về docker, môi trường thực hiện là mac OS. Chuẩn bị Cài đặt virtua...
Hoàng Minh Trung viết 3 năm trước
19 15
White
15 0
Bài viết dịch từ https://github.com/luciotato/golangnotes/blob/master/OOP.md Mục đích bài viết Học golang dễ dàng hơn với những kiến thức bạn đ...
Hoàng Minh Trung viết hơn 2 năm trước
15 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
23 bài viết.
63 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!