Bump bind-operator to v0.2.0 and deploy companion TSIG API
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/kubeconform Pipeline was successful

v0.2.0 adds the BindTSIGAPI CRD and companion API that
vault-plugin-secrets-bind-tsig calls to create, rotate and delete TSIG
keys. This rolls the operator forward and deploys an API instance.

- Bump the operator image and the pulled CRD bundle to v0.2.0.
- Broaden the operator ClusterRole with deployments, serviceaccounts and
  roles/rolebindings so the BindTSIGAPI reconciler can deploy the API and
  its namespaced RBAC.
- Add a BindTSIGAPI (bind-tsig-api) in bind-internal; the operator
  reconciles it into a Deployment, Service, ConfigMap, master-token Secret
  and RBAC. Keys are created in bind-internal alongside the authoritative
  cluster.
- Add the generated kubeconform schema for BindTSIGAPI.
This commit is contained in:
2026-07-12 19:10:34 +10:00
parent 2409a4d3a0
commit 3b4620ade4
7 changed files with 252 additions and 3 deletions
@@ -7,3 +7,4 @@ resources:
- authoritative
- resolvers
- externaldns
- tsig-api
@@ -0,0 +1,6 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- tsig-api.yaml
@@ -0,0 +1,27 @@
---
# Companion TSIG API. The operator reconciles this into a Deployment, Service,
# ConfigMap, master-token Secret and namespaced RBAC. vault-plugin-secrets-bind-tsig
# calls it to create/rotate/delete TSIG keys, which it does by managing
# BindTSIGKey resources in this namespace (the operator reconciles the material).
#
# The master access token Secret (bind-tsig-api-token) is generated by the
# operator if absent; a VaultStaticSecret may later pre-seed/overwrite it so the
# token is sourced from Vault rather than generated in-cluster.
apiVersion: bind.unkin.net/v1alpha1
kind: BindTSIGAPI
metadata:
name: bind-tsig-api
namespace: bind-internal
spec:
image: git.unkin.net/unkin/bind-tsig-api:v0.2.0
replicas: 1
port: 8443
# targetNamespace defaults to this resource's namespace (bind-internal), where
# the authoritative cluster and its keys live.
resources:
requests:
cpu: 25m
memory: 64Mi
limits:
cpu: 250m
memory: 128Mi
+1 -1
View File
@@ -21,7 +21,7 @@ spec:
runAsNonRoot: true
containers:
- name: operator
image: git.unkin.net/unkin/bind-operator:v0.1.5
image: git.unkin.net/unkin/bind-operator:v0.2.0
args:
- --metrics-bind-address=:8080
- --health-probe-bind-address=:8081
+1 -1
View File
@@ -6,6 +6,6 @@ resources:
- namespace.yaml
# CRDs are pulled from the bind-operator repo at the matching tag rather than
# vendored here, so they never drift from the operator.
- https://git.unkin.net/unkin/bind-operator/raw/tag/v0.1.5/config/crd/install.yaml
- https://git.unkin.net/unkin/bind-operator/raw/tag/v0.2.0/config/crd/install.yaml
- rbac.yaml
- deployment.yaml
+9 -1
View File
@@ -23,7 +23,15 @@ rules:
resources: ["pods/exec"]
verbs: ["create", "get"]
- apiGroups: ["apps"]
resources: ["statefulsets"]
resources: ["statefulsets", "deployments"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
# The BindTSIGAPI reconciler deploys the companion API: a ServiceAccount plus
# a namespaced Role/RoleBinding granting it access to BindTSIGKey + Secrets.
- apiGroups: [""]
resources: ["serviceaccounts"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["roles", "rolebindings"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["events"]