我正在考虑为AKS部署创建自定义Azure策略。有一堆内置的可用策略:https://learn.microsoft.com/en-us/azure/aks/policy-reference但我还没有找到适合这种特殊情况的。
我们要检查每个pod是否使用2个副本运行。要做到这一点,我只是使用现有的内置策略作为模板。将其部署为带有rego脚本的自定义策略,当我有以下policyRule时,该脚本只是拒绝一切正常工作:
"policyRule": {
"if": {
"field": "type",
"in": [
"Microsoft.Kubernetes/connectedClusters",
"Microsoft.ContainerService/managedClusters"
]
},
"then": {
"effect": "[parameters('effect')]",
"details": {
"templateInfo": {
"sourceType": "PublicURL",
"url": "<regoscript that denies everything>"
},
"apiGroups": [
""
],
"kinds": [
"Pod"
],
"excludedNamespaces": "[parameters('excludedNamespaces')]",
"namespaces": "[parameters('namespaces')]",
"labelSelector": "[parameters('labelSelector')]",
"values": {
"excludedContainers": "[parameters('excludedContainers')]",
"excludedImages": "[parameters('excludedImages')]"
}
}
}
}
但是,一旦我更改了
"kinds": [
"Pod"
],
到
"kinds": [
"Deployment"
],
它停止做任何事情。rego脚本打印它接收到的原始对象,因此Deployment看起来并不匹配任何逻辑。为什么会这样呢?部署应该是k8s中的有效对象:https://kubernetes.io/docs/concepts/overview/working-with-objects/#required-fields
1条答案
按热度按时间qxgroojn1#
我们在OPA Slack中解决了这个问题,但为了子孙后代:当
kinds
包含Deployment
时,apiGroups
属性必须包括apps
。