亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

Kubernetes webhook基礎知識介紹

2023-09-04 10:12:47
16
0

1. Kubernetes介紹(shao)

       Kubernetes是一(yi)個開源的(de)(de)容器(qi)編(bian)排平臺,用(yong)于(yu)自(zi)動化部署、擴展和(he)管(guan)理(li)(li)容器(qi)化應用(yong)程序。它(ta)提供(gong)了一(yi)種便(bian)捷的(de)(de)方式來(lai)管(guan)理(li)(li)容器(qi),使得應用(yong)程序可以在(zai)多個主(zhu)機上運(yun)行,并能夠自(zi)動處理(li)(li)容器(qi)的(de)(de)調(diao)度(du)、網絡和(he)存儲等方面的(de)(de)問題。Kubernetes具有高度(du)可擴展性和(he)靈活(huo)性,被廣泛(fan)用(yong)于(yu)構建(jian)和(he)管(guan)理(li)(li)云原生應用(yong)程序。

 

2.Kubernetes webhook介紹

       Kubernetes的Webhook是一種機制,用于與Kubernetes API進行(xing)交互和集(ji)成。它允許開發(fa)人員定(ding)(ding)(ding)義自定(ding)(ding)(ding)義的觸發(fa)器,當(dang)發(fa)生特定(ding)(ding)(ding)事(shi)件時,可以(yi)通過Webhook來執行(xing)一些自定(ding)(ding)(ding)義的邏(luo)輯(ji)。

具體來說(shuo),Kubernetes的Webhook能(neng)夠在以下幾個關鍵事件發生時觸發:

  1. Mutating Webhook:在(zai)創建或更新資源之(zhi)前,可以(yi)對(dui)請求(qiu)進行修(xiu)改。通過Webhook,可以(yi)自定義對(dui)請求(qiu)的(de)(de)修(xiu)改,例如自動(dong)注入某些標簽、修(xiu)改容器(qi)的(de)(de)環境變量(liang)等。

  2. Validation Webhook:在(zai)創建(jian)或更(geng)新資(zi)源之前,可以對請求(qiu)進(jin)行驗證(zheng)。通過Webhook,可以自定(ding)義(yi)驗證(zheng)邏輯(ji),例如檢查資(zi)源的(de)字段是否符合(he)特定(ding)的(de)規則或策略。

使用Webhook可以擴展和定制(zhi)Kubernetes的行為,使其適(shi)應特定的環境和需求。開發人員可以編寫Webhook服務,并(bing)將其配置到Kubernetes集群中(zhong),從而實現對Kubernetes API請求的自定義處理(li)。

 

3.應用場景(jing)

  1. 安(an)全(quan)性增(zeng)強:通過Admission控制Webhook,可以對Kubernetes資源的(de)創(chuang)建、更新或刪(shan)除(chu)進行自定義驗證,確(que)保只有符(fu)合(he)特定條件的(de)請(qing)求被允許(xu)執行。這可以提高(gao)集群的(de)安(an)全(quan)性,防(fang)止惡意(yi)或非法操作。

  2. 自動(dong)化和標準化:使用(yong)Mutating Webhook,可(ke)以在資(zi)源(yuan)(yuan)創建或更新之(zhi)前對(dui)請求進行修改。這使得(de)可(ke)以對(dui)資(zi)源(yuan)(yuan)應用(yong)一致的(de)配置、標簽或注解(jie),并自動(dong)執行一些常(chang)見的(de)操作,如自動(dong)添(tian)加sidecar容器、注入特定(ding)的(de)環(huan)境變量等。這樣(yang)可(ke)以實現自動(dong)化的(de)部(bu)署和配置管理,提高應用(yong)程序的(de)可(ke)靠(kao)性和一致性。

  3. 靈(ling)活(huo)性(xing)(xing)和可(ke)擴(kuo)展性(xing)(xing):Webhook機制允許(xu)您根據特定需(xu)求(qiu)或場景自定義驗證和處(chu)理(li)邏輯。這(zhe)樣可(ke)以擴(kuo)展Kubernetes平臺的能力(li),滿(man)足(zu)特定企業或組織的需(xu)求(qiu)。開發人員可(ke)以編寫自定義的Webhook服務,根據業務邏輯對(dui)請求(qiu)進行處(chu)理(li),在Kubernetes集群(qun)中(zhong)實現(xian)個(ge)性(xing)(xing)化的特性(xing)(xing)或定制策略。

  4. 第三(san)方(fang)集(ji)成和(he)(he)生態系統(tong):Kubernetes的(de)Webhook機制提供了與其他(ta)第三(san)方(fang)工(gong)(gong)具(ju)(ju)和(he)(he)服務集(ji)成的(de)橋梁(liang)。通過(guo)Webhook,可以將Kubernetes與其他(ta)服務或系統(tong)進行集(ji)成,如CI/CD工(gong)(gong)具(ju)(ju)、安(an)全審(shen)計(ji)工(gong)(gong)具(ju)(ju)、配置(zhi)管理工(gong)(gong)具(ju)(ju)等(deng),從而(er)構建更強(qiang)大和(he)(he)完整的(de)開發(fa)和(he)(he)運維生態系統(tong)。

       綜上所(suo)述,Kubernetes的(de)(de)Webhook在(zai)增強(qiang)安全性(xing)、實現自動化(hua)、提供靈活性(xing)和(he)促進第三方集成方面具有重要的(de)(de)應(ying)用意(yi)義,可以幫助開發(fa)人員更好地管理和(he)擴展Kubernetes平臺。

 

