分享一个最近在排查的问题:
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. 手写一个audio播放器,实现歌曲切换,列表歌曲循环,音量调节等 vue组件

    1 <template> 2 <div class="wrapper"> 3 <svg 4 t="1673833915638" 5 ...

  2. [java安全基础 01]SQL+反序列化

    tomcat Servlet 什么是servlet Java Servlet是运行在 Web 服务器或应用服务器上的程序.它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或 ...

  3. layui 父子弹窗数据交互(包含子弹窗自己关闭并给父弹窗数据填充)

    //父级弹窗 function showAlertOrg() { layui.use('layer', function () { var body; var index = layer.open({ ...

  4. js中Math.floor、Math.ceil、Math.round和parseInt小数取整小结

    虽然知道结果都可以返回一个整数,但是四者的区别尤其是关于-0.5的取整情况貌似还是需要注意一下一.Math.floor(向下取整) 作用:返回小于等于参数的最大整数. eg: Math.floor(5 ...

  5. odoo Web Controllers 学习总结

    环境 odoo-14.0.post20221212.tar Web Controllers Controllers 控制器需要提供可扩展性,就像Model,但不能使用相同的机制,因为先决条件(已加载模 ...

  6. js 获取和回填form表格数据

    //将form里面的内容序列化成json数据 $.fn.serializeJson = function (otherString) { var serializeObj = {}, array = ...

  7. Git上手教程

    不说费话,直接上链接 廖雪峰老师的GIT教程

  8. 2.6 EmpController

    package com.hy.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.H ...

  9. 记录一次Python环境安装出现的问题(已安装java)

    之前是在其他电脑上安装python环境,没有问题. 换了一台电脑开始安装(注:已配置java环境) 安装包准备好 ( 这里使用的是python 3.6.5(64位) ,下载地址选择官网) 教程百度都有 ...

  10. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 49; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "

    问题现象: Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: o ...