本篇內容介紹了“Rootless容器背景與架構介紹”的有關(guān)知識,在實(shí)際案例的操作過(guò)程中,不少人都會(huì )遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學(xué)有所成!
Docker和Kubernetes已經(jīng)成為企業(yè)IT架構的基礎設施,其自身安全越來(lái)越被關(guān)注。Docker基于Linux操作系統提供了應用虛擬化能力,通過(guò)namespace, cgroup實(shí)現了資源的隔離和配額約束。Docker Engine是一個(gè)典型的 Client-Server 結構:
Docker Client (TCP/Unix Socket) -> Docker Daemon (Parent/Child Processes) -> Container
由于Linux需要特權用戶(hù)來(lái)創(chuàng )建namespace,掛載分層文件系統等,所以 Docker Daemon 一直以來(lái)是以root用戶(hù)來(lái)運行的。這也導致了有Docker訪(fǎng)問(wèn)權限的用戶(hù)可以通過(guò)連接Docker Engine獲取root權限,而且可以繞開(kāi)系統的審計能力對系統進(jìn)行攻擊。這阻礙了容器在某些場(chǎng)景的應用:比如在高性能計算領(lǐng)域,由于傳統的資源管理和調度系統需要非特權用戶(hù)來(lái)運行容器,社區實(shí)現了另外的容器運行時(shí)Singularity 。
Moby社區的 Akihiro Suda,為Docker Engine和Buildkit貢獻了rootless容器支持,讓Docker Engine以非特權用戶(hù)方式運行,更好地復用Linux的安全體系。
注意:
目前rootless容器還在實(shí)驗階段,cgroups 資源控制, apparmor安全配置, checkpoint/restore等能力還不支持。
目前只有Ubuntu提供了在rootless模式下對overlay fs的支持,由于安全顧慮,這個(gè)方案尚未得到upstream的支持。其他操作系統需要利用VFS存儲驅動(dòng),有一定性能影響,并不適合I/O密集型應用。
Rootless容器有幾個(gè)核心技術(shù)
首先是利用 user namespaces 將容器中的root用戶(hù)uid/gid映射到宿主機的非特權用戶(hù)范圍內。Docker Engine已經(jīng)提供了 --userns-remap
標志支持了相關(guān)能力,提升了容器的安全隔離性。Rootless容器在此之上,讓Docker daemon也運行在重映射的用戶(hù)名空間中。
其次,雖然Linux中的非特權用戶(hù)可以在用戶(hù)名空間中創(chuàng )建網(wǎng)絡(luò )名空間,并且執行iptables規則管理和tcpdump等操作,然而非特權用戶(hù)無(wú)法在宿主機和容器之間創(chuàng )建veth pairs, 這也意味著(zhù)容器沒(méi)有外網(wǎng)訪(fǎng)問(wèn)能力。為了解決這個(gè)問(wèn)題,Akihiro 利用用戶(hù)態(tài)的網(wǎng)絡(luò )“SLiRP”,通過(guò)一個(gè)TAP設備連接到非特權用戶(hù)名空間,為容器提供外網(wǎng)連接能力。其架構如下
相關(guān)細節請參考,slirp4netns項目
本文在一臺 CentOS 7.6的虛擬機上進(jìn)行的驗證
創(chuàng )建用戶(hù)
$ useradd moby $ passwd moby
將新建用戶(hù)添加到 sudoers 組
usermod -aG wheel moby
切換到非特權用戶(hù)
$ su - moby $ id uid=1000(moby) gid=1000(moby) groups=1000(moby),10(wheel)
進(jìn)行uid/gid映射配置
echo "moby:100000:65536" | sudo tee /etc/subuid echo "moby:100000:65536" | sudo tee /etc/subgid
安裝Rootless Docker
curl -sSL https://get.docker.com/rootless | sh
如果第一次安裝,需要安裝所需軟件包
$ curl -sSL https://get.docker.com/rootless | sh # Missing system requirements. Please run following commands to # install the requirements and run this installer again. # Alternatively iptables checks can be disabled with SKIP_IPTABLES=1 cat <<EOF | sudo sh -x curl -o /etc/yum.repos.d/vbatts-shadow-utils-newxidmap-epel-7.repo https://copr.fedorainfracloud.org/coprs/vbatts/shadow-utils-newxidmap/repo/epel-7/vbatts-shadow-utils-newxidmap-epel-7.repo yum install -y shadow-utils46-newxidmap cat <<EOT > /etc/sysctl.d/51-rootless.conf user.max_user_namespaces = 28633 EOT sysctl --system EOF
(可選)安裝用戶(hù)態(tài)網(wǎng)絡(luò )協(xié)議棧實(shí)現 slirp4netns :由于yum 安裝的slirp4netns版本比較老無(wú)法執行,需要從源碼構建。
$ sudo yum install glib2-devel $ sudo yum group install "Development Tools" $ git clone https://github.com/rootless-containers/slirp4netns $ cd slirp4netns $ ./autogen.sh $ ./configure --prefix=/usr $ make $ sudo make install
安裝 Rootless Docker成功之后,會(huì )出現如下提示
$ curl -sSL https://get.docker.com/rootless | sh # systemd not detected, dockerd daemon needs to be started manually /home/moby/bin/dockerd-rootless.sh --experimental --storage-driver vfs # Docker binaries are installed in /home/moby/bin # Make sure the following environment variables are set (or add them to ~/.bashrc):\n export XDG_RUNTIME_DIR=/tmp/docker-1000 export DOCKER_HOST=unix:///tmp/docker-1000/docker.sock
執行
$ export XDG_RUNTIME_DIR=/tmp/docker-1000 $ export DOCKER_HOST=unix:///tmp/docker-1000/docker.sock $ /home/moby/bin/dockerd-rootless.sh --experimental --storage-driver vfs
然后在另外一個(gè)窗口執行
$ export XDG_RUNTIME_DIR=/tmp/docker-1000 $ export DOCKER_HOST=unix:///tmp/docker-1000/docker.sock $ docker version Client: Version: master-dockerproject-2019-04-29 API version: 1.40 Go version: go1.12.4 Git commit: 3273c2e2 Built: Mon Apr 29 23:39:39 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: master-dockerproject-2019-04-29 API version: 1.40 (minimum version 1.12) Go version: go1.12.4 Git commit: 9a2c263 Built: Mon Apr 29 23:46:23 2019 OS/Arch: linux/amd64 Experimental: true containerd: Version: v1.2.6 GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb runc: Version: 1.0.0-rc7+dev GitCommit: 029124da7af7360afa781a0234d1b083550f797c docker-init: Version: 0.18.0 GitCommit: fec3683 $ docker run -d -p 8080:80 nginx $ curl localhost:8080
利用 iperf3 進(jìn)行網(wǎng)絡(luò )性能測試,啟動(dòng)端
$ docker run -it --rm --name=iperf3-server -p 5201:5201 networkstatic/iperf3 -s
測試容器之間的網(wǎng)絡(luò )帶寬
$ SERVER_IP=$(docker inspect --format "{{ .NetworkSettings.IPAddress }}" iperf3-server) $ echo $SERVER_IP 172.17.0.2 $ docker run -it --rm networkstatic/iperf3 -c $SERVER_IP ... - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.03 sec 29.8 GBytes 25.5 Gbits/sec 0 sender [ 4] 0.00-10.03 sec 29.8 GBytes 25.5 Gbits/sec receiver
測試容器到宿主機之間的網(wǎng)絡(luò )帶寬(外網(wǎng)訪(fǎng)問(wèn))
$ HOST_IP=$(hostname --ip-address) $ echo $HOST_IP 192.168.1.162 $ docker run -it --rm networkstatic/iperf3 -c $HOST_IP ... - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1011 MBytes 848 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 1008 MBytes 845 Mbits/sec receiver
可以看到容器之間的通信帶寬還比較不錯,然而容器和宿主機不同網(wǎng)絡(luò )名空間之間的通信性能有較大的損耗。
Rootless容器在提升Docker/Runc容器的安全隔離性和可管理性方面前進(jìn)了一大步,可以很好地復用Linux的安全體系,配合seccomp和SELinux等安全配置,可以減少攻擊面。社區還提供了無(wú)需特權用戶(hù)的Kubernetes實(shí)驗版本,可以從如下項目獲得 https://github.com/rootless-containers/usernetes
然而Rootless容器無(wú)法防范Linux內核的安全風(fēng)險,目前其網(wǎng)絡(luò )、存儲的性能也有待優(yōu)化,需要在特定場(chǎng)景中進(jìn)行使用。也期待社區持續提升容器安全能力與效率,讓容器有更加廣闊的應用場(chǎng)景。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站