Kubernetes:Pod启动时从文件中提取环境变量

时间:2018-06-22 06:37:23

标签: kubernetes

我想知道我是否能够从文件传播环境变量。

猜猜我有一个像这样的文件:

ENV_VARIABLE_USERNAME=username
ENV_VARIABLE_PASSWORD=password

我想在播客开始时,将此内容文件作为环境变量传播。

有可能吗?

3 个答案:

答案 0 :(得分:1)

通常来说,对于环境变量,您可以通过configMap来完成。但是,由于这是用户名和密码(敏感信息),因此您可以通过秘密方式进行操作。

例如,给定Pod(在此示例中为redis)和以下“秘密”:

apiVersion: v1
kind: Secret
metadata:
  name: credentials
type: Opaque
data:
  username: dXNlcm5hbWU=        //username -> encoded base64
  password: cGFzc3dvcmQ=        //password -> encoded base64

注意:您需要对所有数据进行秘密编码。这是用base64编码的:

echo -n username | base64

还有吊舱:

apiVersion: v1
kind: Pod
metadata:
  name: redis-pod
spec:
  containers:
  - name: redis
    image: redis
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: credentials
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: credentials
            key: password
  restartPolicy: Never

现在,如果您在Pod中运行env | grep SECRET,我将正确初始化变量:

nerus:~/workspace (master) $ kubectl exec redis-pod env | grep SECRET
SECRET_USERNAME=username
SECRET_PASSWORD=password

答案 1 :(得分:0)

我在Kubernetes清单中使用了j2cli和Jinja模板。清单是用Jinja模板编写的,j2cli可以为我传递环境变量:

j2 --format=env config.j2 data.env

https://github.com/kolypto/j2cli

答案 2 :(得分:0)

如果您的Kubernetes版本高于1.6,则可以将文件配置为ConfigMap:

kubectl create configmap yourconfigmap --from-env-file=YOUR_ENV_FILE

,然后使用your pod as environment variable

中configmap的内容
   apiVersion: v1
   kind: Pod
   metadata:
     name: yourpod
   spec:
     containers:
       - name: test-container
         image: yourimage
         command: [ "/bin/sh", "-c", "env" ]
         envFrom:
         - configMapRef:
             name: yourconfigmap
     restartPolicy: Never