4. Validation Webhook 使用介紹:

4.1 資(zi)源(yuan)配置:

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: "pod-policy.example.com"
webhooks:
- name: "pod-policy.example.com"
  rules:
  - apiGroups: [""]
    apiVersions: ["v1"]
    operations: ["CREATE"]
    resources: ["pods"]
    scope: "Namespaced"
  clientConfig:
    service:
      namespace: "example-namespace"
      name: "example-service"
    caBundle: <CA_BUNDLE>
  admissionReviewVersions: ["v1"]
  sideEffects: None
  timeoutSeconds: 5

      以官網提(ti)供的(de)實例為例,要(yao)注冊準入 Webhook,需要(yao)創建 MutatingWebhookConfiguration 或 ValidatingWebhookConfiguration API 對象。 MutatingWebhookConfiguration 或ValidatingWebhookConfiguration 對象的名稱(cheng)必(bi)須是有效的 DNS 子域(yu)名。

每個 Webhook 必(bi)須指(zhi)定(ding)用于(yu)確(que)定(ding)是否(fou)應將對 apiserver 的(de)請求發送到 webhook 的(de)規則列表。 每個規則都指(zhi)定(ding)一個或多個 operations、apiGroups、apiVersions 和 resources 以(yi)及資(zi)源的(de) scope:

  • operations 列(lie)出一個(ge)或多個(ge)要(yao)匹配的操作。 可(ke)以是(shi)&nbsp; CREATE、UPDATE、DELETE、CONNECT 或 * 以(yi)匹(pi)配所有內容。

  • apiGroups 列出(chu)了一個(ge)或多(duo)個(ge)要匹配的 API 組(zu)。"" 是核心(xin) API 組。"*" 匹配所有 API 組。

  • apiVersions 列出了一(yi)個或多個要匹配的 API 版(ban)本。"*" 匹(pi)配所(suo)有 API 版本。

  • resources 列出了(le)一(yi)個或多個要匹(pi)配的(de)資源(yuan)。

    • "*" 匹配所有(you)資(zi)源(yuan),但不(bu)包括子資(zi)源(yuan)。

    • "*/*" 匹配所有資源,包括(kuo)子資源。

    • "pods/*" 匹配 pod 的所有子資源。

    • "*/status" 匹配所有 status 子資源。

  • scope 指定要匹配的范圍。有效值為 "Cluster"、"Namespaced" 和 "*"。 子資源(yuan)匹配(pei)其父資源(yuan)的范圍。默(mo)認值為 "*"

    •  "Cluster"表示只有集群作用(yong)域(yu)的資源才能匹配此規則(ze)(API 對象 Namespace 是(shi)集群作用(yong)域(yu)的)。

    • "Namespaced"意味著僅具(ju)有名(ming)字(zi)空間的資源(yuan)才符合此(ci)規則(ze)。

    • "*" 表示(shi)沒有作用域限制。

如果傳入請(qing)求與任何 Webhook 的rules 指定 operations、groups、versions、 resources 和(he)  scope 匹配,則該(gai)請求(qiu)將發送到(dao) Webhook。

 

4.2 請求

