创建密钥
操作场景
密钥(Secret)是一种用于存储工作负载所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。资源创建完成后,可在容器工作负载中作为文件或者环境变量使用。
约束与限制
静态Pod中不可使用Secret。
操作步骤
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“配置与密钥”,选择“密钥”页签,在右上角单击“创建密钥”。
- 填写参数。
表1 基本信息说明 参数
参数说明
名称
新建的密钥的名称,同一个命名空间内命名必须唯一。
命名空间
新建密钥所在的命名空间,默认为default。
描述
密钥的描述信息。
密钥类型
新建的密钥类型。
- Opaque:一般密钥类型。
- kubernetes.io/dockerconfigjson:存放拉取私有仓库镜像所需的认证信息。
- kubernetes.io/tls:Kubernetes的TLS密钥类型,用于存放7层负载均衡服务所需的证书。kubernetes.io/tls类型的密钥示例及说明请参见TLS Secret。
- IngressTLS:CCE提供的TLS密钥类型,用于存放7层负载均衡服务所需的证书。
- 其他:若需要创建其他类型的密钥,请手动输入密钥类型。
密钥数据
工作负载密钥的数据可以在容器中使用。
- 当密钥为Opaque类型时,单击,在弹出的窗口中输入键值对,并且可以勾选“自动Base64转码”。
- 当密钥为kubernetes.io/dockerconfigjson类型时,输入私有镜像仓库的账号和密码。
- 当密钥为kubernetes.io/tls或IngressTLS类型时,上传证书文件和私钥文件。
说明:
- 证书是自签名或CA签名过的凭据,用来进行身份认证。
- 证书请求是对签名的请求,需要使用私钥进行签名。
密钥标签
密钥的标签。键值对形式,输入键值对后单击“添加”。
- 配置完成后,单击“确定”。
密钥列表中会出现新创建的密钥。
Secret资源文件配置示例
本章节主要介绍Secret类型的资源描述文件的配置示例。
- Opaque类型
定义的Secret文件secret.yaml内容如下。其中data字段以键值对的形式填写,value需要用Base64编码,Base64编码方法请参见如何进行Base64编码。
apiVersion: v1 kind: Secret metadata: name: mysecret # secret的名称 namespace: default #命名空间,默认为default data: <your_key>: <your_value> #填写键值对,其中value需要用Base64编码 type: Opaque
- kubernetes.io/dockerconfigjson类型
定义的Secret文件secret.yaml内容如下。其中.dockerconfigjson需要用Base64,Base64编码方法请参见如何进行Base64编码。
apiVersion: v1 kind: Secret metadata: name: mysecret # secret的名称 namespace: default #命名空间,默认为default data: .dockerconfigjson: eyJh***** #Base64编码后的内容 type: kubernetes.io/dockerconfigjson
获取.dockerconfigjson内容的步骤如下:
- 获取镜像仓库的登录信息:
- 镜像仓库地址:本文中以address为例,请根据实际信息替换。
- 用户名:本文中以username为例,请根据实际信息替换。
- 密码:本文中以password为例,请根据实际信息替换。
- 使用Base64将键值对username:password进行编码,获取编码后的内容填入3中。
echo -n "username:password" | base64
回显如下:
dXNlcm5hbWU6cGFzc3dvcmQ=
- 使用Base64对以下JSON内容进行编码。
echo -n '{"auths":{"address":{"username":"username","password":"password","auth":"dXNlcm5hbWU6cGFzc3dvcmQ="}}}' | base64
回显如下:
eyJhdXRocyI6eyJhZGRyZXNzIjp7InVzZXJuYW1lIjoidXNlcm5hbWUiLCJwYXNzd29yZCI6InBhc3N3b3JkIiwiYXV0aCI6ImRYTmxjbTVoYldVNmNHRnpjM2R2Y21RPSJ9fX0=
编码后的内容即为.dockerconfigjson内容。
- 获取镜像仓库的登录信息:
- kubernetes.io/tls类型
其中tls.crt和tls.key需要用Base64,Base64编码方法请参见如何进行Base64编码。
kind: Secret apiVersion: v1 metadata: name: mysecret # secret的名称 namespace: default #命名空间,默认为default data: tls.crt: LS0tLS1CRU*****FURS0tLS0t #证书内容,需要Base64编码 tls.key: LS0tLS1CRU*****VZLS0tLS0= #私钥内容,需要Base64编码 type: kubernetes.io/tls
- IngressTLS类型
其中tls.crt和tls.key需要用Base64,Base64编码方法请参见如何进行Base64编码。
kind: Secret apiVersion: v1 metadata: name: mysecret # secret的名称 namespace: default #命名空间,默认为default data: tls.crt: LS0tLS1CRU*****FURS0tLS0t #证书内容,需要Base64编码 tls.key: LS0tLS1CRU*****VZLS0tLS0= #私钥内容,需要Base64编码 type: IngressTLS
使用kubectl创建密钥
- 请参见通过kubectl连接集群配置kubectl命令。
- 通过Base64编码,创建并编辑cce-secret.yaml文件。
# echo -n "待编码内容" | base64 ******
vi cce-secret.yaml
Opaque类型的YAML示例如下,其余类型请参见Secret资源文件配置示例:
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: <your_key>: <your_value> #填写键值对,其中value需要用Base64编码
- 创建密钥。
kubectl create -f cce-secret.yaml
创建完成后可以查询到密钥。
kubectl get secret -n default