首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NET Core 使用 K8S ConfigMap的正确姿

背景

ASP.NET Core默认的配置文件定义在 和 文件中。这里面有一个问题就是,在使用容器部署时,每次修改配置文件都需要重新构建镜像。当然你也可能会说,我的配置文件很稳定不需要修改,但你又如何确保配置文件中一些机密配置的安全问题呢?比如暴露了你的远程数据库的连接信息,哪天被员工不小心删库跑路了呢?那接下来就来讲解下如何在.NET Core 中正确使用ConfigMap。

ConfigMap/Secret

K8S中引入了ConfigMap/Secret来存储配置数据,分别用于存储非敏感信息和敏感信息。其目的在于将应用和配置解耦,以确保容器化应用程序的可移植性。

创建 ConfigMap

ConfigMap的创建很简单,一句命令就可以直接将 文件转换为ConfigMap。

PS:使用K8S一定要善用帮助命令,比如执行 ,你就可以了解到多种创建ConfigMap的方式。

其中我们可以看到可以通过指定 来从指定文件创建。

Let's have a try!

1.先行创建示例项目:

2.默认包含两个配置文件 和

3.先来尝试将 转换为ConfigMap:

从上面的输出结果来看,其中包含了 换行符,显然不是我们想要的结果。猜测是因为Windows和Linux系统换行符的差异导致的。先来插播下换行符的知识:

CR:Carriage Return,对应ASCII中转义字符\r,表示回车LF:Linefeed,对应ASCII中转义字符\n,表示换行CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行众所周知,Windows操作系统采用两个字符来进行换行,即CRLF;Unix/Linux/Mac OS X操作系统采用单个字符LF来进行换行;

所以解决方式就很简单,将换行符切换为Linux系统的 即可。操作方式很简单:对于VS Code 只需要按图下所示操作即可,点击右下角的 ,选择 即可。

对于VS,如果VS打开json文件有下面的提示,直接切换就好。没有,可以安装Line Endings Unifier)扩展来统一处理。

现在ConfigMap的格式正常了。下面我们尝试把 也合并到一个ConfigMap中。

PS:

如果你的配置文件包含多余的空格,则生成的ConfigMap可能就会包含 字符,就像这样: 。解决办法就是保存文件时记得格式化文件就好了,或者手动删除多余空格。

创建ConfigMap的时候可以指定 参数进行试运行,避免直接创建到服务器。

从文件创建ConfigMap时,可以不指定Key,默认会以文件名为Key。

至此,完成了appsetting到configmap的切换。

应用 ConfigMap

ConfigMap的应用很简单,只需要将configmap挂载到容器内的独立目录即可。

先来看一下借助VS帮生成的Dockerfile。

可以看出文件中定义的 指定的工作目录为 ,所以需要把ConfigMap挂载到 目录下。先执行 构建镜像。

我们来新建一个 文件配置如下:

这里有必要解释两个参数:

volumes:-configMap:指定引用哪个ConfigMap

volumeMounts:用来指定将ConfigMap中的配置挂载到容器的哪个路径

subPath:用来指定引用ConfigMap的哪个配置节点。

创建Deployment之前先修改下ConfigMap的配置,以方便确认最终成功从ConfigMap挂载配置。将 节点的默认值改为Error。

修改完毕后,执行后续命令来创建Deployment,并验证。

从以上输出可以看出,默认的配置项已被ConfigMap的配置覆盖。

热更新

以Volume方式挂载的ConfigMap支持热更新(大概需要10s左右)。但一种情况例外,就是指定subPath的情况下,更新ConfigMap,容器中挂载的ConfigMap是不会自动更新的。

A container using a ConfigMap as a subPath volume will not receive ConfigMap updates.

对于这种情况,也很好处理,将ConfigMap挂载到 目录下一个单独目录就好,比如挂载到 目录,然后修改配置文件的加载路径即可。

最后

本文就.NET Core如何应用ConfigMap进行了详细的介绍。其中最关键在于appsettings.json到ConfigMap的转换,以及挂载目录的指定。希望对你有所帮助。而至于Secret的应用,原理相通了,关键在于Secret的生成,这里就交给你自己探索了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190905A09L8200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券