Webhook 發送 POST 請求時,會將請求包裝成AdmissionReview,具體(ti)參(can)數(shu)如下所示:

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 時激活這些副作用。
  dryRun: False

可以通過反序列化獲取(qu)AdmissionReview對象的(de)所有信息,然(ran)后(hou)根據實際(ji)的(de)業務常見,對相關資(zi)源的(de)屬(shu)性進行驗證。

4.3 響應(ying)

     Webhook 會通過狀態碼(ma)、請(qing)求頭參數對應字(zi)段(duan)設置為Content-Type: application/json 和一個包(bao)含(han) AdmissionReview 對象(xiang)的 JSON 序列(lie)化格式來(lai)發送(song)響(xiang)應(ying)。該 AdmissionReview 對象與發送的(de)版本相(xiang)同(tong),且其中包含的(de) response 字段已被(bei)有效填充(chong)。

response 至(zhi)少必須包含以下字段:

  • uid,從發(fa)送到 Webhook 的(de) request.uid 中復制而來

  • allowed,設置為(wei)true或(huo)false

    {
      "apiVersion": "admission.k8s.io/v1",
      "kind": "AdmissionReview",
      "response": {
        "uid": "<value from request.uid>",
        "allowed": true
      }
    }

Validation Webhook會對請求根(gen)據自己的業務(wu)邏(luo)輯(ji)進行校驗(yan),其中(zhong)allowed字(zi)段為true則代表(biao)(biao)認證通過,alliowed為false則代表(biao)(biao)認證失(shi)敗。

 

總結:

      通過本文,解釋(shi)了(le)(le)Kubernetes的概念,介紹了(le)(le)Kubernetes Webhook的類型(xing)和應用(yong)場景。此外,還以Validation Webhook 為例,介紹資源準入以及(ji)請(qing)求和響(xiang)應。Kubernetes Webhook可以幫助用(yong)戶在Kubernetes平臺上完成更復雜(za)的功能,期待讀者在實際應用(yong)中發揮(hui)Webhook機制的優勢。

0條評論
作者已關閉評論
Ssssss云
5文(wen)章數
0粉(fen)絲數(shu)
Ssssss云
5 文(wen)章 | 0 粉絲(si)
Ssssss云
5文章數
0粉絲(si)數
Ssssss云
5 文(wen)章 | 0 粉絲
原創

Kubernetes webhook基礎知識介紹

2023-09-04 10:12:47
16
0

1. Kubernetes介紹(shao)

       Kubernetes是(shi)一(yi)個開源(yuan)的容(rong)(rong)器(qi)編(bian)排平臺,用(yong)于(yu)自動(dong)化部署、擴展和管理容(rong)(rong)器(qi)化應(ying)用(yong)程(cheng)序(xu)(xu)。它(ta)提(ti)供了一(yi)種便(bian)捷的方式(shi)來管理容(rong)(rong)器(qi),使得應(ying)用(yong)程(cheng)序(xu)(xu)可(ke)以在多個主機上運(yun)行,并能夠自動(dong)處理容(rong)(rong)器(qi)的調度、網絡和存儲等方面的問題。Kubernetes具(ju)有高度可(ke)擴展性(xing)和靈活性(xing),被(bei)廣泛(fan)用(yong)于(yu)構建和管理云原生應(ying)用(yong)程(cheng)序(xu)(xu)。

 

2.Kubernetes webhook介紹

       Kubernetes的Webhook是(shi)一種(zhong)機(ji)制,用(yong)于(yu)與Kubernetes API進行交互和(he)集成(cheng)。它允許(xu)開發人(ren)員定(ding)義(yi)自定(ding)義(yi)的觸發器,當發生特定(ding)事件時,可以通過Webhook來執行一些(xie)自定(ding)義(yi)的邏輯。

具體來說,Kubernetes的Webhook能(neng)夠在以(yi)下幾個關鍵事(shi)件發(fa)生時觸發(fa):

  1. Mutating Webhook:在創建(jian)或更新資(zi)源之(zhi)前,可以對請求(qiu)進(jin)行修改。通(tong)過Webhook,可以自(zi)定(ding)義對請求(qiu)的(de)修改,例如自(zi)動注入某些標(biao)簽、修改容(rong)器的(de)環境變(bian)量等。

  2. Validation Webhook:在創(chuang)建或更新資(zi)源(yuan)之前,可以(yi)對請求(qiu)進(jin)行驗證。通過Webhook,可以(yi)自定義驗證邏(luo)輯,例如檢查資(zi)源(yuan)的(de)字段是否符合(he)特(te)定的(de)規則或策略(lve)。

