使用 MicroProfile、ConfigMaps 和密钥外部化配置

在本教程中,您将学习如何以及为什么将微服务的配置外部化。具体来说,您将学习如何使用 Kubernetes ConfigMaps 和 Secrets 设置环境变量,然后使用 MicroProfile Config 使用它们。

开始之前

创建 Kubernetes ConfigMaps 和 Secrets

在 Kubernetes 中,有几种方法可以为 Docker 容器设置环境变量,包括:Dockerfile、kubernetes.yml、Kubernetes ConfigMaps 和 Kubernetes Secrets。在本教程中,您将学习如何使用后两者来设置环境变量,这些变量的值将被注入到您的微服务中。使用 ConfigMaps 和 Secrets 的好处之一是它们可以在多个容器中重复使用,包括为不同容器分配不同的环境变量。

ConfigMaps 是存储非机密键值对的 API 对象。在交互式教程中,您将学习如何使用 ConfigMap 来存储应用程序的名称。有关 ConfigMaps 的更多信息,您可以找到文档 这里

虽然 Secrets 也用于存储键值对,但它们与 ConfigMaps 不同,因为它们旨在用于机密/敏感信息,并使用 Base64 编码存储。这使得 Secrets 成为存储诸如凭据、密钥和令牌之类内容的合适选择,您将在交互式教程中执行前者。有关 Secrets 的更多信息,您可以找到文档 这里

从代码中外部化配置

外部化应用程序配置很有用,因为配置通常会根据您的环境而变化。为了实现这一点,我们将使用 Java 的 Contexts and Dependency Injection (CDI) 和 MicroProfile Config。MicroProfile Config 是 MicroProfile 的一项功能,MicroProfile 是一组用于开发和部署云原生微服务的开放式 Java 技术。

CDI 提供标准的依赖注入功能,使应用程序能够从协作的、松散耦合的 bean 中组装。MicroProfile Config 为应用程序和微服务提供了一种标准方法来从各种来源获取配置属性,包括应用程序、运行时和环境。根据源定义的优先级,属性会自动组合成一组属性,应用程序可以通过 API 访问这些属性。在交互式教程中,CDI 和 MicroProfile 将一起用于从 Kubernetes ConfigMaps 和 Secrets 中检索外部提供的属性,并将它们注入到您的应用程序代码中。

许多开源框架和运行时实现并支持 MicroProfile Config。在整个交互式教程中,您将使用 Open Liberty,这是一个灵活的开源 Java 运行时,用于构建和运行云原生应用程序和微服务。但是,可以使用任何与 MicroProfile 兼容的运行时。

目标

  • 创建 Kubernetes ConfigMap 和 Secret
  • 使用 MicroProfile Config 注入微服务配置

示例:使用 MicroProfile、ConfigMaps 和 Secrets 外部化配置

启动交互式教程

上次修改时间:2022 年 6 月 18 日下午 5:15 PST:批量修复链接 (4) (2f4a067fea)