联系我们

k8凯发官网

您现在所在的位置: > k8凯发官网 >

Core on K8S深入学习(9)Secret

来源:未知 发布时间:2019-09-20 20:12

  在应用启动过程中需要一些敏感信息,比如数据库用户名、密码,如果直接明文存储在容器镜像中是不安全的,K8S提供的方案是

  Secret 会以密文的方式存储数据,避免了直接在配置文件中保存敏感信息。

  Secret 会以Volume的形式被 mount 到 Pod,容器可通过文件的方式使用 Secret 中的敏感数据,也可以使用环境变量的方式使用。

  由于配置文件中的敏感数据必须是通过base64编码后的结果,因此需要获取base64编码后的值:

  K8S中Pod中使用Secret有两种方式,一是Volume方式,二是环境变量的方式。

  这里我们以一个示例演示一下如何通过Volume方式使用Secret,首先定义一个Pod:

  通过kubectl apply创建之后,我们试着在容器中读取secret来验证一下,如下图所示:

  可以看到,K8S为每条敏感数据创建了一个文件,而且其Value是以明文存放的。

  以Volume方式使用Secret,其中一个优点就是支持动态更新。例如,我们将Secret更新一下,重新应用到K8S中:

  通过kubectl apply重新应用之后,等待一段时间后,再次进入容器中验证:

  通过Volume使用Secret看起来稍微麻烦了一点,容器必须通过文件读取数据。K8S提供了另外一种方式,那就是环境变量方式。

  PS:需要注意的也是,虽然通过环境变量读取Secret比较方便,但是无法支持Secret动态更新!

  PS:需要注意的也是,虽然通过环境变量读取Secret比较方便,但是无法支持Secret动态更新!

  上面提到的Secret可以为Pod提供机密数据的存储,而对于一些非机密敏感的数据,像一些应用的配置信息啊神马的,则可以使用Configmap。

  Configmap的创建与使用方式与Secret非常类似,不同点只在于数据以明文形式存放(不过,我觉得Secret的密文形式也并不密文,只能算得上是简单编码)。

  本文探索了在K8S中如何进行配置管理,如果需要密文配置,可以使用Secret,如果是一般应用配置,可以使用ConfigMap。虽然Secret和ConfigMap都定义了好几种定义方式,但是我们一般采用YAML配置创建和Volume方式读取,因为Volume方式可以支持动态更新。

网站首页|k8凯发官网|凯发官网|凯发k8国际|