Kubernetes Secret是一种用于存储和管理敏感信息(如密码、API密钥和证书等)的Kubernetes资源对象。它们以Base64编码形式存储,可以在容器中使用该信息以访问受保护的资源。
Kubernetes Secret有两种常见的用法:
- 认证和授权
Secrets可用于存储认证和授权凭据,这些凭据可用于连接数据库或外部服务。例如,如果我们要连接一个MongoDB数据库,则需要提供MongoDB用户名和密码,这些凭据可以存储在Kubernetes Secret中,并通过环境变量或卷挂载到容器中。
- SSL/TLS证书
Secrets也可用于存储SSL/TLS证书。当您需要对应用程序进行加密通信时,需要使用证书。证书文件可以存储在Secrets中,并由容器引擎自动将其加载到容器中。
Kubernetes Secret API提供了以下功能:
- 创建新的Secret对象
- 获取现有的Secret对象信息
- 更新现有的Secret对象属性
- 删除现有的Secret对象
Secret API支持以下类型的Secrets:
- Opaque:存储任意字节数据
- Service Account:包含用于身份验证的令牌
- Docker Registry:用于访问Docker仓库的凭据
- TLS:包含TLS证书和私钥
Secrets可以使用yaml文件来定义,并通过kubectl命令行工具进行创建和管理。例如,以下是一个用于创建名为mysecret的Secret对象示例yaml文件:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: dXNlcm5hbWU=
password: cGFzc3dvcmQ=
在此示例中,我们使用了Opaque类型的Secret对象,并将用户名和密码以Base64编码形式存储在其中。
要创建此Secret对象,请使用以下命令:
kubectl create -f mysecret.yaml
这将创建一个名为mysecret的Secret对象,并将其存储在Kubernetes集群中。
要使用此Secret对象,请在Pod定义中引用它。例如,以下是一个使用mysecret的Pod示例yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginx:latest
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
在此示例中,我们将mysecret中的用户名和密码作为环境变量注入到容器中。要创建此Pod对象,请使用以下命令:
kubectl create -f mypod.yaml
这将创建一个名为mypod的Pod对象,并将其存储在Kubernetes集群中。Pod现在可以使用从mysecret对象中检索的凭据来连接其他资源。