您的位置:首页 > 教育 > 锐评 > 国内建筑网站_免费网站建站abc网站_在线视频观看免费视频22_怎么做百度推广的代理

国内建筑网站_免费网站建站abc网站_在线视频观看免费视频22_怎么做百度推广的代理

2025/3/13 14:45:59 来源:https://blog.csdn.net/2301_78537542/article/details/146052077  浏览:    关键词:国内建筑网站_免费网站建站abc网站_在线视频观看免费视频22_怎么做百度推广的代理
国内建筑网站_免费网站建站abc网站_在线视频观看免费视频22_怎么做百度推广的代理

一、Secrets 概述

在 Kubernetes 中,Secrets 是一种包含敏感信息的 API 对象,例如密码、OAuth 令牌、SSH 密钥等。通过使用 Secrets,您可以安全地管理这些敏感信息,避免将它们直接写入 Pod 定义或 Docker 镜像中。

Secrets 具有以下特点:

  • 安全性:Secrets 以加密形式存储在 etcd 数据库中,只有授权的用户和系统组件才能访问。

  • 灵活性:Secrets 可以被挂载为文件或注入为环境变量,以供 Pod 使用。

  • 动态更新:Secrets 可以在不重启 Pod 的情况下更新,但需要重新创建 Pod 以应用新的 Secret。

二、Secrets 的类型

Kubernetes 支持多种类型的 Secrets,主要包括:

  1. Opaque:通用类型,用于存储任意敏感数据。这是最常用的 Secrets 类型。

  2. Service Account:自动创建,包含访问 Kubernetes API 的凭据。

  3. kubernetes.io/dockerconfigjson:用于存储 Docker Registry 的认证信息。

三、Secrets 的创建方式

Secrets 可以通过命令行或 YAML 文件创建。

3.1 命令行创建

使用 kubectl create secret 命令创建 Secrets:

# 创建一个包含用户名和密码的 Opaque Secret
kubectl create secret generic db-secret \--from-literal=username=admin \--from-literal=password=secret# 创建一个包含 Docker Registry 认证信息的 Secret
kubectl create secret docker-registry reg-secret \--docker-server=<registry-server> \--docker-username=<username> \--docker-password=<password> \--docker-email=<email>

3.2 YAML 文件创建

创建一个 YAML 文件定义 Secrets,然后使用 kubectl apply 命令应用:

apiVersion: v1
kind: Secret
metadata:name: db-secret
type: Opaque
data:username: YWRtaW4=  # base64 编码的 adminpassword: c2VjcmV0  # base64 编码的 secret

保存为 db-secret.yaml,然后应用:

kubectl apply -f db-secret.yaml

四、Secrets 在 Pod 中的使用方式

使用 Secrets 作为环境变量挂载为卷以及用于 Docker 私有仓库认证

实验步骤

步骤 1:创建 Secrets

首先,创建一个包含用户名和密码的 Secret。

使用 base64 命令进行编码加密

echo -n "admin" | base64
echo -n "secret" | base64
  1. 创建一个名为 db-secret.yaml 的文件,内容如下:

apiVersion: v1
kind: Secret
metadata:name: db-secret
type: Opaque
data:username: YWRtaW4=  # base64 编码的 adminpassword: cGFzc3dvcmQ=  # base64 编码的 secret

注释

  • apiVersion: v1:指定 Kubernetes API 的版本。

  • kind: Secret:指定资源类型为 Secret。

  • metadata.name: db-secret:定义 Secret 的名称。

  • type: Opaque:指定 Secret 的类型为 Opaque。

  • data:包含要存储的键值对,值需要经过 base64 编码。

  1. 应用 YAML 文件创建 Secret:

kubectl apply -f db-secret.yaml
  1. 验证 Secret 是否创建成功:

kubectl get secret db-secret

步骤 2:将 Secret 挂载为卷

  1. 创建一个名为 pod-with-secret-volume.yaml 的文件,内容如下:

apiVersion: v1
kind: Pod
metadata:name: pod-with-secret-volume
spec:containers:- name: my-containerimage: busyboxcommand: ["sh", "-c", "cat /etc/secrets/username && cat /etc/secrets/password && sleep 3600"]volumeMounts:- name: secret-volumemountPath: /etc/secretsvolumes:- name: secret-volumesecret:secretName: db-secret

