Configuration manager is a special container used to load (generate/restore) and dump (backup) the configuration and secrets.
See Releases for stable versions.
For bleeding-edge/unstable version, use janssenproject/configurator:1.0.1_dev
.
The following environment variables are supported by the container:
CN_CONFIG_ADAPTER
: The config backend adapter, can beconsul
(default),kubernetes
, orgoogle
.CN_CONFIG_CONSUL_HOST
: hostname or IP of Consul (default tolocalhost
).CN_CONFIG_CONSUL_PORT
: port of Consul (default to8500
).CN_CONFIG_CONSUL_CONSISTENCY
: Consul consistency mode (choose one ofdefault
,consistent
, orstale
). Default tostale
mode.CN_CONFIG_CONSUL_SCHEME
: supported Consul scheme (http
orhttps
).CN_CONFIG_CONSUL_VERIFY
: whether to verify cert or not (default tofalse
).CN_CONFIG_CONSUL_CACERT_FILE
: path to Consul CA cert file (default to/etc/certs/consul_ca.crt
). This file will be used if it exists andCN_CONFIG_CONSUL_VERIFY
set totrue
.CN_CONFIG_CONSUL_CERT_FILE
: path to Consul cert file (default to/etc/certs/consul_client.crt
).CN_CONFIG_CONSUL_KEY_FILE
: path to Consul key file (default to/etc/certs/consul_client.key
).CN_CONFIG_CONSUL_TOKEN_FILE
: path to file contains ACL token (default to/etc/certs/consul_token
).CN_CONFIG_KUBERNETES_NAMESPACE
: Kubernetes namespace (default todefault
).CN_CONFIG_KUBERNETES_CONFIGMAP
: Kubernetes configmaps name (default tojans
).CN_CONFIG_KUBERNETES_USE_KUBE_CONFIG
: Load credentials from$HOME/.kube/config
, only useful for non-container environment (default tofalse
).CN_CONFIG_GOOGLE_SECRET_VERSION_ID
: Janssen configuration secret version ID in Google Secret Manager. Defaults tolatest
, which is recommended.CN_CONFIG_GOOGLE_SECRET_NAME_PREFIX
: Prefix for Janssen configuration secret in Google Secret Manager. Defaults tojans
. If left intactjans-configuration
secret will be created.CN_SECRET_ADAPTER
: The secrets adapter, can bevault
(default),kubernetes
, orgoogle
.CN_SECRET_VAULT_SCHEME
: supported Vault scheme (http
orhttps
).CN_SECRET_VAULT_HOST
: hostname or IP of Vault (default tolocalhost
).CN_SECRET_VAULT_PORT
: port of Vault (default to8200
).CN_SECRET_VAULT_VERIFY
: whether to verify cert or not (default tofalse
).CN_SECRET_VAULT_ROLE_ID_FILE
: path to file contains Vault AppRole role ID (default to/etc/certs/vault_role_id
).CN_SECRET_VAULT_SECRET_ID_FILE
: path to file contains Vault AppRole secret ID (default to/etc/certs/vault_secret_id
).CN_SECRET_VAULT_CERT_FILE
: path to Vault cert file (default to/etc/certs/vault_client.crt
).CN_SECRET_VAULT_KEY_FILE
: path to Vault key file (default to/etc/certs/vault_client.key
).CN_SECRET_VAULT_CACERT_FILE
: path to Vault CA cert file (default to/etc/certs/vault_ca.crt
). This file will be used if it exists andCN_SECRET_VAULT_VERIFY
set totrue
.CN_SECRET_KUBERNETES_NAMESPACE
: Kubernetes namespace (default todefault
).CN_SECRET_KUBERNETES_SECRET
: Kubernetes secrets name (default tojans
).CN_SECRET_KUBERNETES_USE_KUBE_CONFIG
: Load credentials from$HOME/.kube/config
, only useful for non-container environment (default tofalse
).CN_SECRET_GOOGLE_SECRET_VERSION_ID
: Janssen secret version ID in Google Secret Manager. Defaults tolatest
, which is recommended.CN_SECRET_GOOGLE_SECRET_MANAGER_PASSPHRASE
: Passphrase for Janssen secret in Google Secret Manager. This is recommended to be changed and defaults tosecret
.CN_SECRET_GOOGLE_SECRET_NAME_PREFIX
: Prefix for Janssen secret in Google Secret Manager. Defaults tojans
. If leftjans-secret
secret will be created.CN_WAIT_MAX_TIME
: How long the startup "health checks" should run (default to300
seconds).CN_WAIT_SLEEP_DURATION
: Delay between startup "health checks" (default to10
seconds).GOOGLE_PROJECT_ID
: Google Project ID (default to empty string). Used whenCN_CONFIG_ADAPTER
orCN_SECRET_ADAPTER
set togoogle
.GOOGLE_APPLICATION_CREDENTIALS
: Path to Google credentials JSON file (default to/etc/jans/conf/google-credentials.json
). Used whenCN_CONFIG_ADAPTER
orCN_SECRET_ADAPTER
set togoogle
.CN_CONFIGURATION_SKIP_INITIALIZED
: skip initialization if backend already initialized (default tofalse
).
The following commands are supported by the container:
load
dump
The load command can be used either to generate or restore config and secret for the cluster.
-
To generate the initial configuration and secret, create
/path/to/host/volume/generate.json
similar to example below:{ "hostname": "demoexample.jans.io", "country_code": "US", "state": "TX", "city": "Austin", "admin_pw": "S3cr3t+pass", "ldap_pw": "S3cr3t+pass", "email": "[email protected]", "org_name": "Gluu Inc." }
NOTE:
generate.json
has optional attributes to generate oxAuth signing and encryption keys based on specific algorithms.auth_sig_keys
: space-separated key algorithm for signing (default toRS256 RS384 RS512 ES256 ES384 ES512 PS256 PS384 PS512
)auth_enc_keys
: space-separated key algorithm for encryption (default toRSA1_5 RSA-OAEP
)optional_scopes
: list of scopes that will be used (supported scopes areldap
,scim
,fido2
,client-api
,couchbase
,redis
,sql
,casa
; default to empty list)ldap_pw
: user's password to access LDAP database (only used ifoptional_scopes
list containsldap
scope)sql_pw
: user's password to access SQL database (only used ifoptional_scopes
list containssql
scope)couchbase_pw
: user's password to access Couchbase database (only used ifoptional_scopes
list containscouchbase
scope)couchbase_superuser_pw
: superuser's password to access Couchbase database (only used ifoptional_scopes
list containscouchbase
scope)
-
Mount the volume into container:
docker run \ --rm \ --network container:consul \ -e CN_CONFIG_ADAPTER=consul \ -e CN_CONFIG_CONSUL_HOST=consul \ -e CN_SECRET_ADAPTER=vault \ -e CN_SECRET_VAULT_HOST=vault \ -v /path/to/host/volume:/app/db \ -v /path/to/vault_role_id.txt:/etc/certs/vault_role_id \ -v /path/to/vault_secret_id.txt:/etc/certs/vault_secret_id \ janssenproject/configurator:1.0.1_dev load
-
To generate the initial configuration and secret, create
/path/to/host/volume/generate.json
similar to example below:{ "hostname": "demoexample.jans.io", "country_code": "US", "state": "TX", "city": "Austin", "admin_pw": "S3cr3t+pass", "ldap_pw": "S3cr3t+pass", "email": "[email protected]", "org_name": "Gluu Inc." }
NOTE:
generate.json
has optional attributes to generate oxAuth signing and encryption keys based on specific algorithms.auth_sig_keys
: space-separated key algorithm for signing (default toRS256 RS384 RS512 ES256 ES384 ES512 PS256 PS384 PS512
)auth_enc_keys
: space-separated key algorithm for encryption (default toRSA1_5 RSA-OAEP
)
-
Create config map
config-generate-params
kubectl create cm config-generate-params --from-file=generate.json
-
Mount the configmap into container and apply the yaml:
apiVersion: batch/v1 kind: Job metadata: name: configurator-load-job spec: template: spec: restartPolicy: Never volumes: - name: config-generate-params configMap: name: config-generate-params containers: - name: configurator-load image: janssenproject/configurator:1.0.1_dev volumeMounts: - mountPath: /app/db/generate.json name: config-generate-params subPath: generate.json envFrom: - configMapRef: name: config-cm args: ["load"]
- To restore configuration and secrets from a backup of
/path/to/host/volume/config.json
and/path/to/host/volume/secret.json
: mount the directory as/app/db
inside the container:
-
Create config map
config-params
andsecret-params
:kubectl create cm config-params --from-file=config.json kubectl create cm secret-params --from-file=secret.json
-
Mount the configmap into container and apply the yaml:
apiVersion: batch/v1 kind: Job metadata: name: configurator-load-job spec: template: spec: restartPolicy: Never volumes: - name: config-params configMap: name: config-params - name: secret-params configMap: name: secret-params containers: - name: configurator-load image: janssenproject/configurator:1.0.1_dev volumeMounts: - mountPath: /app/db/config.json name: config-params subPath: config.json - mountPath: /app/db/secret.json name: secret-params subPath: secret.json envFrom: - configMapRef: name: config-cm args: ["load"] ```
The dump command will dump all configuration and secrets from the backends saved into the /app/db/config.json
and /app/db/secret.json
files.
Please note that to dump this file into the host, mount a volume to the /app/db
directory as seen in the following example:
docker run \
--rm \
--network container:consul \
-e CN_CONFIG_ADAPTER=consul \
-e CN_CONFIG_CONSUL_HOST=consul \
-e CN_SECRET_ADAPTER=vault \
-e CN_SECRET_VAULT_HOST=vault \
-v /path/to/host/volume:/app/db \
-v /path/to/vault_role_id.txt:/etc/certs/vault_role_id \
-v /path/to/vault_secret_id.txt:/etc/certs/vault_secret_id \
janssenproject/configurator:1.0.1_dev dump
apiVersion: batch/v1
kind: Job
metadata:
name: configurator-dump-job
spec:
template:
spec:
restartPolicy: Never
containers:
- name: configurator-dump-job
image: janssenproject/configurator:1.0.1_dev
command:
- /bin/sh
- -c
- |
/app/scripts/entrypoint.sh dump
sleep 300
envFrom:
- configMapRef:
name: config-cm
Copy over the files to host
kubectl cp config-init-load-job:/app/db .