簡體   English   中英

Kubernetes:驗證對自定義資源的更新請求

[英]Kubernetes: validating update requests to custom resource

我在我的集​​群中創建了自定義資源定義(CRD)及其控制器,現在我可以創建自定義資源,但是如何驗證對CR的更新請求? 例如,只能更新某些字段。

關於自定義資源的Kubernetes文檔有一個關於高級功能和靈活性的部分 (更不用說驗證請求應被視為一個非常基本的功能😉)。 對於CRD的驗證,它說:

可以使用OpenAPI v3.0驗證在CRD中指定大多數驗證 通過添加驗證Webhook支持的任何其他驗證。

OpenAPI v3.0驗證無法幫助您完成您正在尋找的內容,即確保您的自定義資源上某些字段的不變性,它只對無狀態驗證有用,您可以查看對象的一個​​實例並確定是否它是否有效,您無法將其與先前版本的資源進行比較,並驗證沒有任何更改。

您可以使用驗證Webhooks。 這感覺就像一個重量級的解決方案,因為您需要實現符合Validating Webhook合同的服務器(響應具有特定類型的響應的特定類型的請求),但您將擁有至少所需的數據來做出所需的決定例如,知道它是一個UPDATE請求並知道舊對象的樣子。 有關詳細信息,請參閱此處 我還沒有嘗試過驗證Webhooks,但感覺它可以工作。

我使用的另一種方法是在第一次創建自定義資源的Status子資源時將用戶提供的數據存儲在其中,然后始終查看那里的數據。 在任何更改Spec都將被忽略,雖然你的控制器可以注意到之間有什么在不符Spec什么的和Status ,並嵌入在一個警告Status ,告訴他們已經突變的對象處於無效方式及其指定的值用戶被忽略了。 您可以在此處此處查看該方法的示例。 根據該鏈接repo的相關README部分 ,這會導致以下行為:

如果尚未成功創建團隊的UAA客戶端,則AVAILABLE列將顯示false。 如果在初始創建后改變了團隊規范, WARNING列將顯示警告。 DIRECTOR列顯示spec.director最初提供的值,這是該團隊將繼續使用的值。 如果您嘗試改變Team資源,可以使用-o wide標志查看(忽略的)用戶提供的值:

 $ kubectl get team --all-namespaces -owide NAMESPACE NAME DIRECTOR AVAILABLE WARNING USER-PROVIDED DIRECTOR test test vbox-admin true vbox-admin 

如果我們嘗試改變spec.director屬性,那么我們將看到:

 $ kubectl get team --all-namespaces -owide NAMESPACE NAME DIRECTOR AVAILABLE WARNING USER-PROVIDED DIRECTOR test test vbox-admin true API resource has been mutated; all changes ignored bad-new-director-name 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM