1. Ana Sayfa
  2. Container
  3. Kata Containers Nedir?

Kata Containers Nedir?

8f5d2922a16eb88a1a66184821cd7178

Kata Containers, ilk olarak Aralık 2017’de çıkan ve container’ın hızı ile sanal makinenin (VM) güvenliğini bir araya getiren, Intel® Clear Containers ve Hyper runV teknolojilerinin bir araya gelmesi ile oluşmuş bir teknolojidir. Standart container teknolojisinden farkını, kernel üzerinde namespace ve cgroups ile sağlanan izolasyona ek olarak oldukça hafif bir sanallaştırma ile her bir container’ın kendine ait bir kernel üzerinde çalışmasını sağlaması olarak özetleyebiliriz (Resim-1). Container teknolojisi bizi ortak bir kernel üzerinden hızlı ve ortam bağımsız çalıştırma olanağı sağlarken, her container’a bir ayrı bir kernel eklemek ilk başta gereksiz gibi görünebilir. İşin güvenlik boyutunu dikkate aldığınızda ise işler maalesef değişiyor.

Resim-1

Container’lar oluşturulduktan sonra değiştirilemez ve içerisinde zararlı bir yazılım eklenemez diye düşünebiliriz, peki zararlı yazılım ile bir container oluşturup bunu deploy ettiğimizde neler yapılabilir? Container’lar birbirinden bağımsız ve birbirlerini değiştiremez olabilirler ama ortak bir noktaları olduğunu da unutmayalım: Hepsi aynı kernel üzerinden çalışıyor. Eğer kötü niyetli container üzerinden kernel’a zararlı yazılımı bulaşırsa, diğer container’ları da etkileyeceği gibi host işletim sistemi de direkt olarak etkileyecektir. Peki güvenlik önlemi olarak ne yapabiliriz? İlk akla gelen container’ları gruplayarak farklı host’lar üzerinde çalışması olabilir, böylelikle hepsi aynı kernel üzerinde olmayacaktır ancak bu sefer de bakım maliyeti artacağı için bu çözüm sayıya da bağlı olarak çok da kullanışlı olmayabilir. Kata işte bu konuda bize yardımcı oluyor. Zararlı yazılım kernel’a bulaşmaya çalıştığında aslında container içerisinde yer alan kernel’a bulaştığı için host ya da diğer container’lara erişemiyor.

İşin içine sanal makine girdiği için “peki ve Kubernetes destekliyor mu?” sorusu gelebilir. Open Container Initiative (OCI) tarafından belirlenen container runtime spesifikasyonlarına uyumlu olduğu için her ikisi tarafından da desteklenmektedir. Docker ile nasıl kullanabiliriz bir örnek üzerinden inceleyelim.

NOT: Örneği hızlı olması açısından Azure üzerinde bir Linux VM üzerinde yapacağım ancak local bir VM ya da direkt Linux kullanıyorsanız onun üzerinde de yapabilirsiniz.

Azure üzerinde bir Linux VM oluşturarak başlayalım (Resim-2). Burada standart olarak bir Ubuntu ya da CentOS imajı kullanmak yerine, performans ve kurulum/konfigürasyon kolaylığı nedeniyle Clear Linux tercih ettim. Örnekte yapacaklarımızın hazır yapılmışı var diyebileceğimiz bir versiyonu da Azure Marketplace üzerinde “ OS – Containers” adında bulabilirsiniz.

Sanal makinemizi açarken dikkat edeceğimiz kısımlardan ilki size olarak v3 olmasına dikkat etmek. Bunun nedeni de nested virtualization desteği. İkinci kısım ise PowerShell ile bağlanacağımız için SSH erişiminin açık olması gerekiyor.

Resim-2

Linux VM çok kısa bir sürede hazır oluyor. Kurulum işlemi tamamlandıktan sonra ssh <kullanıcı adı>@<sunucu adresi> şeklinde komutu yazarak sunucuya bağlanıyorum (Resim-3).

Resim-3

Benim gibi Ubuntu kullanırken “sudo apt-get update” ve “sudo apt-get upgrade” yapmadan güne başlamam diyenlerdenseniz, Clear Linux’da da sudo swupd update komutunu kullanarak başlayabilirsiniz (Resim-4).

Resim-4

29810’dan 30110 versiyonuna güncelleneceğini de öğrendikten sonra güncelleme özetini görebiliyoruz (Resim-5).

Resim-5

