Kubernetes controller to easily generate random secrets inside your cluster. The project makes use of crypto/rand to generate random values.
Easiest way is to add a git reference in your kustomization.yaml file.
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- github.com/phillebaba/kubernetes-generated-secret//config/defaultOr you can add the CRD and Deploy the controller in your cluster manually.
kustomize build config/default | kubectl apply -f -A Secret is generated from a GeneratedSecret that configures the length, character content, and additional metadata of the secret. The GeneratedSecret is the parent of the Secret it creates, meaning that the Secret will be deleted when the GeneratedSecret is deleted.
Below is all you need to generate a Secret with a random value. The name and namespace will be inherited by the created Secret. The data field in the GeneratedSecret maps to the data field in the Secret, meaning that the specified key will be created.
apiVersion: core.phillebaba.io/v1alpha1
kind: GeneratedSecret
metadata:
name: generatedsecret-sample
namespace: default
spec:
data:
- key: testThe resulting Secret will look like the one below.
apiVersion: v1
kind: Secret
metadata:
name: generatedsecret-sample
namespace: default
spec:
data:
test: <RANDOM_VALUE>There is an optional secretMetadata that can be set. The metadata specified will propogate to the generated Secret with the exception of the name and namespace which is inherited by the parent GeneratedSecret. Additionally the length and characters used in the secret can also be set.
apiVersion: core.phillebaba.io/v1alpha1
kind: GeneratedSecret
metadata:
name: generatedsecret-sample
spec:
secretMetadata:
labels:
app: foobar
data:
- key: test
length: 100
exclude:
- UppercaseThe metadata will be propogated to the Secret.
apiVersion: v1
kind: Secret
metadata:
name: generatedsecret-sample
namespace: default
labels:
app: foobar
spec:
data:
test: <RANDOM_VALUE>It is also possible to generate a Secret with multiple keys in it.
apiVersion: core.phillebaba.io/v1alpha1
kind: GeneratedSecret
metadata:
name: generatedsecret-sample
spec:
data:
- key: foo
length: 100
exclude:
- Uppercase
- Lowercase
- key: bar
length: 50
exclude:
- Numbers
- SymbolsEach key will receive a different random value.
apiVersion: v1
kind: Secret
metadata:
name: generatedsecret-sample
labels:
app: foobar
spec:
data:
foo: <RANDOM_VALUE_1>
bar: <RANDOM_VALUE_2>The project is setup with Kubebuilder so it is good to install it as the integration tests depend on it, follow the installation instructions.
To simplify development it helps to use a local cluster, Kind is a good example of such a tool. Given that a cluster is configured in a kubeconfig file run the following command to install the CRD.
make installThen run the controller, the following command will run the controller binary.
make runOr you can run the controller inside of the cluster, like you would when actually deploying it.
make deployRun the test rule to run the integration tests.
make testThis project is licensed under the MIT License - see the LICENSE file for details.