[英]getting pod has unbound immediate PersistentVolumeClaims with airflow helm2 chart
[英]OPA/Rego: Ensure that every Service in Helm chart has exactly one matching Pod
我想檢查渲染的 Helm 圖表中的每個服務是否都有一個匹配的Pod 。
當服務規范選擇spec.selector
中指定的每個條目都反映在 Pod metadata.labels
中時,存在 Pod 到服務關聯。
以下策略使用 Conftest 通過運行conftest test --combine {YAML_FILE}
進行測試,並檢查每個 Service 是否至少有一個匹配的 Pod。 我完全不確定如何轉換它,以便它檢查一個匹配的 Pod。
package main
import future.keywords.every
in_set(e, s) { s[e] }
get_pod(resource) := pod {
in_set(resource.kind, {"Deployment", "StatefulSet", "Job"})
pod := resource.spec.template
}
# ensure that every service has at least one matching pod
# TODO: ensure that every service has exactly one matching pod
deny_service_without_matching_pod[msg] {
service := input[_].contents
service.kind == "Service"
selector := object.get(service, ["spec", "selector"], {})
pods := { p | p := get_pod(input[_].contents) }
every pod in pods {
labels := object.get(pod, ["metadata", "labels"], {})
matches := { key | some key; labels[key] == selector[key] }
count(matches) != count(selector)
}
msg := sprintf("service %s has no matching pod", [service.metadata.name])
}
邊注: get_pod
function 不會檢索 Helm 圖表中可能出現的所有 PodTemplates。 還進行了其他檢查以保持 Helm 圖表的 Kubernetes API 表面較小 - 因此在這種情況下,Pod 只能出現在 Deployment、StatefulSet 和 Job 中。
也許這里有 rego 專家可以插話並提供幫助。 那將不勝感激!
由於沒有提供示例數據,因此這是未經測試的代碼。 它應該可以工作:)
package main
pods := {pod |
resource := input[_].contents
resource.kind in {"Deployment", "StatefulSet", "Job"})
pod := resource.spec.template
}
services := {service |
service := input[_].contents
service.kind == "Service"
}
pods_matching_selector(selector) := {pod |
selector != {}
some pod in pods
labels := pod.metadata.labels
some key
labels[key] == selector[key]
}
deny_service_without_one_matching_pod[msg] {
some service in services
selector := object.get(service, ["spec", "selector"], {})
matching_pods := count(pods_matching_selector(selector))
matching_pods != 1
msg := sprintf(
"service %s has %d matching pods, must have exactly one",
[service.metadata.name, matching_pods]
)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.