k8s学习-Secret(创建、使用、更新、删除等)

简介: k8s学习-Secret(创建、使用、更新、删除等)

概念

Secret 是一个主要用来存储密码、token 等一些敏感信息的资源对象。其中,敏感信息是采用 Base64 编码保存起来的。

注意:Base64只是一种编码,不含密钥的,并不安全。默认情况下,Kubernetes Secret 未加密地存储在 API 服务器的底层数据存储(etcd)中。 任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。 此外,任何有权限在命名空间中创建 Pod 的人都可以使用该访问权限读取该命名空间中的任何 Secret;

secret安全相关的静态加密等,将在k8s学习-思维导图与学习笔记中的安全部分详细展开。

模板

secret_test.yaml

apiVersion: v1
kind: Secret
metadata:
  name: secret-test
type: Opaque
data:
  username: YWRtaW4=
stringData:
  username: administrator

secret的类型

内置类型 用法
Opaque 用户定义的任意数据
kubernetes.io/service-account-token 服务账号令牌
kubernetes.io/dockercfg ~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson ~/.docker/config.json 文件的序列化形式
kubernetes.io/basic-auth 用于基本身份认证的凭据
kubernetes.io/ssh-auth 用于 SSH 身份认证的凭据
kubernetes.io/tls 用于 TLS 客户端或者服务器端的数据
bootstrap.kubernetes.io/token 启动引导令牌数据

实战

创建

使用kubectl

命令

写入账号密码

echo -n 'lady-killer9' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt

创建secret

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

结果

可以看到默认密钥名称是文件名,值是base64编码的。

注意,特殊字符需要使用 \ 进行转义,例如$

使用yaml文件创建

可以base64编码后放到data或者明文放到stringData,同时存在时,后者优先级更高。

命令

结果

使用

环境变量

k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致,configMapRef改为secretKeyRef即可。

示例

apiVersion: v1
kind: Pod
metadata:
  name: secret-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - secretRef:
          name: mysecret
  restartPolicy: Never

挂载

k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致

示例

apiVersion: v1
kind: Secret
metadata:
  name: dotfile-secret
data:
  .secret-file: dmFsdWUtMg0KDQo=
---
apiVersion: v1
kind: Pod
metadata:
  name: secret-dotfiles-pod
spec:
  volumes:
  - name: secret-volume
    secret:
      secretName: dotfile-secret
  containers:
  - name: dotfile-test-container
    image: k8s.gcr.io/busybox
    command:
    - ls
    - "-l"
    - "/etc/secret-volume"
    volumeMounts:
    - name: secret-volume
      readOnly: true
      mountPath: "/etc/secret-volume"

imagePullSecret

imagePullSecrets 字段中包含一个列表,列举对同一名字空间中的 Secret 的引用。 你可以使用 imagePullSecrets 将包含 Docker(或其他)镜像仓库密码的 Secret 传递给 kubelet。kubelet 使用此信息来替你的 Pod 拉取私有镜像

手动指定 imagePullSecret

可以阅读容器镜像文档 以了解如何设置 imagePullSecrets。

设置自动附加 imagePullSecrets

可以手动创建 imagePullSecret,并在 ServiceAccount 中引用。 使用该 ServiceAccount 创建的任何 Pod 和默认使用该 ServiceAccount 的 Pod 将会将其的 imagePullSecret 字段设置为服务帐户的 imagePullSecret 值。 详细说明请参阅 将 ImagePullSecrets 添加到服务帐户

自动挂载手动创建的 Secret

手动创建的 Secret(例如包含用于访问 GitHub 帐户令牌的 Secret)可以根据其服务帐户自动附加到 Pod。

更新

k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致

删除

命令

kubectl delete secret db-user-pass -n killer

结果

注意项

  • 第一个是 Secret 的文件大小限制。这个跟 ConfigMap 一样,也是1MB
  • 第二个是 Secret 采用了 base64编码,但是它跟明文也没有太大区别。所以说,如果有一些机密信息要用 Secret来存储的话,还是要很慎重考虑。也就是说谁会来访问你这个集群,谁会来用你这个Secret,还是要慎重考虑,因为它如果能够访问这个集群,就能拿到这个 Secret。 如果是对 Secret敏感信息要求很高,对加密这块有很强的需求,推荐可以使用 Kubernetes 和开源的vault做一个解决方案,来解决敏感信息的加密和权限管理。
  • 第三个就是 Secret 读取的最佳实践,建议不要用list/watch,如果用 list/watch 操作的话,会把 namespace 下的所有 Secret全部拉取下来,这样其实暴露了更多的信息。推荐使用 GET 的方法,这样只获取你自己需要的那个 Secret。

更多k8s相关内容,请看文章:k8s学习-思维导图与学习笔记

参考

k8s-secret

k8s-使用kubectl管理secret

k8s-secret-spec

阿里云-应用配置管理

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11月前
|
存储 Kubernetes 持续交付
k8s学习
【10月更文挑战第1天】
412 4
|
11月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
203 2
k8s学习--YAML资源清单文件托管服务nginx
|
11月前
|
Kubernetes 监控 测试技术
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
415 2
k8s学习--基于Ingress-nginx实现灰度发布系统
|
11月前
|
存储 Kubernetes 调度
|
11月前
|
Kubernetes 关系型数据库 MySQL
k8s之Secret
k8s之Secret
|
11月前
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
1259 1
|
11月前
|
Kubernetes JavaScript 前端开发
k8s学习--chart包开发(创建chart包)
k8s学习--chart包开发(创建chart包)
574 1
|
11月前
|
Kubernetes 固态存储 调度
k8s学习--如何控制pod调度的位置
k8s学习--如何控制pod调度的位置
180 0
|
11月前
|
存储 Kubernetes 调度
k8s学习--k8s群集部署zookeeper应用及详细解释
k8s学习--k8s群集部署zookeeper应用及详细解释
650 0
|
11月前
|
Kubernetes 监控 测试技术
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
403 0

推荐镜像

更多