Configuration properties can be passed to the Data Flow Server using Kubernetes ConfigMap and Secrets. The server uses the Fabric8 spring-cloud-kubernetes
module to process both ConfigMap and Secrets settings. You just need to enable the ConfigMap support by passing in an environment variable of SPRING_CLOUD_KUBERNETES_CONFIG_NAME
and setting that to the name of the ConfigMap. Same is true for the Secrets where the environment variable is SPRING_CLOUD_KUBERNETES_SECRETS_NAME
. To use the Secrets you also need to set SPRING_CLOUD_KUBERNETES_SECRETS_ENABLE_API
to true.
An example configuration could look like the following where we configure Kafka, MySQL and Redis for the server:
apiVersion: v1 kind: ConfigMap metadata: name: scdf-config data: application.yaml: |- spring: cloud: deployer: kubernetes: environmentVariables: 'SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS=${KAFKA_SERVICE_HOST}:${KAFKA_SERVICE_PORT},SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODES=${KAFKA_ZK_SERVICE_HOST}:${KAFKA_ZK_SERVICE_PORT},SPRING_REDIS_HOST=${REDIS_SERVICE_HOST},SPRING_REDIS_PORT=${REDIS_SERVICE_PORT}' datasource: url: jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/test driverClassName: org.mariadb.jdbc.Driver testOnBorrow: true validationQuery: "SELECT 1" redis: host: ${REDIS_SERVICE_HOST} port: ${REDIS_SERVICE_PORT}
We assume here that Kafka is deployed using kafka
and kafka_zk
as the service names. For the MySQL we assume the service name is mysql
and for Redis we assume it is redis
. Kubernetes will publish these services host and port values as environment variables that we can use when configuring any deployed apps.
We prefer to provide the MySQL connection secrets in a Secrets file:
apiVersion: v1 kind: Secret metadata: name: scdf-secrets data: spring.datasource.username: cm9vdA== spring.datasource.password: eW91cnBhc3N3b3Jk
The username and password are provided as base64 encoded values.