Kyverno自動(dòng)為Pod控制器生成規(guī)則

自動(dòng)為 Pod 控制器生成規(guī)則。

Pod 是 Kubernetes 中最常見的對(duì)象類型之一冠摄,因此也是大多數(shù)類型驗(yàn)證規(guī)則的重點(diǎn)。但 Kubernetes 并不推薦直接創(chuàng)建 Pod。相反愧驱,Kubernetes 有許多更高級(jí)別的控制器直接或間接管理 Pod,即 Deployment椭盏、DaemonSet组砚、StatefulSet、Job 和 CronJob 等掏颊。編寫針對(duì) Pod 的策略時(shí)糟红,必須為每個(gè)控制器編寫策略將是乏味且低效的。Kyverno 通過支持從為 Pod 編寫的規(guī)則自動(dòng)生成更高級(jí)別控制器的策略規(guī)則來解決此問題乌叶。

例如盆偿,當(dāng)創(chuàng)建如下所示的驗(yàn)證策略以檢查所有鏡像是否來自內(nèi)部可信 registry 時(shí),該策略適用于所有能夠生成 Pod 的資源准浴。

apiVersion : kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: restrict-image-registries
spec:
  validationFailureAction: enforce
  rules:
  - name: validate-registries
    match:
      any:
      - resources:
          kinds:
          - Pod
    validate:
      message: "Images may only come from our internal enterprise registry."
      pattern:
        spec:
          containers:
          - image: "registry.domain.com/*"

一旦上述規(guī)則被創(chuàng)建事扭,就可以在自動(dòng)生成的規(guī)則中看到一下配置,這些都是 Kyverno 添加到規(guī)則中的乐横。

