iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
DevOps

玩耍開源k8s30天系列 第 29

day29 : OPA規範k8s yaml(下)

今天會來實作OPA的配置,由於之前有透過rancher管理了k8s環境,所以就可以從rancher的套件管理項目中找到OPA的套件,透過rancher安裝好OPA後可以在rancher的介面上操作OPA的yaml如下
https://ithelp.ithome.com.tw/upload/images/20210929/20139661woqFynQeMi.png
預設rancher提供了兩個範例(repo來源限制、需要label才能佈署),也可以自己在constraints和template中撰寫需要的規則和要受影響的對象,我這邊額外做一個image不可以為latest的範例來demo OPA


apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
  annotations:
    meta.helm.sh/release-name: rancher-gatekeeper
    meta.helm.sh/release-namespace: cattle-gatekeeper-system
  generation: 5
  labels:
    app.kubernetes.io/managed-by: Helm
  name: imagetag
spec:
  crd:
    spec:
      names:
        kind: k8sallowedimagetag
      validation:
        openAPIV3Schema:
          properties:
            repos:
              items:
                type: string
              type: array
  targets:
  - rego: |
      package k8sblocklatesttag
      violation[{"msg": msg, "details": {}}]{
        input.review.object.kind == "Pod"
        imagename := input.review.object.spec.containers[_].image
        endswith(imagename,"latest")
        msg := "Images with tag the tag \"latest\" is prohibited"
      }
    target: admission.k8s.gatekeeper.sh

配置完成後佈署服務會發現pod會失敗(一直是0個起不來)
https://ithelp.ithome.com.tw/upload/images/20210929/20139661epuNwIXArO.png
describe deployment後就會發現被webhook阻擋並且原因是image tag不可以為latest的訊息唷(Images with tag the tag "latest" is prohibited),其實主要就是要在rego內撰寫要怎麼檢核yaml,通常常用的規則會是repo來源限制、image tag 和禁止latest、不允許privileged權限,撰寫上其實網路上也有許多範例可以參考。


上一篇
day28 : OPA規範k8s yaml(上)
下一篇
day30 : 寫不完所有東西的最後一天
系列文
玩耍開源k8s30天31

尚未有邦友留言

立即登入留言