[英]How to talk to Kubernetes CRD service within a pod in the same k8s cluster?
[英]how to reuse k8s validation in my own CRD controller
我創建了一個這樣的CRD
:
import v1 "k8s.io/api/core/v1"
type ApplicationSpec struct {
Name string `json:"name"`
PodSpec v1.PodSpec `json:"podSpec"`
...
}
請注意,我在 CRD 中重用了來自 core PodSpec
的 PodSpec
為了避免用戶應用無效的 yaml 文件,我決定在我的 CRD controller 中添加驗證邏輯,對於像Name
這樣的簡單字段,使用正則表達式很容易檢查它的正確性,而對於像PodSpec
這樣的復雜和原生類型,因為 k8s 已經有驗證邏輯那,我覺得正確的方法是在我的 controller 中重用它,但我該怎么做呢?
您需要先導入幾個包:
import (
"k8s.io/kubernetes/pkg/apis/core/validation"
"k8s.io/apimachinery/pkg/util/validation/field"
)
然后在您的 controller 方法中使用ValidatePodSpec
:
errs := validation.ValidatePodSpec(instance.podSpec, field.NewPath("podSpec"))
還希望將這樣的功能作為庫提供。 有一條關於使用go get
上游k8s.io/kubernetes
的評論。 https://github.com/kubernetes/kubernetes/issues/80316#issuecomment-512991205可以在此處找到由使用錯誤配置 PodTemplateSpec 引起的問題即:我們成功創建了一個 CRD,但是后來它變得不健康,因為無法創建 pod。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.