Kyverno介紹

Kyverno(希臘語(yǔ)為“治理”)是專為 Kubernetes 設(shè)計(jì)的策略引擎。它的許多功能中的一些包括:

  • 策略作為 Kubernetes 資源(無(wú)需學(xué)習(xí)新語(yǔ)言!)

  • 驗(yàn)證、變更或生成任何資源

  • 驗(yàn)證軟件供應(yīng)鏈安全的容器鏡像

  • 巡檢鏡像元數(shù)據(jù)

  • 使用標(biāo)簽選擇器和通配符匹配資源

  • 使用疊加層進(jìn)行驗(yàn)證和變更(比如 Kustomize!)

  • 跨命名空間同步配置

  • 使用準(zhǔn)入控制阻止不符合要求的資源囱稽,或報(bào)告違反策略的情況

  • 在應(yīng)用到集群之前,在 CI/CD 管道中使用 Kyverno CLI 測(cè)試策略并驗(yàn)證資源

  • 使用 git 和 kustomize 等熟悉的工具像管理代碼一樣管理策略

Kyverno 允許集群管理員獨(dú)立于工作負(fù)載配置來(lái)管理特定于環(huán)境的配置二跋,并為其集群實(shí)施配置最佳實(shí)踐战惊。 Kyverno 可用于掃描現(xiàn)有工作負(fù)載以使其符合最佳實(shí)踐,也可用于通過(guò)阻止或更改 API 請(qǐng)求來(lái)強(qiáng)制執(zhí)行最佳實(shí)踐扎即。

Kyverno 如何工作吞获?

Kyverno 在 Kubernetes 集群中作為動(dòng)態(tài)準(zhǔn)入控制器運(yùn)行况凉。 Kyverno 從 kube-apiserver 接收驗(yàn)證和修改準(zhǔn)入 webhook HTTP 回調(diào),并應(yīng)用匹配策略返回執(zhí)行準(zhǔn)入策略或拒絕請(qǐng)求的結(jié)果各拷。

Kyverno 策略可以使用資源種類刁绒、名稱和標(biāo)簽選擇器匹配資源。 名稱中支持通配符烤黍。

變更策略可以編寫為overlay(類似于 Kustomize)或 RFC 6902 JSON 補(bǔ)丁知市。 驗(yàn)證策略還使用 overlay 樣式語(yǔ)法,支持模式匹配和條件(if-then-else)處理速蕊。

使用 Kubernetes 事件捕獲策略執(zhí)行結(jié)果嫂丙。 Kyverno 還報(bào)告現(xiàn)有資源的政策違規(guī)行為。

下圖顯示了 Kyverno 的高級(jí)架構(gòu):

image.png

Kyverno 的高可用性安裝可以運(yùn)行多個(gè)副本规哲, Kyverno 的每個(gè)副本將具有多個(gè)執(zhí)行不同功能的控制器奢入。Webhook 處理來(lái)自 Kubernetes API Server 的 AdmissionReview 請(qǐng)求,其 Monitor 組件生成和管理所需的配置媳叨。PolicyController 監(jiān)視策略資源并根據(jù)配置的掃描間隔啟動(dòng)后臺(tái)掃描。GenerateController 管理生成的資源的生命周期关顷。

快速開(kāi)始

本小節(jié)將幫助您安裝 Kyverno 并創(chuàng)建您的第一個(gè)策略糊秆。

注意

您的 Kubernetes 集群版本必須高于 v1.14,否則會(huì)增加 webhook 超時(shí)议双。 檢查兼容性矩陣以確保您的 Kubernetes 版本受支持痘番。 要檢查版本,請(qǐng)輸入 kubectl version平痰。

您可以選擇直接從最新版本清單安裝 Kyverno 或使用 Helm汞舱。

要使用最新版本清單(可能是預(yù)發(fā)行版)安裝 Kyverno:

kubectl create -f https://raw.githubusercontent.com/kyverno/kyverno/main/config/install.yaml

也可以使用 Helm chart 安裝 Kyverno:

# 添加 Helm 倉(cāng)庫(kù)
helm repo add kyverno https://kyverno.github.io/kyverno/

# 掃描你的 Helm 倉(cāng)庫(kù),以獲取最新可用的 chart
helm repo update

