当前位置: 首页 > news >正文

k8s创建secret并在container中获取secret

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  # 设置副本数量为2selector: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 imagesimage: restfulapi:1  # For image in dockerimagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取ports:- containerPort: 80 # 容器内部监听的端口volumeMounts:- name: secret-volumemountPath:  "/etc/secrets"readOnly: truevolumes:- name: secret-volumesecret: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 imagesimage: restfulapi:1  # For image in dockerimagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取ports:- containerPort: 80 # 容器内部监听的端口volumeMounts:- name: secret-volumemountPath:  "/etc/secrets"readOnly: truevolumes:- name: secret-volumesecret: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  # 设置副本数量为2selector: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 imagesimage: restfulapi:1  # For image in dockerimagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取ports:- containerPort: 80 # 容器内部监听的端口env:- name: SECRET_USERNAMEvalueFrom: secretKeyRef:name: db-user-passkey: username- name: SECRET_PASSWORDvalueFrom:secretKeyRef:name: db-user-passkey: 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,并且和卷绑定一样,可以看到是明文形式来存储的。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring框架面试总结
  • java最强本地缓存-Caffeine
  • 「数组」随机快速选择 / LeetCode LCR 076(C++)
  • VMWare虚拟机磁盘扩容
  • 【langchain学习】使用LangChain创建具有上下文感知的问答系统
  • 微服务-分布式事务-seata
  • 神经网络:智能时代的基石
  • 再分享API形式调用Dify项目应用
  • 大语言模型生成无人系统(如机械臂、无人机等)可以执行的指令序列
  • 初学嵌入式-C语言常犯错误详解
  • 【机器学习之深度学习】Sigmoid和ReLU的联系与区别、ReLU如何解决死亡问题以及Tanh激活函数的基本概念
  • ClickHouse:单机安装
  • 【数据结构】—— 队列
  • 阿里大模型调用 = 》通义千问大语言模型
  • GenAI下沉到边缘侧,内存和性能如何平衡?
  • java2019面试题北京
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • LeetCode18.四数之和 JavaScript
  • Vultr 教程目录
  • 阿里云购买磁盘后挂载
  • 大整数乘法-表格法
  • 反思总结然后整装待发
  • 分布式熔断降级平台aegis
  • 关于springcloud Gateway中的限流
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 详解NodeJs流之一
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Hibernate主键生成策略及选择
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • zabbix3.2监控linux磁盘IO
  • 阿里云ACE认证学习知识点梳理
  • 湖北分布式智能数据采集方法有哪些?
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • ​虚拟化系列介绍(十)
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • #70结构体案例1(导师,学生,成绩)
  • #includecmath
  • (k8s)Kubernetes本地存储接入
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (SERIES12)DM性能优化
  • (二十六)Java 数据结构
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (算法)N皇后问题
  • (转)负载均衡,回话保持,cookie
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (轉貼) UML中文FAQ (OO) (UML)
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .gitignore文件设置了忽略但不生效
  • .gitignore文件使用