分享一个最近在排查的问题:
k8s的 secret 或 configmap 对象,如果 key 名称是带【.】的,比如【a.b.c 、db.host】这种名称,注入到POD后,使用env等命令查看不到变量名称
 
命令中 k=kubelet 
1、srcret 对象内容

[root@test-4 1]# k describe secret mysecret
...
Data
====
a.b.c: 9 bytes
pass: 12 bytes
user: 5 bytes

2、POD配置文件,ENV 引用 mysecret 对象。

apiVersion: v1
kind: Pod
metadata:
name: app
spec:
containers:
- envFrom:
- secretRef:
name: mysecret
- configMapRef:
name: czg-configmap
name: helloworld
image: registry.ap-southeast-5.aliyuncs.com/czg_namespace/helloworld:v2
 
2、进入POD查看环境环境
[root@test-4 1]# k exec -it app sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. # env | grep 'a.b.c'
#

3、开始排查

尝试使用 setenv 、export 等查看变量的命令,都不显示 'a.b.c' 这种环境变量名称。

后来以为是云厂商之间差的异,在阿里云和AWS测试,都有这个问题。

经过网上的搜索,k8s 对 'a.b.c' 这种带点的变量名称底层调用的是 【setenv】函数,
参考:https://robberphex.com/envvars-limitation/
 
通过此函数并不能添加或修改 shell 进程的环境变量,或者说通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。
也就是只针对 POD 中的进程有效,shell 登入POD后,看不到这种环境变量。
参考:https://blog.csdn.net/qq_41595735/article/details/90239159
 
4、验证
为了验证网上的结论,写了一小段 python 程序,打印当前环境变量;打成镜像部署到K8S环境中,python程序可以正常看到 'a.b.c' 环境变量。
 
 

python核心代码:
from flask import Flask
import socket
import os app = Flask(__name__) @app.route('/')
def hello():
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>"
return html.format(name=os.environ, hostname=os.getenv('a.b.c')) if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)

secret或configmap对象key名称带点,env命令不显示分析的更多相关文章

  1. javascript获取json对象的key名称的两种方法

    javascript获取json对象的key名称的两种方法 数据处理中,你可能接收到一个不确定内容格式的json对象,然后要把key的值提取出来.今天试过两种可以提取json key的方法,均可以正常 ...

  2. java 22 - 5 多线程之获取和设置线程对象的名称

    如何获取线程对象的名称呢? public final String getName():获取线程的名称.如何设置线程对象的名称呢? public final void setName(String n ...

  3. day 23 对象的名称空间 类,对象属性和方法 封装 接口提供

    一.对象的特有名称空间 # 对象独有的名称空间:在产生对象时就赋初值 '''class ted: def func(): 当func里不存在参数时,调用时不需要给值 print('hah')ted.f ...

  4. Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器

    今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...

  5. python基础之类和对象、对象之间的交互、类名称空间与对象/实例名称空间

    一 面向对象初识 Python要么是面向过程要么是面向对象. 概念及优缺点: 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东 ...

  6. Kubernetes的ConfigMap对象使用

    ConfigMap和Secret几乎一样,只是Secret会用base64加密,创建方式也可以彩yaml或者文件方式 下面演示一下通过文件创建configmap 创建配置文件my.yaml name: ...

  7. js for in对象key排序

    最近遇到一个比较奇葩的事情,for in 循环的时候,如果对象key 默认可以转化为整数,会把key转化为整数排序. code: 运行结果 大家看到data2的key默认顺序是"2" ...

  8. Java获取线程的对象和名称

    /*获取线程对象以及名称(很有意义的) 原来线程都有自己默认的名称Thread-编号  该编号从0开始 Thread 父类的方法static  Thread currentThread() :获取当前 ...

  9. jQuery获取当前对象标签名称

    获取当前对象标签名称 $(".classname")[0].tagName;

  10. python基础——类名称空间与对象(实例)名称空间

    python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...

随机推荐

  1. Cesium计算范围(十三)

    function bounds(positions = [], expand = 0) { let minLng = 180 let minLat = 90 let maxLng = -180 let ...

  2. 从零实现在线云相亲APP|程序员脱单神器(内附源码Demo)

    实时音视频通话涉及到的技术栈.人力成本.硬件成本非常大,一般个人开发者基本无法独立完成一个功能健全并且稳定的实时音视频应用.本文介绍一天之内,无任何实时音视频低层技术的android开发者完成实时相亲 ...

  3. ajax请求头添加参数

    在请求ajax时 ,有时后台要求在请求头里边上参数 ,这种情况下一般都是在原生APP项目当中,因为要在登录状态下才,所有要传token和登录id, var token = localStorage.g ...

  4. JS常用默认行为

    form下表示: var forms =document.forms[0]; var forms =document.myform; 找input:var txtName = form.element ...

  5. LeetCode-357 统计各位数字都不同的数字个数

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits 题目描述 给你一个整数 n ,统 ...

  6. ftpget

    Usage: ftpget [OPTIONS] HOST [LOCAL_FILE] REMOTE_FILE ftpget -u user -p passwd ip LOCAL_FILE REMOTE_ ...

  7. Mogeaver 连接数据库

    下载安装Mogeaver是一款开源软件,下载地址如下:https://docs.mogdb.io/zh/mogdb/v3.0/mogeaver-release-notes 根据您的操作系统选择相应的安 ...

  8. C语言学习--结构体指针

    #include<stdio.h> #include<string.h> //结构体指针: 指针的类型为结构体 typedef struct nodeData { int a; ...

  9. 概率生成函数(PGF)简记

    基本搬运自<浅谈生成函数在掷骰子问题上的应用>. 对于定义在非负整数上的离散随机变量 \(X\),级数 \(F(z) = \sum\limits_{i\ge 0} \operatornam ...

  10. 【C学习笔记】day4-1 在屏幕上输出以下图案

    1.在屏幕上输出以下图案: * *** ***** ******* ********* *********** ************* *********** ********* ******* ...