Home

Awesome

Delinea DevOps Secrets Vault Kubernetes Secret Injector and Syncer

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->

All Contributors

<!-- ALL-CONTRIBUTORS-BADGE:END -->

Docker Pulls

Docker Image Version (latest semver)

Tests

Release

Red Hat Quay

The DSV Kubernetes Injector and Syncer are components for Kubernetes. The Mutating Webhook injects Secret data from the Delinea DevOps Secrets Vault (DSV) into Kubernetes Secrets, and a CronJob periodically synchronizes them. The webhook can run as a pod or a stand-alone service, and the cronjob can run inside or outside the cluster.

The common configuration consists of one or more Client Credential Tenant mappings. The credentials are then specified in an Annotation on the Kubernetes Secret to be mutated.

The webhook and syncer use the Golang SDK to communicate with the DSV API. They were tested with Docker Desktop and Minikube. They also work on OpenShift, Microk8s and others.

Contents

Supporting Docs

The docs directory has supporting documentation that goes into more detail on the developer workflows, test setup, configuration, helm install commands, and more.

Injector & Syncer Differences

Which Should I Use?

Quick Start

Since there's a mix of users for this repo, here's where to go for getting up and running as quickly as possible.

WhoWhere do I start?
๐Ÿ‘‰ I just want to install the helm charts against my own cluster.Clone, and use helm install against the charts directory.
๐Ÿ‘‰ I'm a contributor/developer and want to test/build locallyUse the setup-developer guide.
๐Ÿ‘‰ I'm a contributor and need to create a release.Use the release guide.

Build

<img src="docs/assets/random-dont-need-to-install.svg">

To build run: mage init build. For more detailed directions on local development (such as Mage), see setup-developer

Test

See details in local-testing

Reference Mage Tasks

Manually updated, for most recent Mage tasks, run mage -l.

TargetDescription
build๐Ÿ”จ Build builds the project for the current platform.
buildAll๐Ÿ”จ BuildAll builds all the binaries defined in the project, for all platforms.
cleanup after yourself.
go:doctor๐Ÿฅ Doctor will provide config details.
go:fix๐Ÿ”Ž Run golangci-lint and apply any auto-fix.
go:fmtโœจ Fmt runs gofumpt.
go:initโš™๏ธ Init runs all required steps to use this package.
go:lint๐Ÿ”Ž Run golangci-lint without fixing.
go:lintConfig๐Ÿฅ LintConfig will return output of golangci-lint config.
go:test๐Ÿงช Run go test.
go:testSum๐Ÿงช Run gotestsum (Params: Path just like you pass to go test, ie ./..., pkg/, etc ).
go:tidy๐Ÿงน Tidy tidies.
go:wrapโœจ Wrap runs golines powered by gofumpt.
helm:docsgenerates helm documentation using helm-doc tool.
helm:initโš™๏ธ Init sets up the required files to allow for local editing/overriding from CacheDirectory.
helm:install๐Ÿš€ Install uses Helm to install the chart.
helm:lint๐Ÿ” Lint uses Helm to lint the chart for issues.
helm:render๐Ÿ’พ Render uses Helm to output rendered yaml for testing helm integration.
helm:uninstall๐Ÿš€ Uninstall uses Helm to uninstall the chart.
initruns multiple tasks to initialize all the requirements for running a project for a new contributor.
installTrunkinstalls trunk.io tooling if it isn't already found.
job:initruns the setup tasks to initialize the local resources and files, without trying to apply yet.
job:redeployremoves kubernetes resources and helm charts and then redeploys with log streaming by default.
k8s:applyapplies a kubernetes manifest.
k8s:deleteApply applies a kubernetes manifest.
k8s:initcopies the k8 yaml manifest files from the examples directory to the cache directory for editing and linking in integration testing.
k8s:logsstreams logs until canceled for the dsv syncing jobs, based on the label dsv.delinea.com: syncer.
kind:destroy๐Ÿ—‘๏ธ Destroy tears down the Kind cluster.
kind:initโž• Create creates a new Kind cluster and populates a kubeconfig in cachedirectory.
minikube:destroy๐Ÿ—‘๏ธ Destroy tears down the Kind cluster.
minikube:initโž• Create creates a new Minikube cluster and populates a kubeconfig in cachedirectory.
release๐Ÿ”จ Release generates a release for the current platform.
trunkInitensures the required runtimes are installed.

Contributors

Thanks goes to these wonderful people (emoji key):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tbody> <tr> <td align="center"><a href="https://mig.us/adam"><img src="https://avatars.githubusercontent.com/u/119477?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Adam C. Migus</b></sub></a><br /><a href="https://github.com/DelineaXPM/dsv-k8s/commits?author=amigus" title="Code">๐Ÿ’ป</a> <a href="https://github.com/DelineaXPM/dsv-k8s/commits?author=amigus" title="Documentation">๐Ÿ“–</a> <a href="https://github.com/DelineaXPM/dsv-k8s/commits?author=amigus" title="Tests">โš ๏ธ</a></td> <td align="center"><a href="https://www.sheldonhull.com"><img src="https://avatars.githubusercontent.com/u/3526320?v=4?s=100" width="100px;" alt=""/><br /><sub><b>sheldonhull</b></sub></a><br /><a href="https://github.com/DelineaXPM/dsv-k8s/commits?author=sheldonhull" title="Code">๐Ÿ’ป</a> <a href="https://github.com/DelineaXPM/dsv-k8s/commits?author=sheldonhull" title="Documentation">๐Ÿ“–</a> <a href="https://github.com/DelineaXPM/dsv-k8s/commits?author=sheldonhull" title="Tests">โš ๏ธ</a></td> <td align="center"><a href="https://github.com/hansboder"><img src="https://avatars.githubusercontent.com/u/36736535?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hans Boder</b></sub></a><br /><a href="https://github.com/DelineaXPM/dsv-k8s/issues?q=author%3Ahansboder" title="Bug reports">๐Ÿ›</a></td> <td align="center"><a href="https://github.com/tylerezimmerman"><img src="https://avatars.githubusercontent.com/u/100804646?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tylerezimmerman</b></sub></a><br /><a href="#maintenance-tylerezimmerman" title="Maintenance">๐Ÿšง</a></td> <td align="center"><a href="https://github.com/delineaKrehl"><img src="https://avatars.githubusercontent.com/u/105234788?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tim Krehl</b></sub></a><br /><a href="#maintenance-delineaKrehl" title="Maintenance">๐Ÿšง</a></td> <td align="center"><a href="http://endlesstrax.com"><img src="https://avatars.githubusercontent.com/u/17141891?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ricky White</b></sub></a><br /><a href="#maintenance-EndlessTrax" title="Maintenance">๐Ÿšง</a></td> <td align="center"><a href="https://github.com/forced-request"><img src="https://avatars.githubusercontent.com/u/961246?v=4?s=100" width="100px;" alt=""/><br /><sub><b>John Poulin</b></sub></a><br /><a href="#maintenance-forced-request" title="Maintenance">๐Ÿšง</a></td> </tr> </tbody> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the all-contributors specification. Contributions of any kind welcome!