Day20-Kubernetes 那些事 - ConfigMap 与 Secrets

前言

今天要来介绍两个蛮重要的观念:ConfigMap 以及 Secrets,通常在本机端练习可能比较少用到这两个物件,但在实务上这两个物件可是很常使用的,由於这两个物件非常的相近,使用方式也非常相近,所以笔者就把这两个物件的观念摆在一起了,废话不多说马上开始今天的文章吧!

什麽是 ConfigMap?

看到 Config 应该就知道这个物件跟某些设定档有关,没错 ConfigMap 通常都是用来存放设定档用的,换句话说就是这个物件会直接连结一个或多个档案,而 ConfigMap 通常都是用来存放偏向部署面的设定档,像是资料库的初始化设定、nginx 设定档等等,这种不用被包进去 image 内但其实也是要让 container 可以使用的档案。

ConfigMap 特性

讲完了 ConfigMap 基础介绍後接下来讲一下 ConfigMap 的特性。

  • 一个 ConfigMap 物件可以存入一个或多个设定档

    上面段落提到 ConfigMap 是用来存放设定档用的,而且 ConfigMap 会直接连接该设定档。

  • 无需修改程序码,可以替换不同环境的设定档

    由於设定档都交由 ConfigMap 管理,并不是包在 image 内,因此可以藉由修改 ConfigMap 的方式来达到不用更新 Pod 内容就可以更换设定档的作用。

  • 统一存放所有的设定档

    一个 ConfigMap 可以连结一个以上的设定档,因此也可以将该专案会用到的所有设定档通通存放在同一个 ConfigMap 物件中进行集中管理。

如何建立 ConfigMap?

由於 ConfigMap 可以直接存入整个档案,因此笔者这边的范例都会以现有的档案为基准。

接下来要用 create 这个参数来建立 ConfigMap 物件出来,这时候可能会有读者疑惑了,之前都是用 apply 这个参数怎麽现在又变成 create 了呢?

虽然两者都有建立的意思但背後实作的技术完全不同, create 使用的是 Imperative Management,Imperative Management 简单来说就是告诉 K8s 我目前的动作要做什麽,可能要 createdeletereplace 某个物件。

apply 使用的是 Declarative Management,Declarative Management 简单来说就是用宣告的方式来建立物件,再更白话一点就是我希望这个物件要长怎麽样,所以 apply 通常都会搭配一个 yaml 档,而这份 yaml 档就会在 kind 这个设定值告诉 K8s 我这个物件要长成什麽样子。

由於笔者是直接拿现有的档案建立 ConfigMap,这时候就不能用 apply 的方式只能用 create 的方式建立了,指令也很简单长得像这样:kubectl create configmap configmapName --from-file=filePath

建立完後就可以下 get 的参数查看 ConfigMap 是否有成功建立出来。

最後可以下 describe 这个参数查看 ConfigMap 的内容,会发现里面就是设定档的完整内容。

什麽是 Secrets?

看到 Secrets 这个名字应该就知道这是非常机密的物件,相较於 ConfigMap 是用来存放偏向部署面的档案,Secrets 通常都是用来存放机密的资料,像是使用者帐密、SSL 凭证等等。

Secrets 特性

上面 ConfigMap 提到的特性 Secrets 一样也有,所以笔者就不重复讲了,这边笔者想介绍的是只有 Secrets 才有的特性:Secret 会将内部资料进行 base64 编码。

因为重新编码所以可以确保资料相较 ConfigMap 下安全一些,所以笔者建议如果是机密性的资料就存在 Secrets 吧!

如何建立 Secrets?

这里笔者一样用现有的档案为基准作为范例,由於上面 ConfigMap 只示范存入一个档案而已,所以这边 Secrets 笔者就示范如何存入多个档案。

一样用 create 的参数进行 Secrets 建立,但这边要多加一个 SUBCOMMANDgenericgeneric 代表的意思是从本机档案、目录建立 Secrets,接下来只要下:kubectl create secret generic secretName --from-file=filePath 即可建立 Secrets。

接着一样可以用 get 的参数来查看 Secrets 是否有正确建立起来。

最後一样可以用 describe 的参数查看 Secrets 内容,可以发现里面确实有两个档案,并且经过加密所以不会显示原本内容。

Secrets 与 Ingress

最後来点番外篇,刚刚笔者建立一个跟 SSL 凭证有关的 Secrets,这个 Secrets 是用来帮助网页加密,也就是大家熟悉的 HTTPS,在 Ingress 的文章有提到 Ingress 帮助我们统一对外 port,也就是只要把凭证的 Secrets 写在 Ingress 内就可以让网站顺利变成 HTTPS 了,写法也很简单只要在 spec 内加上 tls 的设定即可。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: helloworld
spec:
  tls:
    - secretName: helloworld-secret
  rules:  
    - http:
        paths:
        - path: /
          backend:
            serviceName: helloworld
            servicePort: 8080

小结

今天介绍了 ConfigMap 以及 Secrets 的基础说明以及建立,相信读者应该也很好奇要如何将 ConfigMap 以及 Secrets 跟 Pod 进行连结,由於连结这段需要介绍 Volume,因此笔者下一篇文章就要来介绍 Volume,到时候会连同连结的部分一并介绍完。

如果对於文章有什麽问题都欢迎留言给我,那我们就下篇文章见喽~


<<:  【React Hook 03】useEffect

>>:  [Day26] 实作 - 动画篇3

Day27-"练习-2"

猜数字练习(while) 设定一数字,范围为1到100为解答,接着利用scanf将值输入,利用此输...

IT铁人DAY 14-Decorator 装饰者模式

  今天要介绍的Decorator Pattern,跟昨天的Composite Pattern都是属...

【Day 23】Go 基础小笔记 IV:goroutine、channel

身为并发(concurrency)小能手的 Go 的重要特色 有了 channel 好像几乎不需要...

Day 0x18 - 使用 Laravel 串接之结尾及自我检讨

今天会是单纯的自我对话,没有任何程序 0x1 回想 Laravel 开发过程 Laravel 对我来...

DAY28 MongoDB Atlas 付费监控内容

DAY28 MongoDB Atlas 付费监控内容 这篇原本是要在25号发的,因为一些因素,只好延...