成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 Kubernetes 中運(yùn)行不受信任的容器

安全 云安全 云計(jì)算
對(duì)于潛在的攻擊者來說,在大公司內(nèi)啟動(dòng)他們的容器是一個(gè)千載難逢的機(jī)會(huì)。但容器技術(shù)自身能讓我們輕松自衛(wèi)嗎?

IT 世界每天都在越來越多地采用基于容器的基礎(chǔ)架構(gòu)。但是,每個(gè)人都不清楚優(yōu)點(diǎn),缺點(diǎn)甚至局限性。

考慮到即使是大公司也在靠近基于容器的基礎(chǔ)設(shè)施,但是可能的攻擊區(qū)域和數(shù)據(jù)泄露的潛在影響卻無人在意。

Docker(containerd)和 LXC 等技術(shù)并不是真正孤立的系統(tǒng),因?yàn)樗鼈兣c托管的操作系統(tǒng)共享相同的 Linux 內(nèi)核。

對(duì)于潛在的攻擊者來說,在大公司內(nèi)啟動(dòng)他們的容器是一個(gè)千載難逢的機(jī)會(huì)。但容器技術(shù)自身能讓我們輕松自衛(wèi)嗎?

當(dāng)前的容器技術(shù)

已經(jīng)重復(fù)了很多次,容器是一種打包、共享和部署應(yīng)用程序的新方式,而不是所有功能都打包在一個(gè)軟件或操作系統(tǒng)中的單一應(yīng)用程序。

目前,容器沒有利用任何新的東西,但它們是在 Linux 命名空間和 cgroup 之上創(chuàng)建的演變。命名空間創(chuàng)建了一個(gè)虛擬和隔離的用戶空間,并為應(yīng)用程序提供其系統(tǒng)資源的隔離,例如文件系統(tǒng)、網(wǎng)絡(luò)和進(jìn)程。這種抽象允許應(yīng)用程序獨(dú)立啟動(dòng),而不會(huì)干擾在同一主機(jī)上運(yùn)行的其他應(yīng)用程序。

所以,多虧了命名空間和 cgroup 的結(jié)合,我們絕對(duì)可以在一個(gè)隔離的環(huán)境中啟動(dòng)許多在同一主機(jī)上運(yùn)行的應(yīng)用程序。

容器與虛擬機(jī)

很明顯,與虛擬機(jī)環(huán)境相比,容器技術(shù)解決了在隔離性、可移植性和精簡(jiǎn)架構(gòu)方面的問題。但我們不要忘記,虛擬機(jī)允許我們隔離我們的應(yīng)用程序,尤其是在內(nèi)核級(jí)別,因此黑客逃離容器并破壞系統(tǒng)的風(fēng)險(xiǎn)遠(yuǎn)高于逃離虛擬機(jī)。

大多數(shù) Linux 內(nèi)核漏洞可能適用于容器,這可能允許它們升級(jí)和破壞受影響的命名空間以及同一操作系統(tǒng)中的其他命名空間。

這些安全問題導(dǎo)致研究人員嘗試從主機(jī)創(chuàng)建真正分離的命名空間。具體稱為“沙盒”,現(xiàn)在有幾種解決方案可以提供這些功能:gVisor 或例如 Kata Containers。

Kubernetes 中的容器運(yùn)行時(shí)

我們可以在容器編排器 Kubernetes 中更深入地研究這類技術(shù)。

Kubernetes 使用組件 kubelet 來管理容器。我們可以將其定義為負(fù)責(zé)提供給它的規(guī)范并準(zhǔn)時(shí)準(zhǔn)確地執(zhí)行其操作的船長(zhǎng)。

Kubelet 采用 pod 規(guī)范并使其在分配給它們的主機(jī)上作為容器運(yùn)行,并且可以與任何容器運(yùn)行時(shí)交互,只要它符合 OCI 標(biāo)準(zhǔn)(其實(shí)現(xiàn)是 RunC)

圖片容器運(yùn)行時(shí)的工作原理

RunC最初嵌入到Docker架構(gòu)中,于 2015 年作為獨(dú)立工具發(fā)布。它已成為 DevOps 團(tuán)隊(duì)可以用作容器引擎的一部分的常用的、標(biāo)準(zhǔn)的、跨功能的容器運(yùn)行時(shí)。

RunC 提供了與現(xiàn)有低級(jí) Linux 特性交互的所有功能。它使用命名空間和控制組來創(chuàng)建和運(yùn)行容器進(jìn)程。

在下面的段落中,我們將介紹運(yùn)行時(shí)類和核心元素。還有一個(gè) RuntimeClass 處理程序,其默認(rèn)值為 RunC(對(duì)于使用 containerd 作為容器運(yùn)行時(shí)的 Kubernetes 安裝)。

