Create environment variables for Kubernetes main container in Kubernetes Init container
Solution 1:
I see several ways to achieve what you want:
From my perspective, the best way is to use Kubernetes Secret. @Nebril has already provided that idea in the comments. You can generate it by Init Container and remove it by PreStop hook, for example. But, you don't want to go that way.
You can use a shared volume which will be used by InitConatainer and your main pod. InitContainer will generate the environment variables file
db_cred.env
in the volume which you can mount, for example, to/env
path. After that, you can load it by modifying acommand
of your container in the Pod spec and add the commandsource /env/db_cred.env
before the main script which will start your application. @user2612030 already gave you that idea.Another alternative way can be Vault by Hashicorp, you can use it as storage of all your credentials.
You can use some custom solution to write and read directly to Etcd from Kubernetes apps. Here is a library example - k8s-kv.
But anyway, the best and the most proper way to store credentials in Kubernetes is Secrets. It is more secure and easier than almost any other way.