如何为k8s部署创建自定义Azure策略?

z31licg0  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(130)

我正在考虑为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

qxgroojn

qxgroojn1#

我们在OPA Slack中解决了这个问题,但为了子孙后代:当kinds包含Deployment时,apiGroups属性必须包括apps

相关问题