Kubernetes - 传入环境变量和服务名称(来自DNS)

时间:2018-05-21 04:17:18

标签: kubernetes

我似乎无法找到插入环境变量和服务名称的正确语法示例:

所以我将服务定义为:

apiVersion: v1
kind: Service
metadata:
  name: test
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: 3000
  selector:
    app: test

然后我使用以下的秘密文件:

apiVersion: v1
kind: Secret
metadata:
  name: test
  labels:
    app: test
data:
  password: fxxxxxxxxxxxxxxx787xx==

只是为了确认我正在使用envFrom将该密码设置为env变量:

apiVersion: v1
kind: Deployment
metadata:
  name: test
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
        - name: test
          image: xxxxxxxxxxx
          imagePullPolicy: Always
          envFrom:
          - configMapRef:
              name: test
          - secretRef:
              name: test
          ports:
            - containerPort: 3000

现在在我的配置文件中,我想引用password以及服务名称本身 - 这是正确的方法:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test
  labels:
    app: test
data:
  WORKING_URI: "http://somedomain:${password}@test" 

1 个答案:

答案 0 :(得分:0)

yaml配置不能像您提供的那样工作。

如果您想使用复杂的配置设置Kubernetes 你必须使用变量或动态赋值给其中一些 使用外部解析器替换变量占位符。我用 bash和sed来完成它。我改变了你的配置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test
  labels:
    app: test
data:
  WORKING_URI: "http://somedomain:VAR_PASSWORD@test"

保存后,我创建了一个包含所需值的简单shell脚本。

#!/bin/sh

export PASSWORD="verysecretpwd"
cat deploy.yaml | sed "s/VAR_PASSWORD/$PASSWORD/g" | kubectl -f -