如何進(jìn)行Kubernetes中準(zhǔn)入控制器的分析,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元連山做網(wǎng)站,已為上家服務(wù),為連山各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
每個(gè)針對(duì)Kubernetes
資源對(duì)象的操作請(qǐng)求,都要經(jīng)過(guò)kube-apiserver
的層層審查才會(huì)被放行。對(duì)于讀操作而言,需要經(jīng)過(guò)認(rèn)證(是否是合法用戶)和鑒權(quán)(是否擁有權(quán)限);而對(duì)于寫操作而言,除了要經(jīng)過(guò)認(rèn)證和鑒權(quán)外,還要檢查請(qǐng)求是合乎要求,只有順利通過(guò)這些審查才會(huì)被持久化到etcd
存儲(chǔ)中。
準(zhǔn)入控制器(Admission Controller)是用于審查請(qǐng)求的組件,它會(huì)劫持發(fā)往kube-apiserver
的請(qǐng)求,對(duì)請(qǐng)求進(jìn)行審查(必要時(shí)也會(huì)修改請(qǐng)求內(nèi)容),它是kube-apiserver
審查鏈中重要的一環(huán),不合理的請(qǐng)求會(huì)被拒絕。
kube-apiserver
支持配置多個(gè)準(zhǔn)入控制器,準(zhǔn)入控制器分為修改型(Mutating)控制器和校驗(yàn)型(Validating)控制器。修改型控制器會(huì)自動(dòng)根據(jù)指定的策略對(duì)請(qǐng)求進(jìn)行修改,而校驗(yàn)型控制器則只是單純地檢查請(qǐng)求是否合乎要求,充當(dāng)“看門狗”的角色。
多個(gè)準(zhǔn)入控制器以插件(Webhook Plugin)的形式被組織起來(lái),kube-apiserver
在審查請(qǐng)求時(shí)會(huì)先把請(qǐng)求交給修改型控制器對(duì)請(qǐng)求進(jìn)行必要的修改,然后再將請(qǐng)求交給校驗(yàn)型控制器進(jìn)行審查。下圖展示了請(qǐng)求的審查完整路徑,以及準(zhǔn)入控制器所在的位置:
API請(qǐng)求到達(dá)kube-apiserver
后會(huì)先進(jìn)行認(rèn)證(Authentication)和鑒權(quán)(Authorization),然后把請(qǐng)求交給修改型準(zhǔn)入控制器進(jìn)行必要的修改(多個(gè)修改型準(zhǔn)入控制器串行執(zhí)行),當(dāng)所有修改型準(zhǔn)入控制器執(zhí)行完畢后,再使用OpenAPI
校驗(yàn)功能進(jìn)行初步的語(yǔ)法校驗(yàn),接著再把請(qǐng)求交給校驗(yàn)型準(zhǔn)入控制器進(jìn)行語(yǔ)法或語(yǔ)義的校驗(yàn)(多個(gè)修改型準(zhǔn)入控制器并行執(zhí)行),最后再寫入etcd
。上面中的任何一個(gè)審查環(huán)節(jié)、任何一個(gè)準(zhǔn)入控制器返回失敗,都會(huì)造成請(qǐng)求被拒絕。
準(zhǔn)入控制器根據(jù)其部署形式可分為內(nèi)置控制器和動(dòng)態(tài)控制器兩種。內(nèi)置控制器集成在kube-apiserver
中,以插件的形式提供,每個(gè)插件都可以通過(guò)參數(shù)控制啟用或禁止;而動(dòng)態(tài)控制器則是按一定標(biāo)準(zhǔn)實(shí)現(xiàn)的服務(wù)。關(guān)于動(dòng)態(tài)控制器的更多內(nèi)容將會(huì)在后續(xù)章節(jié)中展開介紹,本節(jié)主要介紹內(nèi)置控制器的配置方法。
kube-apiserver
提供了數(shù)十個(gè)準(zhǔn)入控制器插件,其中一些是默認(rèn)開啟的,也可以通過(guò)參數(shù)顯式地控制啟用或禁用的插件。
通過(guò)kube-apiserver
的--enable-admission-plugins
參數(shù)可以設(shè)置除默認(rèn)啟用的控制器插件以外需要額外啟用的插件,多個(gè)插件名字以逗號(hào)分隔,例如以下參數(shù)開啟NodeRestriction
和ResourceQuota
兩個(gè)插件。
--enable-admission-plugins=NodeRestriction,ResourceQuota
該參數(shù)主要在需要啟用默認(rèn)禁用的插件時(shí)使用。
通過(guò)kube-apiserver
的--disable-admission-plugins
參數(shù)可以設(shè)置禁用的控制器插件,同樣多個(gè)插件名字以逗號(hào)分隔,例如以下參數(shù)關(guān)閉PodNodeSelector
和AlwaysDeny
兩個(gè)插件。
--disable-admission-plugins=PodNodeSelector,AlwaysDeny
該參數(shù)主要在需要禁用默認(rèn)啟用的插件時(shí)使用。
看完上述內(nèi)容,你們掌握如何進(jìn)行Kubernetes中準(zhǔn)入控制器的分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!