如何在Kubernetes中设置和管理环境变量

在本教程中,了解何时在Kubernetes中使用(或不使用)环境变量,并将设置和更新其值的方法与示例代码进行比较。

如果在生产中运行Kubernetes或正在Kubernetes中试验容器化应用程序,那么您很可能需要使用环境变量。

对于许多应用程序来说,环境变量在定义配置数据方面起着关键作用。这些配置决定了托管应用程序的容器或Kubernetes Pod将如何运行并帮助它们访问机密。

在本演练中,了解如何通过命令行或YAML文件在Kubernetes中设置环境变量,并比较使用环境变量管理Kubernetes配置和机密的优缺点。

Kubernetes

Kubernetes中的环境变量是什么?
Kubernetes环境变量是一个动态值,用于配置基于Kubernetes的应用程序运行环境的某些方面。

例如,要使用环境变量来定义容器化应用程序的IP地址或网络端口,请在创建Kubernetes Pod时包含如下部分。

env: 
    - 名称:SERVICE_PORT
        值:“8080” 
    - 名称:SERVICE_IP
        值:“192.168.100.1”

环境变量还可以引用应用程序所需的机密,例如用户名和密码。

例如,以下环境变量定义应用程序可用来查找用户名值的键。

如何在 Kubernetes 中设置环境变量

在Kubernetes中定义和更新环境变量的主要方式有三种:kubectl、YAML 文件或 Linux CLI。

1.使用kubectl设置Kubernetes环境变量

第一个选项是使用kubectl(用于控制 Kubernetes 集群的命令行工具)中的set env命令定义 Kubernetes 环境变量。

例如,以下代码将名为example-deployment的部署的环境变量STORAGE_DIR的值设置或更新为/local_storage。

kubectl 设置 env 部署/示例部署 STORAGE_DIR=/local_storage

2.使用YAML设置Kubernetes环境变量

在Kubernetes中设置环境变量的第二种方法是将变量定义包含在用于创建pod的YAML文件中,如下例所示。

apiVersion: v1
种类: Pod
元数据:
    名称: envar_example
    标签:
        目的: envar_example
规范:
    容器: 
    - 名称: envar-demo-container
        图像: some_repo/some_image 
        env: 
        - 名称: STORAGE_DIR
        值: /local_storage

部署时,此pod的变量STORAGE_DIR被配置为值/local_storage。

3.使用Linux CLI设置Kubernetes环境变量

Linux用户可以使用语法export VAR=VALUE将环境变量的值直接导出到命令行。

例如,要将变量STORAGE_DIR的值设置为/local_storage,请在与Kubernetes集群交互的Linux终端中输入以下命令。

导出STORAGE_DIR=/local_storage

在Kubernetes中使用环境变量的好处
在大多数情况下,使用Kubernetes中的环境变量定义的数据类型也可以使用不同的方法进行配置——例如,通过创建应用程序摄取的配置文件。

使用环境变量而不是其他方法来定义配置数据或引用机密的主要优点是环境变量更简单、更灵活。您可以通过修改容器或Pod的配置代码轻松更新环境变量,或者如果您使用命令行设置变量,则可以通过更改命令来轻松更新环境变量。

另外,使用环境变量,您无需担心设置应用程序以便它可以访问配置文件。相反,您可以在部署应用程序本身时简单地定义配置数据。

在Kubernetes中使用环境变量的缺点
环境变量的主要缺点是管理起来很麻烦,特别是如果它们经常变化的话。

如果您不断更新Pod的YAML文件,使用kubectl命令设置新的环境变量或为不同的Pod设置不同的变量,您可能会发现将配置数据存储在配置文件中更方便。

使用环境变量管理机密的安全风险
使用环境变量还存在暴露于某些安全漏洞的风险,特别是在管理机密时。

在环境变量中显式定义秘密是非常危险的。例如,设置诸如SECRET_PASSWORD=1234之类的环境变量意味着查看环境配置数据的任何人也可以访问存储的密码。

幸运的是,Kubernetes的秘密管理架构可以轻松避免这种做法。从安全角度来看,只要您不在环境变量中定义秘密的实际值,通过Kubernetes环境变量管理秘密就可以。

相反,仅定义应用程序可用于访问机密的密钥。这使得环境变量能够引用秘密的密钥,而不会暴露实际的秘密。

原创声明:本文为 CNBPA 云原生社区原创技术内容,非商业转载须注明出处:https://www.cloudnative-tech.com/p/5869/。文中原创图示、架构图和文章内容未经许可不得用于商业转载、培训课件、营销材料或二次分发。
(0)
上一篇 2023年7月14日 下午2:51
下一篇 2023年8月8日 上午11:24

相关推荐

  • 容器服务csk的计费方式有哪些?

    容器服务(CSk)是一种云原生容器部署和管理平台,为用户提供了方便快捷的容器化解决方案。在使用CSk时,用户需要了解其计费方式,以便合理规划和控制成本。本文将介绍CSk的计费方式,并解释各个方面的计费因素,帮助用户了解CSk的计费模型。

    2023年5月19日
    0
  • 容器服务器怎么跑性能测试?

    要对容器服务器进行性能测试,可以采取以下步骤:

    2023年5月25日
    0
  • 容器平台技术包括哪些方面?

    容器平台技术是指用于管理和运行容器化应用程序的软件和工具集合。随着容器技术的快速发展和广泛应用,容器平台技术也不断演进和丰富。本文将介绍容器平台技术的主要方面,包括以下几个方面:

    2023年6月2日
    0
  • 容器平台的适用场景有哪些?

    本文介绍了容器平台的概念、技术特点和适用场景。容器平台是一种新兴的技术,可以大大简化应用程序的部署和管理,提高效率和可靠性。容器平台适用于云原生应用、微服务架构、持续集成和持续交付、大数据应用和混合云环境等场景。容器平台具有轻量级、可移植性、资源隔离、快速部署和灵活性高等特点。

    2023年5月30日
    0
  • DevOps软件架构师行动指南

    作为DevOps软件架构师,他们在项目开发和部署过程中扮演着重要的角色。他们需要负责设计和实施可靠、高效的软件架构,同时也需要在团队中推动DevOps文化和实践的落地。本文将为DevOps软件架构师提供一份行动指南,帮助他们更好地履行职责,提高团队的工作效率和软件质量。

    2023年6月2日
    0