
يعزل الحاويات في بيئة رملية (Sandbox) عبر نواة تطبيق تعمل في فضاء المستخدم تعترض استدعاءات النظام، وتحدّ من وصول نواة المضيف، وتتكامل مع Docker/Kubernetes من خلال بيئة تشغيل OCI.

يوفر gVisor طبقة قوية من العزل بين التطبيقات قيد التشغيل ونظام التشغيل المضيف. وهو نواة تطبيقية تنفذ واجهة شبيهة بواجهة Linux. وخلافًا لـ Linux، فهو مكتوب بلغة آمنة للذاكرة (Go) ويعمل في مساحة المستخدم.
يتضمن gVisor وقت تشغيل Open Container Initiative (OCI) يُسمى runsc
يجعل من السهل العمل مع أدوات الحاويات الموجودة. يتكامل وقت التشغيل runsc
مع Docker وKubernetes، مما يسهّل تشغيل حاويات معزولة.
seccomp-bpf)، ولا غلافًا فوق
بدائيات العزل في Linux (مثل firejail، AppArmor، إلخ).يتبنى gVisor نهجًا ثالثًا متميزًا، إذ يوفر العديد من الفوائد الأمنية للأجهزة الافتراضية مع الحفاظ على بصمة موارد أقل، وبدء تشغيل سريع، ومرونة التطبيقات العادية في مساحة المستخدم.
الحاويات ليست صندوقًا رمليًا. فبينما أحدثت الحاويات ثورة في طريقة تطويرنا وتغليفنا ونشرنا للتطبيقات، فإن استخدامها لتشغيل تعليمات برمجية غير موثوقة أو يحتمل أن تكون ضارة دون عزل إضافي ليس فكرة جيدة. وبينما يسمح استخدام نواة واحدة مشتركة بتحقيق مكاسب في الكفاءة والأداء، فإنه يعني أيضًا أن الهروب من الحاوية ممكن بثغرة أمنية واحدة.
gVisor هو نواة تطبيقية للحاويات. فهو يحد من سطح نواة المضيف الذي يمكن للتطبيق الوصول إليه مع منح التطبيق إمكانية الوصول إلى جميع الميزات التي يتوقعها. وخلافًا لمعظم النوى، لا يفترض gVisor أو يتطلب مجموعة ثابتة من الموارد الفيزيائية؛ بل يستفيد من وظائف نواة المضيف الموجودة ويعمل كعملية عادية. وبعبارة أخرى، ينفذ gVisor نظام Linux عن طريق Linux.
لا ينبغي الخلط بين gVisor والتقنيات والأدوات التي تهدف إلى تحصين الحاويات ضد التهديدات الخارجية، أو توفير فحوصات سلامة إضافية، أو الحد من نطاق الوصول لخدمة ما. ينبغي للمرء دائمًا توخي الحذر بشأن البيانات التي تُتاح للحاوية.
يمكن العثور على توثيق المستخدم والبنية التقنية، بما في ذلك أدلة البدء السريع، على gvisor.dev.
يُبنى gVisor على x86_64 وARM64. قد تتوفر معماريات أخرى في المستقبل.
لأغراض هذه التعليمات، يتم تغليف bazel وتبعيات البناء الأخرى في
حاوية بناء. من الممكن استخدام bazel مباشرة، أو كتابة make help
للأهداف القياسية.
تأكد من تثبيت التبعيات التالية:
ابنِ حزمة إصدار مضغوطة (tarball) تحتوي على runsc، وواجهة containerd shim
المسماة containerd-shim-runsc-v1، وبعض الملفات التنفيذية الجانبية التي
يتوقع runsc العثور عليها في دليل gvisor-bin/ بجواره، ثم استخرجها إلى
/usr/local/bin:
make release-tarball DESTINATION=bin/
sudo tar -C /usr/local/bin -xf bin/gvisor.tar.bz2
لبناء مكتبات أو ملفات تنفيذية محددة، يمكنك تحديد الهدف:
make build TARGETS="//pkg/tcpip:tcpip"
لا يُوصى باستخدام Bazel مباشرة بسبب الحمل الإضافي، ولكن للبدء:
بعد إعداد التبعيات، يكون استخدام Bazel مشابهًا لـ Makefile:
bazel build -c opt //debian:gvisor-release-tar-bz2
لتشغيل مجموعات الاختبار القياسية، يمكنك استخدام:
make unit-tests
make tests
لتشغيل اختبارات محددة، يمكنك تحديد الهدف:
# Makefile
make test TARGETS="//runsc:version_test"
# Bazel
bazel test //runsc:version_test
تدعم بعض الحزم تشغيل الاختبارات مباشرة على macOS. في وقت كتابة هذا النص، يتطلب gVisor الإصدار 8 من bazel، والذي يمكنك تثبيته عبر homebrew:
brew install bazel@8
# You can then run the tests, e.g.:
$(brew --prefix bazel@8)/bin/bazel test --macos_sdk_version=$(xcrun --show-sdk-version) -- //tools/nogo/... //tools/check{aligned,const,escape,linkname,locks,unsafe}/...
go getيستخدم هذا المشروع bazel للبناء وإدارة التبعيات. يتم الاحتفاظ بفرع
go اصطناعي متوافق مع أدوات go القياسية للراحة. وهذا مفيد للحزم والمكتبات
الخارجية التي تعتمد على حزم gVisor الفرعية (مثل الشبكات في مساحة المستخدم
عبر Netstack) لاستيراد تعليمات gVisor البرمجية بلغة Go إلى مشاريع Go
الخاصة بها.
اختر هذا الفرع صراحةً باستخدام استعلام الفرع go. يحل @latest إلى
master، الذي يتطلب Bazel وغير متوافق مع أدوات Go القياسية:
go get gvisor.dev/gvisor/pkg/tcpip/transport/tcp@go
ملاحظة: عمليات بناء runsc من هذا الفرع غير مدعومة. يتطلب gVisor
وrunsc عدة ملفات تنفيذية (بعضها غير مكتوب بلغة Go أصلًا) لكي يعملا. فرع
go مدعوم بأفضل جهد ممكن، والتطوير المباشر على هذا الفرع غير مدعوم. يجب أن
يحدث التطوير على فرع master، الذي ينعكس بعد ذلك في فرع go.
راجع GOVERNANCE.md للحصول على معلومات حوكمة المشروع.
راجع ADOPTERS.md للحصول على قائمة بالمستخدمين والمتبنين المعروفين في بيئات الإنتاج.
تُعد قائمة بريد gvisor-users وقائمة بريد gvisor-dev نقطتي انطلاق جيدتين للأسئلة والنقاش.
راجع SECURITY.md.
راجع Contributing.md.