<p>I am trying to use <code>Helm charts</code> to install applications in Kubernetes clusters. Can someone please suggest what could be a better solution to manage secrets? Using <code>helm secrets</code> would be a good idea or <code>Hashicorp Vault</code>?</p>

Amruth
<p>Vault is technically awesome, but it can be an administrative burden.  You can get strong protection of "secrets", whatever they may be; you can avoid ever sharing magic secrets like the your central database password by generating single-use passwords; if you need something signed or encrypted, you can ask Vault to do that for you and avoid ever having to know the cryptographic secret yourself.  The big downsides are that it's a separate service to manage, getting secrets out of it is not totally seamless, and you occasionally need to have an administrator party to unseal it if you need to restart the server.</p>

<p>Kubernetes secrets are really just ConfigMaps with a different name.  With default settings it's very easy for an operator to get out the value of a Secret (<code>kubectl get secret ... -o yaml</code>, then base64 decode the strings), so they're not actually that secret.  If you have an interesting namespace setup, you generally can't access a Secret in a different namespace, which could mean being forced to copy around Secrets a lot.  Using only native tools like <code>kubectl</code> to manage Secrets is also a little clumsy.</p>

<p>Pushing credentials in via Helm is probably the most seamless path – it's very easy to convert from a Helm value to a Secret object to push into a container, and very easy to push in values from somewhere like a CI system – but also the least secure.  In addition to being able to dump out the values via <code>kubectl</code> you can also <code>helm get values</code> on a Helm release to find out the values.</p>

<p>So it's a question of how important keeping your secrets really secret is, and how much effort you want to put in.  If you want seamless integration and can limit access to your cluster to authorized operators and effectively use RBAC, a Helm value might be good enough.  If you can invest in the technically best and also most complex solution and you want some of its advanced capabilities, Vault works well.  Maintaining a plain Kubernetes secret is kind of a middle ground, it's a little more secure than using Helm but not nearly as manageable.</p>
