リソース定義@Kyverno¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. セットアップ¶
インストール¶
▼ チャートとして¶
チャートリポジトリからチャートをインストールし、Kubernetesリソースを作成する。
$ helm repo add <チャートリポジトリ名> https://kyverno.github.io/kyverno/
$ helm repo update
$ kubectl create namespace kyverno
$ helm install <Helmリリース名> <チャートリポジトリ名>/kyverno -n kyverno --version <バージョンタグ>
02. ClusterPolicy¶
validationFailureAction¶
▼ validationFailureActionとは¶
ルールに則っていないKubernetesリソースの作成/更新があった場合に、これを拒否するか、または許可するが監査ログを記録するかを設定する。
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: foo-policy
namespace: kyverno
spec:
validationFailureAction: enforce
background¶
▼ backgroundとは¶
Kyvernoの導入後に作成/更新されるKubernetesだけでなく、導入前の既存のKubernetesリソースもKyvernoの検査対象とするかを設定する。
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: foo-policy
namespace: kyverno
spec:
background: "false"
rules¶
▼ rulesとは¶
Webhook時に実行するKyvernoのルールを設定する。
▼ Mutateルールの場合¶
*実装例*
コンテナイメージのタグ名が『latest
』だった場合に、マニフェストにimagePullPolicy
キーを追加する。
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: foo-policy
namespace: kyverno
spec:
rules:
- name: pod-image-pull-policy-mutator
match:
any:
- resources:
kinds:
- Pod
mutate:
patchStrategicMerge:
spec:
containers:
- (image): "*:latest"
imagePullPolicy: "IfNotPresent"
▼ Validateルールの場合¶
*実装例*
Podのマニフェストのmetadata.labels
キー以下に、app.kubernetes.io/name
キーがあるか否かを検証する。
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: foo-policy
namespace: kyverno
spec:
rules:
- name: pod-labels-validator
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Label ('app.kubernetes.io/name') is required"
pattern:
metadata:
labels:
app.kubernetes.io/name: "?*"
*実装例*
Podのマニフェストの.spec.containers
キー以下に、resources
キーがあるか否かを検証する。
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: foo-policy
namespace: kyverno
spec:
rules:
- name: pod-container-resources-validator
match:
resources:
kinds:
- Pod
namespaces:
- foo
validate:
message: "Container resources is required"
pattern:
spec:
containers:
- name: "*"
resources:
limits:
memory: "?*"
cpu: "?*"
requests:
memory: "?*"
cpu: "?*"