spec:
  background: true
  failurePolicy: Fail
  rules:
  - match:
      any:
      - resources:
          kinds:
          - Pod
    name: validate-registries
    validate:
      message: Images may only come from our internal enterprise registry.
      pattern:
        spec:
          containers:
          - image: registry.domain.com/*
  - match:
      any:
      - resources:
          kinds:
          - DaemonSet
          - Deployment
          - Job
          - StatefulSet
    name: autogen-validate-registries
    validate:
      message: Images may only come from our internal enterprise registry.
      pattern:
        spec:
          template:
            spec:
              containers:
              - image: registry.domain.com/*
  - match:
      any:
      - resources:
          kinds:
          - CronJob
    name: autogen-cronjob-validate-registries
    validate:
      message: Images may only come from our internal enterprise registry.
      pattern:
        spec:
          jobTemplate:
            spec:
              template:
                spec:
                  containers:
                  - image: registry.domain.com/*
  validationFailureAction: enforce

注意:Kyverno 1.7.0 中求橄,新增了一個(gè)容器參數(shù) --autogenInternals(目前是 beta feature今野,默認(rèn)不啟用),用于防止回寫這些自動(dòng)生成的規(guī)則到 .spec 字段罐农。設(shè)置為 true 可以啟用該新特性条霜。

自動(dòng)生成行為是被 pod-policies.kyverno.io/autogen-controllers 注解控制的。

默認(rèn)情況下啃匿,Kyverno 會(huì)加入一個(gè)注解 pod-policies.kyverno.io/autogen-controllers=DaemonSet,Deployment,Job,StatefulSet,CronJob蛔外,以生成應(yīng)用于這些控制器的附加規(guī)則。你可以通過修改 pod-policies.kyverno.io/autogen-controllers 注解溯乒,為自動(dòng)生成的規(guī)則自定義目標(biāo) Pod 控制器夹厌。例如,如果 policy 的注解設(shè)置為 pod-policies.kyverno.io/autogen-controllers=Deployment裆悄,Kyverno 將會(huì)為 Deployment 自動(dòng)生成規(guī)則矛纹。

如果在 matchexclude 塊中指定以下資源字段/對(duì)象時(shí),Kyverno 都會(huì)跳過生成 Pod 控制器規(guī)則光稼,因?yàn)檫@些過濾器可能不適用于 Pod 控制器:

  • names
  • selector
  • annotations

如果想禁用自動(dòng)為 Pod 控制器生成規(guī)則或南,將 pod-policies.kyverno.io/autogen-controllers 設(shè)置為 none 即可。

當(dāng)為選定的 Pod 控制器禁用自動(dòng)生成規(guī)則時(shí)艾君,Kyverno 仍將 Pod 上的策略匹配應(yīng)用于由這些控制器生成的 Pod采够。要免除這些 Pod,請(qǐng)使用帶有類似于下面的表達(dá)式的前置條件冰垄,這可能允許 Job 控制器創(chuàng)建的 Pod 通過蹬癌。

- key: Job
  operator: AnyNotIn
  value: "{{ request.object.metadata.ownerReferences[].kind }}"

通過 Metadata 排除

在某些情況下,可能需要中 exclude 塊中使用標(biāo)簽或注解來排除 Pod虹茶。例如逝薪,如下的 match 和 exclude 看用于匹配所有(除了有 policy.test/require-requests-limits=skip 注解)的 Pod。

rules:
  - name: validate-resources
    match:
      any:
      - resources:
          kinds:
            - Pod
    exclude:
      any:
      - resources:
          annotations:
            policy.test/require-requests-limits: skip

當(dāng) Kyverno 看到上面提到的這些類型的字段時(shí)蝴罪,它會(huì)跳過規(guī)則的自動(dòng)生成董济。另一個(gè)選擇可能是通過編寫一個(gè)查找 request.object.metadata.* 的表達(dá)式的前置條件來實(shí)現(xiàn)相同的效果。作為自動(dòng)生成的一部分要门,Kyverno 會(huì)查找所有以 request.object 開頭的虏肾、來自 AdmissionReview 的變量,并翻譯后將其應(yīng)用于每個(gè)合適的 Pod 控制器暂衡。以 Deployment 為例询微,在自動(dòng)生成的規(guī)則中會(huì)被翻譯為 request.object.spec.template.metadata.,這指向 Pod 模板中的 metadata狂巢,而不是 Deployment 自身的 metadata撑毛。要解決此問題,可以在前置條件的 object 上使用雙引號(hào),這樣就不會(huì)將 request.object.metadata. 翻譯成 request.object.spec.template.metadata.*藻雌,如下所示:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-requests-limits
spec:
  validationFailureAction: enforce
  background: true
  rules:
    - name: validate-resources
      match:
        any:
        - resources:
            kinds:
              - Pod
      preconditions:
        all:
        - key: "{{ request.\"object\".metadata.annotations.\"policy.test.io/require-requests-limits\" || '' }}"
          operator: NotEquals
          value: skip
      validate:
        message: "CPU and memory resource requests and limits are required."
        pattern:
          spec:
            containers:
              - resources:
                  requests:
                    memory: "?*"
                    cpu: "?*"
                  limits:
                    memory: "?*"

這種方式和上面使用 exclude 塊的方式有相同的效果雌续。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者胯杭。
  • 序言:七十年代末驯杜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子做个,更是在濱河造成了極大的恐慌鸽心,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件居暖,死亡現(xiàn)場(chǎng)離奇詭異顽频,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)太闺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門糯景,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人省骂,你說我怎么就攤上這事蟀淮。” “怎么了钞澳?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵怠惶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我轧粟,道長(zhǎng)甚疟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任逃延,我火速辦了婚禮,結(jié)果婚禮上轧拄,老公的妹妹穿的比我還像新娘揽祥。我一直安慰自己,他們只是感情好檩电,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布拄丰。 她就那樣靜靜地躺著,像睡著了一般俐末。 火紅的嫁衣襯著肌膚如雪料按。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天卓箫,我揣著相機(jī)與錄音载矿,去河邊找鬼。 笑死烹卒,一個(gè)胖子當(dāng)著我的面吹牛闷盔,可吹牛的內(nèi)容都是我干的弯洗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逢勾,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼牡整!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起溺拱,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤逃贝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后迫摔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沐扳,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年攒菠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迫皱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辖众,死狀恐怖卓起,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凹炸,我是刑警寧澤戏阅,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站啤它,受9級(jí)特大地震影響奕筐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜变骡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一离赫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塌碌,春花似錦渊胸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至接剩,卻和暖如春切厘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背懊缺。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工疫稿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓而克,卻偏偏與公主長(zhǎng)得像靶壮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子员萍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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