From kube-dc
Creates and manages Kube-DC ManagedSecrets backed by OpenBao, with optional sync to Kubernetes Secrets via External Secrets Operator. Use for API tokens, OAuth secrets, signing keys, third-party credentials.
How this skill is triggered — by the user, by Claude, or both
Slash command
/kube-dc:manage-secretsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- Target project must exist and be Ready
{org}-{project}kubectl -n kube-dc get secret master-config -o jsonpath='{.data.enable_openbao}' | base64 -d → expect true)<org>/kv-<project>/<name> and never live in the CRD.envFrom / volumeMounts. The Secret is rewritten in place on every value update.opaque (default), password, api-key, tls, db-static. The shape drives UI rendering and permission policy.apiVersion: security.kube-dc.com/v1alpha1
kind: ManagedSecret
metadata:
name: {secret-name}
namespace: {project-namespace} # {org}-{project}
spec:
type: opaque # opaque | password | api-key | tls | db-static
description: "What this secret is for"
sync:
enabled: true # project into a Kubernetes Secret
refreshInterval: 1h # ESO poll interval; 1h is fine for most uses
See @managed-secret-template.yaml for a fully-annotated template.
# Inline literals
kube-dc secrets create {secret-name} \
--from-literal=API_KEY={value} \
--from-literal=API_SECRET={value}
# From a .env file
kube-dc secrets create {secret-name} --from-env-file=./app.env
# No sync — values readable only via `kube-dc secrets get --value`
kube-dc secrets create {secret-name} --sync-disabled
# List secrets in the project
kube-dc secrets list
# Reveal current values
kube-dc secrets get {secret-name} --value
# Update a key (writes a new version atomically)
kube-dc secrets put {secret-name} --from-literal=API_KEY={new-value}
# Delete a specific key
kube-dc secrets unset {secret-name} --key=OLD_KEY
Updates trigger an ESO refresh; the synced Kubernetes Secret reflects the change within ~refreshInterval. For instant rollout, kick the workload (kubectl rollout restart deploy/{name}).
The synced Secret name defaults to the ManagedSecret name. Mount it like any Secret:
spec:
containers:
- name: app
image: my-app
envFrom:
- secretRef:
name: {secret-name}
Or selectively:
env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: {secret-name}
key: API_KEY
kube-dc secrets import {secret-name} --from-secret={existing-k8s-secret}
The platform takes over lifecycle. The original Secret is rewritten with the synced values; existing references continue to work.
After creating a ManagedSecret:
# 1. ManagedSecret is Ready
kubectl get managedsecret {name} -n {project-namespace} \
-o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
# Expected: True
# 2. Synced Kubernetes Secret exists
kubectl get secret {name} -n {project-namespace}
# Expected: type=Opaque (or kubernetes.io/tls for type=tls), with the keys
# 3. ExternalSecret is in sync
kubectl get externalsecret -n {project-namespace} | grep {name}
# Expected: SyncedToTarget=True
Success: ManagedSecret Ready, Kubernetes Secret present with values, ExternalSecret reports SyncedToTarget. Failure:
Ready=False / OpenBaoUnavailable: cluster doesn't have OpenBao enabled or the platform reconciler can't reach it. Check kubectl -n kube-dc get deploy kube-dc-manager is Running.kubectl get pods -n external-secrets-system.# Keep stored values in OpenBao but remove the CRD + synced Secret
kube-dc secrets delete {name}
# Destroy: drop the CRD, the synced Secret, AND the OpenBao values
kube-dc secrets delete {name} --destroy
--destroy is irreversible — there is no platform recovery path for destroyed values. Confirm with the user before invoking.
data field in there; it's not a Secret.kubectl edit the synced Kubernetes Secret directly. The next ESO reconcile (~refreshInterval) will overwrite your edits.--destroy, run kube-dc secrets consumers {name} to list every workload mounting the synced Secret. Their pods will fail to restart after destruction.manage-certificates skill instead — it owns renewal lifecycle.create-database skill — it sets up rotation tied to the actual DB user.manage-kms skill — those are NOT secrets-to-store.npx claudepluginhub kube-dc/kube-dc-public --plugin kube-dcManages Kubernetes secrets with SealedSecrets for GitOps, External Secrets Operator for cloud secret stores, encryption at rest, RBAC, and rotation.
Creates and manages per-project encryption keys backed by OpenBao Transit for encrypting payloads up to 64 KiB directly or envelope-encrypting larger blobs. Plaintext never leaves OpenBao; workloads reference keys.
Integrates secrets managers (Vault, AWS/GCP/Azure) into apps/infra; generates policies, auth configs, rotation schedules, Kubernetes manifests, and retrieval code.