Daha önce bahsettiğim hazır container versiyonu üzerinden ilerlemediğimiz için öncelikle Docker kurmamız gerekiyor. sudo swupd bundle-add containers-basic komutu ile gerekli kurulumların yapılmasını sağlayabiliyoruz (Resim-6). Snap (sudo snap install docker) ile kurmak kadar kolay. Kurulumdan sonra da sudo systemctl start docker komutu ile docker servisini başlatıp, sudo systemctl enable docker komutu ile de sistem başlarken docker’ın otomatik başlamasını sağlayabilirsiniz.

Resim-6

Her docker komutundan önce sudo yazmak istemiyorsanız sudo usermod -aG docker $USER komutu ile sudo yazma gereksiniminden kurtulabilirsiniz. Docker grubu kurulumda oluştuğu için sudo groupadd docker komutuna gerek yok. Bu işlemden sonra logoff/logon gerekiyor, terminali kapatıp tekrar bağlanmanız yeterli.

Docker info ile detaylara baktığımızda runtime olarak runc yüklü olduğunu ve varsayılan olarak da bunun seçili olduğunu görebilirsiniz. runc’yi, Linux’un cgroups ve namespaces özelliklerini kullanarak izolasyon sağlayan bir runtime olarak özetleyebiliriz.

Resim-7

Docker’ın sorunsuz olarak yüklendiğini gördükten sonra Kata Containers’ı yükleyebiliriz. Burada da kendi yükleme komutları ya da snap kullanmak yerine Clear OS’in Kata Containers içeren bundle’ını sudo swupd bundle-add containers-virt komutu ile kuruyorum (Resim-8). Kurulum sonrasında da sudo systemctl daemon-reload ve sudo systemctl restart docker komutlarını çalıştırarak bundle ile yüklenen konfigürasyonun aktif olmasını sağlıyorum.

Resim-8

docker info | grep -i runtime komutu ile (info içerisinden sadece runtime bilgisini alarak) kata-runtime‘ın yüklendiği görebilirsiniz. Burada varsayılan runtime değeri de runc’den kata-runtime’a geçmiş olacak (Resim-9).

Resim-9

Kata containers kullandığımızı runtime değerinden anlayabiliriz ancak farkı görmek için uname -a komutundan da faydalanabiliriz. Bu komut bize sistem bilgisini yani Kernel versiyonunu gösteriyor. Bu komutu öncelikle busybox imajı kullanarak container üzerinde, sonra da direkt host üzerinde çalıştırırsak; container üzerinde 4.19.56-53.container değerini, host üzerinde de 5.1.7-192.hyperv değerini görüyoruz. Özetle container host kernel üzerinde çalışmıyor.

Resim-10

Bu da yeterli değil iyice emin olalım derseniz de default runtime değerini tekrar runc yaparak tekrar deneyebilirsiniz. Bunun için docker konfigürasyonunu değiştirmemiz gerekecek. Öncelikle sudo mkdir -p /etc/systemd/system/docker.service.d/ komutu ile docker.service.d adında bir klasör oluşturuyorum. Sonra da konfigürasyon dosyasında default runtime değerini runc olarak belirtecek şekilde aşağıdaki komutu çalıştırıyorum (Resim-11).

cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/50-runtime.conf

[Service]

Environment=”DOCKER_DEFAULT_RUNTIME=–default-runtime runc”

EOF

Bu komutlardan sonra konfigürasyon değişikliğini aktifleştirmek için daemon-reload ve restart docker komutlarını çalıştırmam gerekli (Resim-11). Son olarak da yine container ve host üzerinde uname -a komutunu çalıştırdığımızda container’ın da host kernel üzerinde çalıştığını görebilirsiniz.

Resim-11

Eğer nested virtualization desteği olmayan bir VM üzerinde kurulum yaparsanız Docker varsayılan runtime olarak olarak runc’yi, nested virtualization destekli bir VM ya da direkt makine üzerine kurulum yaparsanız da varsayılan runtime değeri olarak kata-runtime’ı kullanacaktır.

Bu konuyla ilgili sorularınızı http://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

https://katacontainers.io/learn/

https://clearlinux.org/

https://github.com/opencontainers/runc

https://github.com/kata-containers/runtime

https://hub.docker.com/_/busybox

https://github.com/clearcontainers/runtime

https://github.com/hyperhq/runv

TAGs: Docker, Containers, Linux, , Clear Linux, Kata Containers, OCI, Kata-Runtime, runc, virtualization, nested virtualization, Azure, Azure VM, Intel Clear Containers, Hyper runV

Yorum Yap

Yazar Hakkında

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi Gemi İnşaatı Mühendisliği bölümünde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi Bilgi Teknolojileri bölümünde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir. Şu anda da Done'de Cloud Development Manager olarak Azure, .NET Core, SQL Server, Docker vb güncel teknolojiler üzerinde çalışmaktadır.

Yorum Yap