使(shi)用Webhook可以(yi)擴展和定(ding)制Kubernetes的行(xing)為,使(shi)其(qi)適應特定(ding)的環境和需求。開發人員可以(yi)編寫Webhook服(fu)務(wu),并將其(qi)配置到Kubernetes集群中,從而實現(xian)對Kubernetes API請求的自定(ding)義(yi)處理(li)。

 

3.應(ying)用場景

  1. 安全性(xing)增強:通(tong)過Admission控制Webhook,可以對Kubernetes資(zi)源的創建、更(geng)新或刪除(chu)進行自(zi)定義驗(yan)證,確保(bao)只有符合特定條件的請(qing)求被允許執行。這可以提高集群的安全性(xing),防止惡意或非法操作。

  2. 自動(dong)化(hua)和標準化(hua):使(shi)用(yong)(yong)Mutating Webhook,可(ke)以(yi)在資源創建或更新之前(qian)對(dui)請求進(jin)行修改(gai)。這使(shi)得可(ke)以(yi)對(dui)資源應用(yong)(yong)一致的(de)配置(zhi)、標簽(qian)或注(zhu)(zhu)解(jie),并(bing)自動(dong)執行一些常見的(de)操作,如自動(dong)添加sidecar容器、注(zhu)(zhu)入(ru)特定(ding)的(de)環境變量(liang)等。這樣(yang)可(ke)以(yi)實現自動(dong)化(hua)的(de)部署和配置(zhi)管理,提(ti)高應用(yong)(yong)程序的(de)可(ke)靠性和一致性。

  3. 靈活性和(he)可(ke)擴(kuo)展性:Webhook機制允許您根(gen)據特(te)定(ding)需(xu)求或(huo)(huo)場景自(zi)定(ding)義驗證和(he)處(chu)理(li)邏輯。這樣可(ke)以擴(kuo)展Kubernetes平臺的能力,滿足特(te)定(ding)企業或(huo)(huo)組織的需(xu)求。開發人員可(ke)以編寫自(zi)定(ding)義的Webhook服務,根(gen)據業務邏輯對請求進(jin)行(xing)處(chu)理(li),在Kubernetes集群中實現(xian)個性化的特(te)性或(huo)(huo)定(ding)制策(ce)略。

  4. 第三方集成(cheng)和(he)生態系統:Kubernetes的(de)Webhook機(ji)制提(ti)供了與其他第三方工(gong)具和(he)服(fu)務集成(cheng)的(de)橋(qiao)梁。通(tong)過(guo)Webhook,可以將(jiang)Kubernetes與其他服(fu)務或系統進行集成(cheng),如CI/CD工(gong)具、安全審計(ji)工(gong)具、配置管理工(gong)具等,從而構建更強大和(he)完整(zheng)的(de)開(kai)發和(he)運維生態系統。

       綜上所述,Kubernetes的Webhook在增(zeng)強安全性、實現自(zi)動(dong)化、提供靈活性和促進第三方集(ji)成方面(mian)具有重要的應用意義,可以幫助開(kai)發(fa)人員更好地管理(li)和擴(kuo)展Kubernetes平臺。

 

4. Validation Webhook 使用介紹:

4.1 資(zi)源配置:

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: "pod-policy.example.com"
webhooks:
- name: "pod-policy.example.com"
  rules:
  - apiGroups: [""]
    apiVersions: ["v1"]
    operations: ["CREATE"]
    resources: ["pods"]
    scope: "Namespaced"
  clientConfig:
    service:
      namespace: "example-namespace"
      name: "example-service"
    caBundle: <CA_BUNDLE>
  admissionReviewVersions: ["v1"]
  sideEffects: None
  timeoutSeconds: 5

      以官(guan)網提供(gong)的(de)實例(li)為例(li),要(yao)注冊(ce)準入 Webhook,需要(yao)創建 MutatingWebhookConfiguration 或 ValidatingWebhookConfiguration API 對象。 MutatingWebhookConfiguration 或ValidatingWebhookConfiguration 對象(xiang)的名(ming)稱必須是有效的 DNS 子域名(ming)。

