最近は、プライベートでも仕事でもKubernetesのマニフェストを書いていることが多くなってきました.
今回は「Deploymentのコンテナにrequests,limitsが指定されていること」をconftestというツールを使ってチェックする際のポリシーをメモしておきます.
# requestsが指定されていること deny[msg] { input.kind = "Deployment" c := input.spec.template.spec.containers[_] not c.resources.requests msg = sprintf("%sコンテナにrequestsを指定してください", [c.name]) } # limitsが指定されていること deny[msg] { input.kind = "Deployment" c := input.spec.template.spec.containers[_] not c.resources.limits msg = sprintf("%sコンテナにlimitsを指定してください", [c.name]) }
OPAのIterationを参考に書いています.
OPAのIterationのArrayのサンプルでは、
# iterate over indices i arr[i] # iterate over values val := arr[_] # iterate over index/value pairs val := arr[i]
と書かれており、今秋のようにDeployment内のコンテナにrequests,limitsが指定されていることを確認したければ、Iterationをポリシー内で使用してチェックすれば良いわけです.
おまけ
ちょっとしたおまけですが、どのコンテナがポリシー違反なのかを分かりやすくするためにsprintf
を使ってコンテナ名を出力しています.
こういった細かい事でも出力するのと、しないのとで実際に利用するときのデバッグのしやすさが変わりますからね.