# 將 Kyverno Helm char 安裝到一個(gè)新的叫作 "kyverno" 的命名空間中
helm install kyverno kyverno/kyverno -n kyverno --create-namespace

將以下策略添加到您的集群宗雇。 它包含一個(gè)驗(yàn)證規(guī)則昂芜,要求所有 Pod 都有一個(gè) app.kubernetes.io/name 標(biāo)簽。 Kyverno 支持不同的規(guī)則類型來(lái)驗(yàn)證赔蒲、變更泌神、生成和驗(yàn)證鏡像配置。策略屬性 validationFailureAction 設(shè)置為強(qiáng)制阻止不合規(guī)的 API 請(qǐng)求(使用默認(rèn)值 audit 將報(bào)告違規(guī)但不阻止請(qǐng)求舞虱。)

kubectl create -f- << EOF
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-labels
spec:
  validationFailureAction: enforce
  rules:
  - name: check-for-labels
    match:
      any:
      - resources:
          kinds:
          - Pod
    validate:
      message: "label 'app.kubernetes.io/name' is required"
      pattern:
        metadata:
          labels:
            app.kubernetes.io/name: "?*"
EOF

嘗試創(chuàng)建一個(gè)沒(méi)有所需標(biāo)簽的 Deployment:

kubectl create deployment nginx --image=nginx

你會(huì)看到如下報(bào)錯(cuò)信息:

error: failed to create deployment: admission webhook "validate.kyverno.svc-fail" denied the request: 

resource Deployment/default/nginx was blocked due to the following policies

require-labels:
  autogen-check-for-labels: 'validation error: label ''app.kubernetes.io/name'' is
    required. Rule autogen-check-for-labels failed at path /spec/template/metadata/labels/app.kubernetes.io/name/'

注意

Kyverno 可以配置為排除系統(tǒng)命名空間欢际,如 kube-system 和 kyverno。 確保在用戶定義的命名空間或默認(rèn)命名空間中創(chuàng)建 Deployment矾兜。

盡管 ClusterPolicy 在 Pod 上匹配损趋,但 Kyverno 智能地將其應(yīng)用于所有能夠默認(rèn)生成 Pod 的源,包括上面的 Deployment椅寺。

創(chuàng)建一個(gè)帶有所需標(biāo)簽的 Pod浑槽。 例如蒋失,使用此命令:

kubectl run nginx --image nginx --labels app.kubernetes.io/name=nginx

此 Pod 配置符合策略,未被阻止括荡。

恭喜高镐,您剛剛在 Kubernetes 集群中實(shí)施了一項(xiàng)策略!

通過(guò)刪除所有集群策略進(jìn)行清理:

kubectl delete cpol --all
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畸冲,一起剝皮案震驚了整個(gè)濱河市嫉髓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邑闲,老刑警劉巖算行,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異苫耸,居然都是意外死亡州邢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門褪子,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)量淌,“玉大人,你說(shuō)我怎么就攤上這事嫌褪⊙绞啵” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵笼痛,是天一觀的道長(zhǎng)裙秋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)缨伊,這世上最難降的妖魔是什么摘刑? 我笑而不...
    開(kāi)封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮刻坊,結(jié)果婚禮上枷恕,老公的妹妹穿的比我還像新娘。我一直安慰自己谭胚,他們只是感情好活尊,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著漏益,像睡著了一般蛹锰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绰疤,一...
    開(kāi)封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天铜犬,我揣著相機(jī)與錄音,去河邊找鬼。 笑死癣猾,一個(gè)胖子當(dāng)著我的面吹牛敛劝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纷宇,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼夸盟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了像捶?” 一聲冷哼從身側(cè)響起上陕,我...
    開(kāi)封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拓春,沒(méi)想到半個(gè)月后释簿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硼莽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年庶溶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懂鸵。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡偏螺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匆光,到底是詐尸還是另有隱情砖茸,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布殴穴,位于F島的核電站,受9級(jí)特大地震影響货葬,放射性物質(zhì)發(fā)生泄漏采幌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一震桶、第九天 我趴在偏房一處隱蔽的房頂上張望休傍。 院中可真熱鬧,春花似錦蹲姐、人聲如沸磨取。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)忙厌。三九已至,卻和暖如春江咳,著一層夾襖步出監(jiān)牢的瞬間逢净,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爹土,地道東北人甥雕。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胀茵,于是被迫代替她去往敵國(guó)和親社露。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容