mirror of https://github.com/dapr/docs.git
				
				
				
			Merge pull request #4382 from antontroshin/dapr-env-vars-from-secrets-docs
Add support for injecting environment variables from a Secret into the Dapr sidecar
This commit is contained in:
		
						commit
						1632f50784
					
				|  | @ -0,0 +1,122 @@ | |||
| --- | ||||
| type: docs | ||||
| title: "How-To: Configure Environment Variables from Secrets for Dapr sidecar" | ||||
| linkTitle: "Environment Variables from Secrets" | ||||
| weight: 7500 | ||||
| description: "Inject Environment Variables from Kubernetes Secrets into Dapr sidecar" | ||||
| --- | ||||
| In special cases, the Dapr sidecar needs an environment variable injected into it. This use case may be required by a component, a 3rd party library, or a module that uses environment variables to configure the said component or customize its behavior. This can be useful for both production and non-production environments. | ||||
| 
 | ||||
| ## Overview | ||||
| In Dapr 1.15, the new `dapr.io/env-from-secret` annotation was introduced, [similar to `dapr.io/env`]({{< ref arguments-annotations-overview >}}). | ||||
| With this annotation, you can inject an environment variable into the Dapr sidecar, with a value from a secret. | ||||
| 
 | ||||
| ### Annotation format | ||||
| The values of this annotation are formatted like so: | ||||
| 
 | ||||
| - Single key secret: `<ENV_VAR_NAME>=<SECRET_NAME>` | ||||
| - Multi key/value secret: `<ENV_VAR_NAME>=<SECRET_NAME>:<SECRET_KEY>` | ||||
| 
 | ||||
| `<ENV_VAR_NAME>` is required to follow the `C_IDENTIFIER` format and captured by the `[A-Za-z_][A-Za-z0-9_]*` regex: | ||||
| - Must start with a letter or underscore | ||||
| - The rest of the identifier contains letters, digits, or underscores | ||||
| 
 | ||||