注释

  • volumeMounts:定义容器挂载的卷。

  • mountPath: /etc/secrets:指定挂载路径。

  • volumes:定义卷。

  • secret:指定卷的类型为 Secret。

  • secretName: db-secret:引用的 Secret 名称。

  1. 应用 YAML 文件创建 Pod:

kubectl apply -f pod-with-secret-volume.yaml
  1. 查看 Pod 的日志,验证文件挂载是否成功:

kubectl logs pod-with-secret-volume

预期输出

admin
secret

步骤 3:将 Secret 注入为环境变量

  1. 创建一个名为 pod-with-secret-env.yaml 的文件,内容如下:

apiVersion: v1
kind: Pod
metadata:name: pod-with-secret-env
spec:containers:- name: my-containerimage: busyboxcommand: ["sh", "-c", "env && sleep 3600"]env:- name: DB_USERNAMEvalueFrom:secretKeyRef:name: db-secretkey: username- name: DB_PASSWORDvalueFrom:secretKeyRef:name: db-secretkey: password

注释

  • env:定义环境变量列表。

  • name: DB_USERNAME:定义环境变量名为 DB_USERNAME

  • valueFrom.secretKeyRef:从 Secret 中引用键值。

  • name: db-secret:引用的 Secret 名称。

  • key: username:Secret 中的键名。

  1. 应用 YAML 文件创建 Pod:

kubectl apply -f pod-with-secret-env.yaml
  1. 查看 Pod 的日志,验证环境变量是否注入成功:

kubectl logs pod-with-secret-env

预期输出

DB_USERNAME=admin
DB_PASSWORD=secret

步骤 4:使用 Secret 进行 Docker 私有仓库认证

找到 config.json 文件后,将其内容进行 Base64 编码

ls ~/.docker/config.json
base64 ~/.docker/config.json
  1. 创建一个名为 reg-secret.yaml 的文件,内容如下:

apiVersion: v1
kind: Secret
metadata:name: reg-secret
type: kubernetes.io/dockerconfigjson
data:.dockerconfigjson: eyJ2YWx1ZSI6I... # base64 编码的 docker config json

注释

  • type: kubernetes.io/dockerconfigjson:指定 Secret 的类型为 Docker 配置。

  • .dockerconfigjson:包含 Docker 配置的 base64 编码的 JSON 数据。

  1. 应用 YAML 文件创建 Secret:

kubectl apply -f reg-secret.yaml
  1. 创建一个使用私有仓库镜像的 Pod:

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: reg.admin.org/busybox/busybox:latestcommand: ["sh", "-c", "echo 'Hello from container'; sleep 3600"]imagePullSecrets:- name: reg-secret

注释

  • imagePullSecrets:定义用于拉取镜像的 Secret 列表。

  • name: reg-secret:引用的 Secret 名称。

补充:为什么有时候容器会自动退出: 

  • Kubernetes 会根据镜像的默认配置启动容器。对于 busybox 镜像,其默认行为是启动一个 Shell(通常是 /bin/sh)。因此,容器会启动一个 Shell,但如果没有其他命令或交互式操作,Shell 会立即退出,导致容器关闭。

  • 通过在 YAML 文件中显式指定命令(如 sleep 3600),可以防止容器立即退出

  1. 应用 YAML 文件创建 Pod:

kubectl apply -f pod-with-reg-secret.yaml
  1. 验证 Pod 是否成功拉取并运行:

kubectl get pods

预期输出

NAME         READY   STATUS    RESTARTS   AGE
my-pod       1/1     Running   0          ...

步骤 5:更新和删除 Secrets

更新 Secrets

更新 Secrets 需要删除并重新创建,因为 Secrets 的数据是不可变的。

  1. 删除现有的 Secret:

kubectl delete secret db-secret
  1. 创建一个新的 Secret:

kubectl create secret generic db-secret \--from-literal=username=newadmin \--from-literal=password=newsecret
删除 Secrets

删除不再需要的 Secrets:

kubectl delete secret db-secret

实验总结

通过本实验,您学习了如何在 Kubernetes 中创建、使用和更新 Secrets。Secrets 是 Kubernetes 中管理敏感信息的重要机制,通过合理使用 Secrets,您可以提高集群的安全性,避免敏感信息泄露。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com