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

问题描述 投票:0回答:1

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

所以我的服务定义为:

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" 
kubernetes
1个回答
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 -
© www.soinside.com 2019 - 2024. All rights reserved.