使用MicroProfile、ConfigMaps和机密外部化配置
在本教程中,您将学习如何以及为什么要将微服务的配置外部化。具体来说,您将学习如何使用 Kubernetes ConfigMap 和 Secret 来设置环境变量,然后使用 MicroProfile Config 来使用它们。
开始之前
创建 Kubernetes ConfigMap 和 Secret
在 Kubernetes 中,有几种方法可以为 Docker 容器设置环境变量,包括:Dockerfile、kubernetes.yml、Kubernetes ConfigMap 和 Kubernetes Secret。在本教程中,您将学习如何使用后两种方法来设置环境变量,这些环境变量的值将被注入到您的微服务中。使用 ConfigMap 和 Secret 的好处之一是,它们可以在多个容器中重复使用,包括分配给不同容器的不同环境变量。
ConfigMap 是存储非机密键值对的 API 对象。在本教程中,您将学习如何使用 ConfigMap 来存储应用程序名称。有关 ConfigMap 的更多信息,您可以找到文档 here.
虽然 Secret 也用于存储键值对,但它们与 ConfigMap 不同,它们用于存储机密/敏感信息,并使用 Base64 编码进行存储。这使得 Secret 成为存储诸如凭据、密钥和令牌等内容的合适选择,您将在本教程中进行操作。有关 Secret 的更多信息,您可以找到文档 here.
将配置从代码中外部化
外部化应用程序配置非常有用,因为配置通常会根据您的环境而改变。为了实现这一点,我们将使用 Java 的上下文和依赖注入 (CDI) 以及 MicroProfile Config。MicroProfile Config 是 MicroProfile 的一项功能,MicroProfile 是一组用于开发和部署云原生微服务的开放式 Java 技术。
CDI 提供了一种标准的依赖注入功能,使应用程序能够从协作、松散耦合的 bean 中组装起来。MicroProfile Config 为应用程序和微服务提供了一种标准方式来从各种来源获取配置属性,包括应用程序、运行时和环境。根据源定义的优先级,属性将自动组合成一组应用程序可以通过 API 访问的属性。在交互式教程中,CDI 和 MicroProfile 将一起使用,以从 Kubernetes ConfigMap 和 Secret 中检索外部提供的属性,并将它们注入到您的应用程序代码中。
许多开源框架和运行时都实现并支持 MicroProfile Config。在整个交互式教程中,您将使用 Open Liberty,这是一种灵活的开源 Java 运行时,用于构建和运行云原生应用程序和微服务。但是,可以使用任何与 MicroProfile 兼容的运行时来代替它。
目标
- 创建 Kubernetes ConfigMap 和 Secret
- 使用 MicroProfile Config 注入微服务配置