千家信息网

如何进行Kubernetes中Secret和私有仓库认证

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章给大家介绍如何进行Kubernetes中Secret和私有仓库认证,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可
千家信息网最后更新 2025年12月02日如何进行Kubernetes中Secret和私有仓库认证

这篇文章给大家介绍如何进行Kubernetes中Secret和私有仓库认证,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。


对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长久不变的话题,Kubernetes对密码管理提供了Secret组件进行管理,最终映射成环境变量,文件等方式提供使用,统一进行了管理更换方便,并且开发人员并不需要关心密码降低了密码的受众范围从而保障了安全.

Kubernetes官方文档:https://kubernetes.io/docs/reference/

Kubernetes官方Git地址:https://github.com/kubernetes/kubernetes

PS:本系列中使用 KubernetesV1.8 RancherV1.6.14

1. 初始化Secret

首先我们需要初始化一个Secret,使用Yaml文件创建时需要使用base64之后的内容作为Value

$ echo -n "admin" | base64YWRtaW4=$ echo -n "1f2d1e2e67df" | base64MWYyZDFlMmU2N2Rm

老规矩通过yaml的方式创建我们的Secret配置文件可以看到已经生效了

> vim secret.yamlapiVersion: v1kind: Secretmetadata:  name: mysecrettype: Opaquedata:  username: YWRtaW4=  password: MWYyZDFlMmU2N2Rm> kubectl create -f ./secret.yamlsecret "mysecret" created> kubectl get secretNAME                  TYPE                                  DATA      AGEdefault-token-lnftf   kubernetes.io/service-account-token   3         1dmysecret              Opaque                                2         9s

2. 环境变量

我们在使用Secret第一个场景就是作为容器的环境变量,大部分容器都提供使用环境变量配置密码的功能,你的程序只需要读取到这个环境变量使用这个环境变量的内容去链接到对应的服务就可以正常使用了,如下我们初始化一个Pod服务,使用之前预设好的信息作为用户名密码配置进去

> vim secret-env.yamlapiVersion: v1kind: Podmetadata:  name: secret-env-podspec:  containers:  - name: mycontainer    image: redis    env:      - name: SECRET_USERNAME        valueFrom:          secretKeyRef:            name: mysecret            key: username      - name: SECRET_PASSWORD        valueFrom:          secretKeyRef:            name: mysecret            key: password  restartPolicy: Never> kubectl create -f secret-env.yaml


3.文件(TLS证书)

除了配置成环境变量我们在很多地方也会使用到文件的方式来存放密钥信息,最常用的就是HTTPS这样的TLS证书,使用证书程序(比如Nginx没法使用环境变量来配置证书)需要一个固定的物理地址去加载这个证书,我们吧之前配置用户名和密码作为文件的方式挂在到某个目录下

> vim secret-file.yamlapiVersion: v1kind: Podmetadata:  name: secret-file-podspec:  containers:  - name: mypod    image: redis    volumeMounts:    - name: foo      mountPath: "/etc/foo"      readOnly: true  volumes:  - name: foo    secret:      secretName: mysecret> kubectl create -f secret-file.yaml


如果有需要对同的配置分开挂载到不同的地方可以使用如下配置

apiVersion: v1kind: Podmetadata:  name: secret-file-podspec:  containers:  - name: mypod    image: redis    volumeMounts:    - name: foo      mountPath: "/etc/foo"      readOnly: true  volumes:  - name: foo    secret:      secretName: mysecret      items:      - key: username        path: my-group/my-username
  • username存储在/etc/foo/my-group/my-username文件而不是/etc/foo/username。

  • password 不会挂载到磁盘

因为映射成了文件那么对权限也是可以控制的

  volumes:  - name: foo    secret:      secretName: mysecret      defaultMode: 256

然后,秘密将被挂载,/etc/foo并且由秘密卷挂载创建的所有文件都将具有权限0400。

PS: JSON规范不支持八进制表示法,因此对于0400权限使用值256。如果您使用yaml代替pod的json,则可以使用八进制表示法以更自然的方式指定权限。
您也可以使用映射(如上例所示),并为不同的文件指定不同的权限,如下所示:

  volumes:  - name: foo    secret:      secretName: mysecret      items:      - key: username        path: my-group/my-username        mode: 511

在这种情况下,生成的文件/etc/foo/my-group/my-username将具有权限值0777。由于JSON限制,您必须以十进制表示法指定模式。

4.Docker私有仓库认证

使用过K8s的小伙伴肯定会遇到一个问题,我们在使用自有的Docker仓库的时候都需要先登录用户名和密码,但是如果使用K8S怎么配置密码呢?在secret中有一个类型是docker-registry我们可以通过命令行的方式创建在获取Docker镜像时使用的用户名和密码

kubectl create secret docker-registry  regsecret --docker-server=registry-vpc.cn-hangzhou.aliyuncs.com --docker-username=admin --docker-password=123456 --docker-email=xxxx@qq.com

如果使用编排文件是如下格式

kind: SecretapiVersion: v1metadata:  name: regsecrettype: kubernetes.io/dockercfgdata:  ".dockercfg": eyJyZWdpc3RyeS12cGMuY24taGFuZ3pob3UuYWxpeXVuY3MuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IjEyMzQ1NiIsImVtYWlsIjoieHh5eEBxcS5jb20iLCJhdXRoIjoiWVdSdGFXNDZNVEl6TkRVMiJ9fQ==# 反base64的结果 : {"registry-vpc.cn-hangzhou.aliyuncs.com":{"username":"admin","password":"123456","email":"xxxx@qq.com","auth":"YWRtaW46MTIzNDU2"}}

然后我们就可以在获取指定镜像的时候为他指定一个获取镜像的Docker凭证

apiVersion: v1kind: Podmetadata:  name: secret-file-podspec:  containers:  - name: mypod    image: redis  imagePullSecrets:                         # 获取镜像需要的用户名密码   - name: regsecret

关于如何进行Kubernetes中Secret和私有仓库认证就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

文件 密码 配置 变量 环境 方式 权限 用户 用户名 证书 仓库 内容 镜像 管理 私有 认证 不同 安全 表示法 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 伯豪SBC数据库 网络技术成绩什么时候出 开发一个服务器至少要多长时间 vip线路服务器验证怎么破解 一网络安全为主的手抄报 资讯信息数据库设计 行为规范结合网络安全手抄报 燕行录数据库 数据库压缩修复的原因是什么 数据库 记录总数 获得数据库表中的数据条数 软件开发中级证书有用吗 计算机3级网络技术运行环境 国内比较知名的软件开发公司 选择计算机网络技术的认知 如何查看阿里云服务器的类型 csgo服务器卡顿 手机百度网盘显示服务器异常 天涯明月刀手游服务器已满 网络安全防护主要是什么工作 k8s 服务器基本配置 江苏交易进口软件服务器 怎么维护网络安全告诉同学们 如何看待网络安全教育走进校园 数据库查询出生年月的 电脑app编程软件开发 打印机服务器属性 江苏gps时间服务器价格 唐山望凡互联网科技 服务器加密怎么进去
0