91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Rootless容器背景與架構介紹

發布時間:2021-09-13 17:20:39 來源:億速云 閱讀:162 作者:chen 欄目:云計算

本篇內容介紹了“Rootless容器背景與架構介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Rootless容器背景與架構

Docker和Kubernetes已經成為企業IT架構的基礎設施,其自身安全越來越被關注。Docker基于Linux操作系統提供了應用虛擬化能力,通過namespace, cgroup實現了資源的隔離和配額約束。Docker Engine是一個典型的 Client-Server 結構:

Docker Client (TCP/Unix Socket) -> Docker Daemon (Parent/Child Processes) -> Container

由于Linux需要特權用戶來創建namespace,掛載分層文件系統等,所以 Docker Daemon 一直以來是以root用戶來運行的。這也導致了有Docker訪問權限的用戶可以通過連接Docker Engine獲取root權限,而且可以繞開系統的審計能力對系統進行攻擊。這阻礙了容器在某些場景的應用:比如在高性能計算領域,由于傳統的資源管理和調度系統需要非特權用戶來運行容器,社區實現了另外的容器運行時Singularity 。

Moby社區的 Akihiro Suda,為Docker Engine和Buildkit貢獻了rootless容器支持,讓Docker Engine以非特權用戶方式運行,更好地復用Linux的安全體系。

注意:

  1. 目前rootless容器還在實驗階段,cgroups 資源控制, apparmor安全配置, checkpoint/restore等能力還不支持。

  2. 目前只有Ubuntu提供了在rootless模式下對overlay fs的支持,由于安全顧慮,這個方案尚未得到upstream的支持。其他操作系統需要利用VFS存儲驅動,有一定性能影響,并不適合I/O密集型應用。

Rootless容器有幾個核心技術

首先是利用 user namespaces 將容器中的root用戶uid/gid映射到宿主機的非特權用戶范圍內。Docker Engine已經提供了 --userns-remap 標志支持了相關能力,提升了容器的安全隔離性。Rootless容器在此之上,讓Docker daemon也運行在重映射的用戶名空間中。

Rootless容器背景與架構介紹

其次,雖然Linux中的非特權用戶可以在用戶名空間中創建網絡名空間,并且執行iptables規則管理和tcpdump等操作,然而非特權用戶無法在宿主機和容器之間創建veth pairs, 這也意味著容器沒有外網訪問能力。為了解決這個問題,Akihiro 利用用戶態的網絡“SLiRP”,通過一個TAP設備連接到非特權用戶名空間,為容器提供外網連接能力。其架構如下

Rootless容器背景與架構介紹

相關細節請參考,slirp4netns項目

環境準備

本文在一臺 CentOS 7.6的虛擬機上進行的驗證

創建用戶

$ useradd moby
$ passwd moby

將新建用戶添加到 sudoers 組

usermod -aG wheel moby

切換到非特權用戶

$ su - moby
$ id
uid=1000(moby) gid=1000(moby) groups=1000(moby),10(wheel)

進行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

(可選)安裝用戶態網絡協議棧實現 slirp4netns :由于yum 安裝的slirp4netns版本比較老無法執行,需要從源碼構建。

$ 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成功之后,會出現如下提示

$ 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

驗證Rootless容器

執行

$ 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

然后在另外一個窗口執行

$ 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 進行網絡性能測試,啟動服務器

$ docker run  -it --rm --name=iperf3-server -p 5201:5201 networkstatic/iperf3 -s

測試容器之間的網絡帶寬

$ 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

測試容器到宿主機之間的網絡帶寬(外網訪問)

$ 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

可以看到容器之間的通信帶寬還比較不錯,然而容器和宿主機不同網絡名空間之間的通信性能有較大的損耗。

總結

Rootless容器在提升Docker/Runc容器的安全隔離性和可管理性方面前進了一大步,可以很好地復用Linux的安全體系,配合seccomp和SELinux等安全配置,可以減少攻擊面。社區還提供了無需特權用戶的Kubernetes實驗版本,可以從如下項目獲得 https://github.com/rootless-containers/usernetes

然而Rootless容器無法防范Linux內核的安全風險,目前其網絡、存儲的性能也有待優化,需要在特定場景中進行使用。也期待社區持續提升容器安全能力與效率,讓容器有更加廣闊的應用場景。

“Rootless容器背景與架構介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邵东县| 永年县| 商丘市| 乐亭县| 雷波县| 康定县| 延边| 洞头县| 湘潭县| 石林| 农安县| 庆元县| 长沙市| 苍溪县| 蒲城县| 阿坝| 洛扎县| 峨山| 镇安县| 龙川县| 喀喇| 大新县| 七台河市| 榆社县| 宁乡县| 安塞县| 台东市| 垣曲县| 金湖县| 禹州市| 潜江市| 鲁甸县| 和平县| 揭阳市| 平江县| 常州市| 舟山市| 仙桃市| 崇礼县| 元朗区| 夏邑县|