RuntimeClass

顧名思義,運(yùn)行時(shí)類允許我們使用各種容器運(yùn)行時(shí)進(jìn)行操作。2014 年,Docker 是 Kubernetes 上唯一可用的運(yùn)行時(shí)容器。從 Kubernetes 1.3 版開始,添加了與 Rocket (RKT) 的兼容性,最后在 Kubernetes 1.5 中,引入了容器運(yùn)行時(shí) Iterface (CRI),它具有標(biāo)準(zhǔn)接口和所有容器運(yùn)行時(shí)的可能性,您可以直接與此接口標(biāo)準(zhǔn)省去了開發(fā)者適應(yīng)各類容器運(yùn)行時(shí)的麻煩和擔(dān)心版本維護(hù)的麻煩。

事實(shí)上,CRI 允許我們將容器運(yùn)行時(shí)部分與 Kubernetes 分離,最重要的是,允許 Kata Containers 和 gVisor 等技術(shù)以 containerd 的形式連接到容器運(yùn)行時(shí)。

在 Kubernetes 1.14 中,RuntimeClass 再次作為內(nèi)置集群資源引入,其核心是處理程序?qū)傩浴?/p>

處理程序是指接收容器創(chuàng)建請(qǐng)求的程序,對(duì)應(yīng)于容器運(yùn)行時(shí)。

kind: RuntimeClass
apiVersion: node.k8s.io/v1
metadata:
name: #RuntimeClass Name
handler: #container runtime for example: runc
overhead:
podFixed:
memory: "" # 64Mi
cpu: "" # 250m
scheduling:
nodeSelector:
<key>: <value> # container-rt: gvisor
  • handler 字段指向要使用的特定容器運(yùn)行時(shí)或配置。
  • 聲明開銷允許集群(包括調(diào)度程序)在做出有關(guān) Pod 和資源的決策時(shí)考慮它。通過使用這些字段,您可以使用此 RuntimeClass 指定運(yùn)行 pod 的開銷,并確保在 Kubernetes 中考慮這些開銷。
  • 調(diào)度字段用于確保 Pod 被調(diào)度在正確的節(jié)點(diǎn)上。

默認(rèn)情況下,如果我們有一個(gè)帶有 Docker 或 containerd 的集群,我們的處理程序是 runc,但如果我們使用 gVisor,它將是 runc。

在 Kubernetes 中使用 gVisor 隔離 Linux 主機(jī)和容器

現(xiàn)在我們將了解如何在 Kubernetes 集群中擁有多個(gè)容器運(yùn)行時(shí),并為敏感工作負(fù)載選擇更嚴(yán)格的容器運(yùn)行時(shí)。

在本教程中,我使用了之前的項(xiàng)目,在該項(xiàng)目中我使用 containerd 安裝了 Kubernetes 集群。

https://github.com/alessandrolomanto/k8s-vanilla-containerd

初始化 Kubernetes 集群:

make vagrant-start

啟動(dòng)機(jī)器后,驗(yàn)證所有組件是否已啟動(dòng)并運(yùn)行:

vagrant ssh master

kubectl get nodes
NAME      STATUS   ROLES                  AGE     VERSION

master Ready control-plane,master 7m59s v1.21.0

worker1 Ready <none> 5m50s v1.21.0

worker2 Ready <none> 3m51s v1.21.0

在 worker1 上安裝gVisor:

ssh worker1 # Vagrant default password: vagrant

sudo su

安裝最新的 gVisor 版本:

(
set -e
ARCH=$(uname -m)
URL=https://storage.googleapis.com/gvisor/releases/release/latest/${ARCH}
wget ${URL}/runsc ${URL}/runsc.sha512 \\
${URL}/containerd-shim-runsc-v1 ${URL}/containerd-shim-runsc-v1.sha512
sha512sum -c runsc.sha512 \\
-c containerd-shim-runsc-v1.sha512
rm -f *.sha512
chmod a+rx runsc containerd-shim-runsc-v1
sudo mv runsc containerd-shim-runsc-v1 /usr/local/bin
)
FINISHED --2022-04-28 07:24:44--

Total wall clock time: 5.2s

Downloaded: 4 files, 62M in 3.1s (20.2 MB/s)

runsc: OK

containerd-shim-runsc-v1: OK

配置容器運(yùn)行時(shí):

cat <<EOF | sudo tee /etc/containerd/config.toml
version = 2
[plugins."io.containerd.runtime.v1.linux"]
shim_debug = true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runsc]
runtime_type = "io.containerd.runsc.v1"
EOF

重啟容器服務(wù):