| The `name` field is required due to the restriction of the `secretKeyRef`, so both `name` and `key` must be set. [Learn more from the "env.valueFrom.secretKeyRef.name" section in this Kubernetes documentation.](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#environment-variables) | ||||
| In this case, Dapr sets both to the same value. | ||||
| 
 | ||||
| ## Configuring single key secret environment variable | ||||
| In the following example, the `dapr.io/env-from-secret` annotation is added to the Deployment. | ||||
| ```yaml | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   name: nodeapp | ||||
| spec: | ||||
|   template: | ||||
|     metadata: | ||||
|       annotations: | ||||
|         dapr.io/enabled: "true" | ||||
|         dapr.io/app-id: "nodeapp" | ||||
|         dapr.io/app-port: "3000" | ||||
|         dapr.io/env-from-secret: "AUTH_TOKEN=auth-headers-secret" | ||||
|     spec: | ||||
|       containers: | ||||
|       - name: node | ||||
|         image: dapriosamples/hello-k8s-node:latest | ||||
|         ports: | ||||
|         - containerPort: 3000 | ||||
|         imagePullPolicy: Always | ||||
| ``` | ||||
| 
 | ||||
| The `dapr.io/env-from-secret` annotation with a value of `"AUTH_TOKEN=auth-headers-secret"` is injected as: | ||||
| 
 | ||||
| ```yaml | ||||
| env: | ||||
| - name: AUTH_TOKEN | ||||
|     valueFrom: | ||||
|     secretKeyRef: | ||||
|         name: auth-headers-secret | ||||
|         key: auth-headers-secret | ||||
| ``` | ||||
| This requires the secret to have both `name` and `key` fields with the same value, "auth-headers-secret". | ||||
| 
 | ||||
| **Example secret** | ||||
| 
 | ||||
| > **Note:** The following example is for demo purposes only. It's not recommended to store secrets in plain text. | ||||
| 
 | ||||
| ```yaml | ||||
| apiVersion: v1 | ||||
| kind: Secret | ||||
| metadata: | ||||
|   name: auth-headers-secret | ||||
| type: Opaque | ||||
| stringData: | ||||
|   auth-headers-secret: "AUTH=mykey" | ||||
| ``` | ||||
| 
 | ||||
| ## Configuring multi-key secret environment variable | ||||
| 
 | ||||
| In the following example, the `dapr.io/env-from-secret` annotation is added to the Deployment. | ||||
| ```yaml | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   name: nodeapp | ||||
| spec: | ||||
|   template: | ||||
|     metadata: | ||||
|       annotations: | ||||
|         dapr.io/enabled: "true" | ||||
|         dapr.io/app-id: "nodeapp" | ||||
|         dapr.io/app-port: "3000" | ||||
|         dapr.io/env-from-secret: "AUTH_TOKEN=auth-headers-secret:auth-header-value" | ||||
|     spec: | ||||
|       containers: | ||||
|       - name: node | ||||
|         image: dapriosamples/hello-k8s-node:latest | ||||
|         ports: | ||||
|         - containerPort: 3000 | ||||
|         imagePullPolicy: Always | ||||
| ``` | ||||
| The `dapr.io/env-from-secret` annotation with a value of `"AUTH_TOKEN=auth-headers-secret:auth-header-value"` is injected as: | ||||
| ```yaml | ||||
| env: | ||||
| - name: AUTH_TOKEN | ||||
|     valueFrom: | ||||
|     secretKeyRef: | ||||
|         name: auth-headers-secret | ||||
|         key: auth-header-value | ||||
| ``` | ||||
| 
 | ||||
| **Example secret** | ||||
| 
 | ||||
|  > **Note:** The following example is for demo purposes only. It's not recommended to store secrets in plain text. | ||||
| ```yaml | ||||
| apiVersion: v1 | ||||
| kind: Secret | ||||
| metadata: | ||||
|   name: auth-headers-secret | ||||
| type: Opaque | ||||
| stringData: | ||||
|   auth-header-value: "AUTH=mykey" | ||||
| ``` | ||||
|  | @ -67,6 +67,7 @@ This table is meant to help users understand the equivalent options for running | |||
| | not supported | not supported | | `dapr.io/sidecar-readiness-probe-period-seconds`  | How often (in seconds) to perform the sidecar readiness probe. Read more [here](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes). Default is `6`| | ||||
| | not supported | not supported | | `dapr.io/sidecar-readiness-probe-threshold`       | When the sidecar readiness probe fails, Kubernetes will try N times before giving up. In  this case, the Pod will be marked Unready. Read more about `failureThreshold` [here](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes). Default is `3`| | ||||
| | not supported | not supported | | `dapr.io/env`                                     | List of environment variable to be injected into the sidecar. Strings consisting of key=value pairs separated by a comma.| | ||||
| | not supported | not supported | | `dapr.io/env-from-secret`                         | List of environment variables to be injected into the sidecar from secret. Strings consisting of `"key=secret-name:secret-key"` pairs are separated by a comma. | | ||||
| | not supported | not supported | | `dapr.io/volume-mounts` | List of [pod volumes to be mounted to the sidecar container]({{< ref "kubernetes-volume-mounts" >}}) in read-only mode. Strings consisting of `volume:path` pairs separated by a comma. Example, `"volume-1:/tmp/mount1,volume-2:/home/root/mount2"`. | | ||||
| | not supported | not supported | | `dapr.io/volume-mounts-rw` | List of [pod volumes to be mounted to the sidecar container]({{< ref "kubernetes-volume-mounts" >}}) in read-write mode. Strings consisting of `volume:path` pairs separated by a comma. Example, `"volume-1:/tmp/mount1,volume-2:/home/root/mount2"`. | | ||||
| | `--disable-builtin-k8s-secret-store` | not supported | | `dapr.io/disable-builtin-k8s-secret-store` | Disables BuiltIn Kubernetes secret store. Default value is false. See [Kubernetes secret store component]({{< ref "kubernetes-secret-store.md" >}}) for details. | | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue