首页 > 解决方案 > Kubernetes - 传入环境变量和服务名称(来自 DNS)

问题描述

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

所以我有一个服务定义为:

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将该密码设置为环境变量:

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" 

标签: kubernetes

解决方案


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 -

推荐阅读