sudo systemctl restart containerd

為 gVisor 安裝 RuntimeClass:

cat <<EOF | kubectl apply -f -
apiVersion: node.k8s.io/v1beta1
kind: RuntimeClass
metadata:
name: gvisor
handler: runsc
EOF

驗(yàn)證:

vagrant@master:~$ kubectl get runtimeclass

NAME HANDLER AGE

gvisor runsc 17s

使用 gVisor RuntimeClass 創(chuàng)建一個(gè) Pod:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: nginx-gvisor
spec:
runtimeClassName: gvisor
containers:
- name: nginx
image: nginx
EOF

驗(yàn)證 Pod 是否正在運(yùn)行:

kubectl get pod nginx-gvisor -o wide
vagrant@master:~$ kubectl get pod nginx-gvisor -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

nginx-gvisor 1/1 Running 0 31s 192.168.235.129 worker1 <none> <none>

有關(guān)更新信息,請(qǐng)關(guān)注官方文檔。https://gvisor.dev/docs/user_guide/install/

結(jié)論

我們已經(jīng)看到當(dāng)前的容器技術(shù)存在弱隔離問題。快速修補(bǔ)容器和最低安全上下文特權(quán)等常見做法可以有效限制攻擊面。我們甚至應(yīng)該開始像上面的教程那樣實(shí)施運(yùn)行時(shí)安全措施,因?yàn)楝F(xiàn)在可能有多個(gè)容器運(yùn)行時(shí)。

當(dāng)然,這不是每個(gè)人都需要的東西,但是當(dāng)您想要運(yùn)行不受信任的容器而不以任何方式影響主機(jī)時(shí),它肯定會(huì)派上用場(chǎng)。

假設(shè)你是一個(gè)容器托管服務(wù),在同一臺(tái)主機(jī)上啟動(dòng)不同客戶的容器。你會(huì)因?yàn)楣蚕砩舷挛亩鴵p害其他客戶嗎?開始思考如何緩解這些問題。

責(zé)任編輯:趙寧寧 來源: 云原生技術(shù)愛好者社區(qū)
相關(guān)推薦

2021-09-17 16:28:22

零信任網(wǎng)絡(luò)防御

2024-07-30 08:00:00

Kubernetes數(shù)據(jù)庫(kù)

2021-08-11 10:38:08

云計(jì)算云計(jì)算環(huán)境云應(yīng)用

2021-08-09 09:00:00

Kubernetes云計(jì)算架構(gòu)

2017-09-18 10:05:15

WindowsLinux容器

2020-09-19 18:03:42

Docker

2020-07-13 07:00:21

Kubernetes

2022-01-21 10:58:39

JavaScriptGolangPython

2024-07-08 09:22:16

2020-07-20 07:00:00

KubernetesHostPath

2021-11-11 09:01:01

Helm Chart Kubernetes

2023-11-28 16:20:07

2013-05-14 10:53:43

2021-09-16 17:38:49

UbuntuLinuxJava

2019-07-12 09:30:12

DashboardDockerDNS

2020-04-10 08:00:08

Kubernetes補(bǔ)丁pod

2022-07-01 09:00:00

零信任網(wǎng)絡(luò)安全Kubernetes

2019-12-11 14:27:39

數(shù)據(jù)庫(kù)集群Kubernetes

2014-10-11 11:30:43

CentOSDocker

2021-12-21 15:17:53

Kubernetes緩存Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 伊人网一区 | 一区二区三区在线电影 | av片免费| 一级二级三级黄色 | 97免费在线观看视频 | 国产精品久久久久久久久久久久 | 四虎永久在线精品免费一区二 | 国产成人一区二区三区精 | 精品国产乱码久久久久久果冻传媒 | 成人福利| 国产日韩一区二区三免费高清 | 久久婷婷国产麻豆91 | 亚洲aⅴ| 美女爽到呻吟久久久久 | 毛片久久久 | 国产精品久久久久久久久久久久久 | 亚洲一区二区免费 | 日韩精品一区二区三区中文字幕 | 综合国产 | 国产在线二区 | 国产在线精品一区 | 动漫www.被爆羞羞av44 | 黄网站在线观看 | 人人爽人人爽人人片av | 成人网址在线观看 | 国产乱人伦 | 欧美成人免费 | 尤物在线精品视频 | 中文字幕日韩在线观看 | 欧美日本韩国一区二区 | 久久久这里都是精品 | 国产精品视频入口 | 国产视频久久 | 91社区在线观看播放 | 亚洲人成人一区二区在线观看 | 精品99久久久久久 | 亚洲综合在线一区 | 久久久国产一区 | 日本在线视频不卡 | 国产精品永久免费 | 欧美九九 |