Use kyverno to add annotation to kube-vip pods

This commit is contained in:
Dreaded_X 2025-02-26 00:30:26 +01:00
parent b7bc05beb7
commit 4058ff5287
Signed by: Dreaded_X
GPG Key ID: FA5F485356B0D2D4
8 changed files with 89 additions and 97 deletions

View File

@ -6,6 +6,8 @@ metadata:
spec: spec:
interval: 15m interval: 15m
path: ./infra/kube-vip path: ./infra/kube-vip
dependsOn:
- name: kyverno-policies
prune: true prune: true
timeout: 2m timeout: 2m
sourceRef: sourceRef:

View File

@ -0,0 +1,16 @@
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: kyverno-policies
namespace: flux-system
spec:
interval: 15m
path: ./infra/kyverno-policies
dependsOn:
- name: kyverno
prune: true
timeout: 2m
sourceRef:
kind: GitRepository
name: flux-system
wait: true

View File

@ -1,88 +0,0 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app.kubernetes.io/name: kube-vip-ds
app.kubernetes.io/version: v0.8.3
name: kube-vip-ds-enp3s0
spec:
selector:
matchLabels:
app.kubernetes.io/name: kube-vip-ds
template:
metadata:
labels:
app.kubernetes.io/name: kube-vip-ds
app.kubernetes.io/version: v0.8.3
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
- matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
nodeSelector:
feature.node.kubernetes.io/network-adapter: enp3s0
containers:
- args:
- manager
env:
- name: vip_arp
value: "true"
- name: port
value: "6443"
- name: vip_nodename
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: vip_interface
value: enp3s0
- name: vip_cidr
value: "32"
- name: dns_mode
value: first
- name: cp_enable
value: "true"
- name: cp_namespace
value: kube-system
- name: svc_enable
value: "true"
- name: svc_election
value: "true"
- name: svc_leasename
value: plndr-svcs-lock
- name: vip_leaderelection
value: "true"
- name: vip_leasename
value: plndr-cp-lock
- name: vip_leaseduration
value: "5"
- name: vip_renewdeadline
value: "3"
- name: vip_retryperiod
value: "1"
- name: address
value: 10.0.2.1
- name: prometheus_server
value: :2112
image: ghcr.io/kube-vip/kube-vip:v0.8.3
imagePullPolicy: IfNotPresent
name: kube-vip
resources: {}
securityContext:
capabilities:
add:
- NET_ADMIN
- NET_RAW
hostNetwork: true
serviceAccountName: kube-vip
tolerations:
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
updateStrategy: {}

View File

@ -2,17 +2,17 @@ apiVersion: apps/v1
kind: DaemonSet kind: DaemonSet
metadata: metadata:
labels: labels:
app.kubernetes.io/name: kube-vip-ds app.kubernetes.io/name: kube-vip
app.kubernetes.io/version: v0.8.3 app.kubernetes.io/version: v0.8.3
name: kube-vip-ds-enp2s0 name: kube-vip
spec: spec:
selector: selector:
matchLabels: matchLabels:
app.kubernetes.io/name: kube-vip-ds app.kubernetes.io/name: kube-vip
template: template:
metadata: metadata:
labels: labels:
app.kubernetes.io/name: kube-vip-ds app.kubernetes.io/name: kube-vip
app.kubernetes.io/version: v0.8.3 app.kubernetes.io/version: v0.8.3
spec: spec:
affinity: affinity:
@ -25,8 +25,9 @@ spec:
- matchExpressions: - matchExpressions:
- key: node-role.kubernetes.io/control-plane - key: node-role.kubernetes.io/control-plane
operator: Exists operator: Exists
nodeSelector: - matchExpressions:
feature.node.kubernetes.io/network-adapter: enp2s0 - key: feature.node.kubernetes.io/network-adapter
operator: Exists
containers: containers:
- args: - args:
- manager - manager
@ -40,7 +41,9 @@ spec:
fieldRef: fieldRef:
fieldPath: spec.nodeName fieldPath: spec.nodeName
- name: vip_interface - name: vip_interface
value: enp2s0 valueFrom:
fieldRef:
fieldPath: metadata.annotations['feature.node.kubernetes.io/network-adapter']
- name: vip_cidr - name: vip_cidr
value: "32" value: "32"
- name: dns_mode - name: dns_mode

View File

@ -5,8 +5,7 @@ resources:
- ./service-account.yaml - ./service-account.yaml
- ./cluster-role.yaml - ./cluster-role.yaml
- ./cluster-role-binding.yaml - ./cluster-role-binding.yaml
- ./daemon-set-enp2s0.yaml - ./daemon-set.yaml
- ./daemon-set-enp3s0.yaml
- https://raw.githubusercontent.com/kube-vip/kube-vip-cloud-provider/refs/tags/v0.0.11/manifest/kube-vip-cloud-controller.yaml - https://raw.githubusercontent.com/kube-vip/kube-vip-cloud-provider/refs/tags/v0.0.11/manifest/kube-vip-cloud-controller.yaml
- ./config-map-kubevip.yaml - ./config-map-kubevip.yaml

View File

@ -0,0 +1,37 @@
apiVersion: kyverno.io/v2beta1
kind: ClusterPolicy
metadata:
name: kube-vip-network-adapter
annotations:
pod-policies.kyverno.io/autogen-controllers: none
policies.kyverno.io/title: Kube VIP adapter label
policies.kyverno.io/category: Other
policies.kyverno.io/subject: Pod
kyverno.io/kyverno-version: 1.10.0
policies.kyverno.io/minversion: 1.10.0
kyverno.io/kubernetes-version: "1.26"
spec:
background: false
rules:
- name: add-network-adapter-annotation
match:
any:
- resources:
kinds:
- Pod/binding
names:
- kube-vip-*
context:
- name: node
variable:
jmesPath: request.object.target.name
default: ""
- name: adapter
apiCall:
urlPath: "/api/v1/nodes/{{node}}"
jmesPath: 'metadata.labels."feature.node.kubernetes.io/network-adapter" || "empty"'
mutate:
patchStrategicMerge:
metadata:
annotations:
feature.node.kubernetes.io/network-adapter: "{{ adapter }}"

View File

@ -0,0 +1,4 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./kube-vip-network-adapter.yaml

View File

@ -1,8 +1,27 @@
admissionController: admissionController:
replicas: 2 replicas: 2
rbac:
clusterRole:
extraResources:
- apiGroups:
- ""
resources:
- "nodes"
verbs:
- get
backgroundController: backgroundController:
replicas: 2 replicas: 2
cleanupController: cleanupController:
replicas: 2 replicas: 2
reportsController: reportsController:
replicas: 2 replicas: 2
config:
webhooks:
namespaceSelector:
matchExpressions: []
resourceFiltersExclude:
- "[Binding,*,*]"
- "[Pod/binding,*,*]"
- "[*/*,kube-system,*]"