1. 程式人生 > 其它 >opa gatekeeper筆記:AdmissionReview input.request請求物件結構

opa gatekeeper筆記:AdmissionReview input.request請求物件結構

官方:https://v1-17.docs.kubernetes.io/zh/docs/reference/access-authn-authz/extensible-admission-controllers/#request
https://www.openpolicyagent.org/docs/latest/kubernetes-primer/#input-document
工具:https://www.bejson.com/json/json2yaml/

用途:

可用於編寫constrainttemplate的rego程式碼時,呼叫kubectl預設的input

AdmissionReview input.request請求物件示例

apiVersion: admission.k8s.io/v1
kind: AdmissionReview
request:
  uid: 705ab4f5-6393-11e8-b7cc-42010a800002
  kind:
    group: autoscaling
    version: v1
    kind: Scale
  resource:
    group: apps
    version: v1
    resource: deployments
  subResource: scale
  requestKind:
    group: autoscaling
    version: v1
    kind: Scale
  requestResource:
    group: apps
    version: v1
    resource: deployments
  requestSubResource: scale
  name: my-deployment
  namespace: my-namespace
  operation: UPDATE
  userInfo:
    username: admin
    uid: 014fbff9a07c
    groups:
      - 'system:authenticated'
      - my-admin-group
    extra:
      some-key:
        - some-value1
        - some-value2
  object:
    apiVersion: autoscaling/v1
    kind: Scale
  oldObject:
    apiVersion: autoscaling/v1
    kind: Scale
  options:
    apiVersion: meta.k8s.io/v1
    kind: UpdateOptions
  dryRun: false

Json原版與註釋

{
  "apiVersion": "admission.k8s.io/v1",
  "kind": "AdmissionReview",
  "request": {
    # 唯一標識此准入回撥的隨機 uid
    "uid": "705ab4f5-6393-11e8-b7cc-42010a800002",

    # 傳入完全正確的 group/version/kind 物件
    "kind": {"group":"autoscaling","version":"v1","kind":"Scale"},
    # 修改 resource 的完全正確的的 group/version/kind
    "resource": {"group":"apps","version":"v1","resource":"deployments"},
    # subResource(如果請求是針對 subResource 的)
    "subResource": "scale",

    # 在對 API 伺服器的原始請求中,傳入物件的標準 group/version/kind
    # 僅當 webhook 指定 `matchPolicy: Equivalent` 且將對 API 伺服器的原始請求轉換為 webhook 註冊的版本時,這才與 `kind` 不同。
    "requestKind": {"group":"autoscaling","version":"v1","kind":"Scale"},
    # 在對 API 伺服器的原始請求中正在修改的資源的標準 group/version/kind
    # 僅當 webhook 指定了 `matchPolicy:Equivalent` 並且將對 API 伺服器的原始請求轉換為 webhook 註冊的版本時,這才與 `resource` 不同。
    "requestResource": {"group":"apps","version":"v1","resource":"deployments"},
    # subResource(如果請求是針對 subResource 的)
    # 僅當 webhook 指定了 `matchPolicy:Equivalent` 並且將對 API 伺服器的原始請求轉換為該 webhook 註冊的版本時,這才與 `subResource` 不同。
    "requestSubResource": "scale",

    # 被修改資源的名稱
    "name": "my-deployment",
    # 如果資源是屬於名稱空間(或者是名稱空間物件),則這是被修改的資源的名稱空間
    "namespace": "my-namespace",

    # 操作可以是 CREATE、UPDATE、DELETE 或 CONNECT
    "operation": "UPDATE",

    "userInfo": {
      # 向 API 伺服器發出請求的經過身份驗證的使用者的使用者名稱
      "username": "admin",
      # 向 API 伺服器發出請求的經過身份驗證的使用者的 UID
      "uid": "014fbff9a07c",
      # 向 API 伺服器發出請求的經過身份驗證的使用者的組成員身份
      "groups": ["system:authenticated","my-admin-group"],
      # 向 API 伺服器發出請求的使用者相關的任意附加資訊
      # 該欄位由 API 伺服器身份驗證層填充,並且如果 webhook 執行了任何 SubjectAccessReview 檢查,則應將其包括在內。
      "extra": {
        "some-key":["some-value1", "some-value2"]
      }
    },

    # object 是被接納的新物件。
    # 對於 DELETE 操作,它為 null。
    "object": {"apiVersion":"autoscaling/v1","kind":"Scale",...},
    # oldObject 是現有物件。
    # 對於 CREATE 和 CONNECT 操作,它為 null。
    "oldObject": {"apiVersion":"autoscaling/v1","kind":"Scale",...},
    # options 包含要接受的操作的選項,例如 meta.k8s.io/v CreateOptions、UpdateOptions 或 DeleteOptions。
    # 對於 CONNECT 操作,它為 null。
    "options": {"apiVersion":"meta.k8s.io/v1","kind":"UpdateOptions",...},

    # dryRun 表示 API 請求正在以 `dryrun` 模式執行,並且將不會保留。
    # 帶有副作用的 Webhook 應該避免在 dryRun 為 true 時啟用這些副作用。
    # 有關更多詳細資訊,請參見 http://k8s.io/docs/reference/using-api/api-concepts/#make-a-dry-run-request
    "dryRun": false
  }
}
#========== 團結,緊張,嚴肅,活潑 ===========#