第七章、Kubernetes(v1.21)配置和存储——第二章配置

第二章:配置

 2.1 配置最佳实践

  • 云原生应用的 12 要素中,提出了配置分离
  • 在推送到集群之前,配置文件应该存储在版本控制系统中。这将允许我们在必要的时候快速回滚配置更改,它有助于集群重新创建和恢复
  • 使用 YAML 而不是 JSON 编写配置文件,虽然这些格式几乎可以在所有场景中互换使用,但是 YAML 往往更加用户友好
  • 建议相关对象分组到一个文件,一个文件通常比几个文件更容易管理。请参阅 guestbook-all-in-one.yaml 文件作为此语法的示例。
  • 除非必要,否则不指定默认值(简单的最小配置会降低错误的可能性)。
  • 将对象描述放在注释中,以便更好的内省。

2.2 Secret 

2.2.1 概述

  • Secret 对象类型用来保存敏感信息,如:密码、OAuth2 令牌以及 SSH 密钥等。将这些信息放到 Secret 中比放在 Pod 的定义或者容器镜像中更加安全和灵活。
  • 由于创建 Secret 可以独立于使用它们的 Pod, 因此在创建、查看和编辑 Pod 的工作流程中暴露 Secret(及其数据)的风险较小。 Kubernetes 和在集群中运行的应用程序也可以对 Secret 采取额外的预防措施,如:避免将机密数据写入非易失性存储。
  • Secret 类似于 ConfigMap 但专门用于保存机密数据。
  • 注意:Secret 和 ConfigMap 是保存在 etcd 中。

 2.2.2 Secret 的种类

命令行:kubectl create secret --help

 

2.2.3 pod如何引用

  • 要使用 Secret,Pod 需要引用 Secret。 Pod 可以用三种方式之一来使用 Secret
    • 作为挂载到一个或多个容器上的 中的文件。(volume进行挂载)
  • Secret 对象的名称必须是合法的 DNS 子域名。 在为创建 Secret 编写配置文件时,你可以设置 data 与/或 stringData 字段。 datastringData 字段都是可选的。data 字段中所有键值都必须是 base64 编码的字符串。如果不希望执行这种 base64 字符串的转换操作,你可以选择设置 stringData 字段,其中可以使用任何字符串作为其取值。

 2.2.4 创建Secret

  • 命令行创建 Secret :

kubectl create secret generic secret-1 \
--from-literal=username=admin \
--from-literal=password=123456

  • 使用 base64 对数据进行编码:

# 准备username YWRtaW4=
echo -n "admin" | base64

# MTIzNDU2
echo -n "123456" | base64

使用 yaml 格式创建 Secret :

vi k8s-secret.yaml

apiVersion: v1
kind: Secret
metadata:
name: k8s-secret
namespace: default
type: Opaque
data:
username: YWRtaW4=
password: MTIzNDU2

kubectl apply -f k8s-secret.yaml

  • 有的时候,觉得手动将数据编码,再配置到 yaml 文件的方式太繁琐,那么也可以将数据编码交给 Kubernetes :

 

apiVersion: v1
kind: Secret
metadata:
name: k8s-secret-string-data
namespace: default
type: Opaque
stringData:
username: admin
password: "123456"

kubectl apply -f k8s-secret.yaml

注意:如果同时使用 data 和 stringData ,那么 data 会被忽略。

 

posted @ 2022-12-28 14:48  斐语  阅读(66)  评论(0)    收藏  举报