[英]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.