TLS Secret

Kubernetes 提供一种内置的 kubernetes.io/tls Secret 类型,用来存放证书及其相关密钥(通常用在 TLS 场合)。
此类数据主要提供给 Ingress 资源,用以终结 TLS 链接,不过也可以用于其他 资源或者负载。当使用此类型的 Secret 时,Secret 配置中的 data (或 stringData)字段必须包含 tls.key 和 tls.crt 主键,尽管 API 服务器 实际上并不会对每个键的取值作进一步的合法性检查。

下面的 YAML 包含一个 TLS Secret 的配置示例:

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: secret-tls
  5. type: kubernetes.io/tls
  6. data:
  7. # 此例中的数据被截断
  8. tls.crt: |
  9. MIIC2DCCAcCgAwIBAgIBATANBgkqh ...
  10. tls.key: |
  11. MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
  <br />提供 TLS 类型的 Secret 仅仅是出于用户方便性考虑。 你也可以使用 Opaque 类型来保存用于 TLS 服务器与/或客户端的凭据。 不过,使用内置的 Secret 类型的有助于对凭据格式进行归一化处理,并且 API 服务器确实会检查 Secret 配置中是否提供了所需要的主键。

当使用 kubectl 来创建 TLS Secret 时,你可以像下面的例子一样使用 tls 子命令:

kubectl create secret tls my-tls-secret \
  --cert=path/to/cert/file \
  --key=path/to/key/file

这里的公钥/私钥对都必须事先已存在。用于 —cert 的公钥证书必须是 .PEM 编码的 (Base64 编码的 DER 格式),且与 —key 所给定的私钥匹配。 私钥必须是通常所说的 PEM 私钥格式,且未加密。对这两个文件而言,PEM 格式数据 的第一行和最后一行(例如,证书所对应的 ————BEGIN CERTIFICATE——- 和 ———-END CERTIFICATE——)都不会包含在其中。

ref: https://www.yuque.com/qinxi-cvygi/rsrp4k/yrhn5a