转义“。”在头盔图表yaml文件中

时间:2020-03-27 18:38:02

标签: kubernetes

我需要定义一个名称为'。'的环境变量。字符,而Kubenetes似乎不喜欢它。

    spec:
      containers:
        env:
        - name: "com.my.app.dir"
          value: "/myapp/subdir/"

我尝试了单引号,双引号,反斜杠,双反斜杠以及许多其他方式。仍然无法使其正常工作。我想知道是否有人知道逃脱“。”的方法。字符。预先感谢。

1 个答案:

答案 0 :(得分:3)

Kubernetes使用.设置环境变量没有问题

这是一个简单的规范,可通过直接运行node可执行文件来记录环境

apiVersion: v1
kind: Pod
metadata:
  name: env-node
spec:
  containers:
  - image: 'node:12-slim'
    name: env-node
    command:
    - node
    - '-pe'
    - process.env
    env:
    - name: OTHER
      value: here
    - name: 'ONE_two-Three.four'
      value: 'diditwork'

和环境输出(为简洁起见,删除了一些kubernetes默认vars)

{
  PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
  HOSTNAME: 'env-node',
  NODE_VERSION: '12.16.1',
  OTHER: 'here',
  'ONE_two-Three.four': 'diditwork',
  HOME: '/root'
}

大多数shell(shbashzsh)将不接受其中带有.的环境变量。 POSIX将[a-zA-Z_][a-zA-Z0-9_]*定义为环境变量名称中允许的字符。

因此通过外壳运行同一节点进程:

spec:
  containers:
  - image: 'node:12-slim'
    name: nodeenvtest-simple-shell
    command:
    - sh
    - '-c'
    - 'node -e "console.log(process.env)"'
    env:
    - name: 'ONE_two-Three.four'
      value: 'diditwork'
    - name: 'OTHER'
      value: 'here'

导致缺少环境变量:

{
  NODE_VERSION: '12.16.1',
  HOSTNAME: 'env-shell',
  HOME: '/root',
  OTHER: 'here',
  PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
  PWD: '/'
}

如果容器与运行的应用程序之间没有外壳,则环境变量第一个字符后的.应该很好。