每(mei)個 Webhook 必須指(zhi)定用于確(que)定是否應將(jiang)對 apiserver 的(de)(de)請求發送到 webhook 的(de)(de)規(gui)則(ze)列表。 每(mei)個規(gui)則(ze)都指(zhi)定一個或多個 operations、apiGroups、apiVersions 和 resources 以及資源的(de)(de) scope:

  • operations 列出一個或多個要匹配的操作(zuo)。 可以是  CREATE、UPDATE、DELETE、CONNECT 或(huo) * 以(yi)匹(pi)配所有內容(rong)。

  • apiGroups 列出(chu)了一個(ge)或多個(ge)要匹(pi)配的 API 組(zu)。"" 是核心 API 組。"*" 匹配所(suo)有 API 組。

  • apiVersions 列出了一個或多個要匹配的(de) API 版本。"*" 匹配所有 API 版本。

  • resources 列(lie)出了一個(ge)或多個(ge)要匹配的資源。

    • "*" 匹配所有(you)資源(yuan),但不包括子資源(yuan)。

    • "*/*" 匹配所有(you)資源(yuan),包(bao)括子資源(yuan)。

    • "pods/*" 匹配(pei) pod 的(de)所有子資源。

    • "*/status" 匹配(pei)所(suo)有 status 子資源。

  • scope 指定(ding)要匹(pi)配的(de)范圍。有效(xiao)值為(wei) "Cluster"、"Namespaced" 和(he) "*"。 子資(zi)源匹(pi)配其父資(zi)源的范圍。默認值為 "*"

    •  "Cluster"表示只有(you)集(ji)(ji)群(qun)作(zuo)用(yong)(yong)域(yu)(yu)的資源才能匹配此規則(ze)(API 對象(xiang) Namespace 是集(ji)(ji)群(qun)作(zuo)用(yong)(yong)域(yu)(yu)的)。

    • "Namespaced"意(yi)味著僅(jin)具有名字空間的資源(yuan)才符合此規則。

    • "*" 表示沒有作用域限制。

如果傳入(ru)請(qing)求與任何 Webhook 的rules 指定 operations、groups、versions、 resources 和  scope 匹配,則該請求將(jiang)發送到 Webhook。

 

4.2 請求

Webhook 發送 POST 請求(qiu)時,會將(jiang)請求(qiu)包裝成AdmissionReview,具(ju)體參數(shu)如下所示:

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 時激活這些副作用。
  dryRun: False

可以通過反序列化(hua)獲取AdmissionReview對象(xiang)的(de)所有信息,然(ran)后根據實際的(de)業務常見,對相關(guan)資源的(de)屬(shu)性(xing)進行驗證。

4.3 響應

     Webhook 會通過狀(zhuang)態(tai)碼、請(qing)求(qiu)頭參數對應字段(duan)設(she)置為(wei)Content-Type: application/json 和(he)一(yi)個(ge)包含 AdmissionReview 對象(xiang)的 JSON 序(xu)列化格式來發送響應。該 AdmissionReview 對象與發送的版(ban)本相同(tong),且其(qi)中包含的 response 字(zi)段已被有效填充。

response 至少必須包含以下(xia)字段:

  • uid,從發(fa)送到 Webhook 的(de) request.uid 中復制而來

  • allowed,設置(zhi)為true或false

    {
      "apiVersion": "admission.k8s.io/v1",
      "kind": "AdmissionReview",
      "response": {
        "uid": "<value from request.uid>",
        "allowed": true
      }
    }

Validation Webhook會對請(qing)求根據(ju)自(zi)己的(de)業務(wu)邏輯進行校驗(yan),其(qi)中allowed字段為(wei)true則代表(biao)認證通過(guo),alliowed為(wei)false則代表(biao)認證失敗。

 

總結(jie):

      通過本(ben)文,解釋了Kubernetes的概念(nian),介(jie)紹了Kubernetes Webhook的類型和應(ying)用場景。此外(wai),還以Validation Webhook 為例(li),介(jie)紹資(zi)源準入以及請求(qiu)和響應(ying)。Kubernetes Webhook可以幫助用戶在Kubernetes平臺上完成更復雜的功能,期待讀(du)者在實際應(ying)用中發揮Webhook機制的優勢。

文章來自個人專欄
文(wen)章 | 訂閱(yue)
0條評論
作者已關閉評論
作者已關閉評論
0
0