云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

免备案CDN_国内cdn服务商排名_便宜的

小七 141 0

使用HashiCorp Terraform操作符为Kubernetes创建工作区

我们很高兴地宣布为Kubernetes发布HashiCorp Terraform操作符。新的操作符允许您通过调用Terraform Cloud在Kubernetes中将基础设施定义和创建为本机代码。用例包括:将与应用程序相关的基础设施作为Terraform模块进行强化和配置,并使用Kubernetes本机接口创建它们。例如,应用程序用于数据或消息传递的数据库或队列。使用Kubernetes本地接口自动化Terraform云工作区和变量创建。通过将操作符添加到Kubernetes名称空间,可以从Kubernetes集群创建与应用程序相关的基础设施。在本例中,您将使用new操作符来部署应用程序在部署到Kubernetes之前需要的消息队列。此模式可以扩展到其他应用程序基础设施,如DNS服务器、数据库以及身份和访问管理规则。»内部构件Operator模式扩展了kubernetesapi,以创建和配置Kubernetes集群内外的定制资源。通过使用操作符,您可以捕获和自动化任务来管理一组服务。Kubernetes的HashiCorp Terraform操作符使用定义Terraform工作空间的Kubernetes中的自定义资源,执行一个带有模块的Terraform云运行。通过在Operator中使用Terraform Cloud,我们利用了一个现有的控制平面,它确保了状态的正确处理和锁定、运行的顺序执行以及为注入机密和提供资源而建立的模式。在Terraform Cloud中创建和更新工作区的逻辑存在于Terraform-k8s二进制文件中。它包括工作区控制器,它将Kubernetes工作区定制资源与Terraform云工作区进行协调。控制器将检查内联非敏感变量、模块源和模块版本的更改。由于安全问题和ConfigMap行为,对敏感变量或具有ConfigMap引用的变量的编辑不会触发更新或在Terraform Cloud中运行。运行将自动执行terraform apply-auto approve,与操作员模式保持一致。我们将terraform-k8s打包到一个容器中,并将它的命名空间扩展到Kubernetes集群,作为Kubernetes部署。这允许操作员访问特定命名空间中的terraformcloudapi令牌和工作区机密。通过命名空间作用域操作符,我们可以隔离更改、范围机密和版本自定义资源定义。有关命名空间作用域与群集作用域的其他信息,请参阅operator sdk项目概述的信息。接下来,我们在集群中创建一个工作区自定义资源定义(CRD),它定义了Terraform云工作区的模式,并扩展了kubernetesapi。必须先部署CRD,然后才能在群集中创建工作区自定义资源。最后,我们应用一个工作区定制资源来构建一个Terraform云工作区。当您在Kubernetes集群中与操作符在同一个命名空间中创建一个工作区时,您将触发该操作符:从工作区规范中检索值创建或更新Terraform云工作区在Terraform云工作区中创建或更新变量在Terraform Cloud中执行运行更新Kubernetes中的工作区状态»使用Terraform云进行身份验证运营商需要在Terraform Cloud中有一个免费或付费Terraform云组织的帐户。登录到您的帐户后,请在"设置"->"团队"下获取团队API令牌。如果您使用的是付费层,则必须向团队授予"管理工作区"的访问权限。如果您使用的是自由层,那么您将只看到一个名为"所有者"的团队,该团队具有对API的完全访问权限。teamapi令牌应该存储为Kubernetes机密,或者存储在秘密管理器中,以便注入到操作员的部署中。例如,我们将Terraform Cloud API令牌保存到名为credentials的文件中,以用于Kubernetes机密。>更少的凭证资格证书app.terraform.io应用程序{token="修订"}请注意,这是一个广谱令牌。因此,请确保使用此令牌的Kubernetes集群具有适当的基于角色的访问控制,以限制对存储令牌的机密的访问,或者使用访问控制策略将机密存储在机密管理器中。»部署操作员要部署操作员,请下载其舵图。在安装图表之前,请确保您已经创建了一个名称空间,并将Terraform Cloud API令牌和敏感变量添加为Kubernetes secrets。本例使用一个名为credentials的文件,一个带有API令牌的CLI配置文件。>kubectl创建ns预打印>kubectl create-n prepod secret generic terraformrc--from file=凭证>kubectl create-n prepod secret generic workspacecrets--from literal=AWS_secret_ACCESS_KEY=${AWS_secret_ACCESS_KEY}--from literal=AWS_ACCESS_KEY_ID}默认情况下,Helm chart希望在文件路径/etc/Terraform处安装一个名为terraformrc的Terraform云API令牌的Kubernetes密码。示例中定义的Kubernetes机密的密钥是凭据。敏感变量默认为/tmp/secrets目录下名为workspacecrets的Kubernetes机密。每个机密的密钥是装入/tmp/secrets目录中的文件名。准备好名称空间和机密后,通过安装helm图表并启用工作区同步功能,将操作符部署到集群中。>helm install-n prepod operator./terraform helm--set="global.enabled=真"该命令使用--set选项手动启用运算符。要了解有关Helm值以及如何使用值文件配置它们的更多信息,请参阅Helm文档。操作符作为一个pod在名称空间中运行。>kubectl get-n预成型吊舱名称就绪状态重新启动年龄operator-terraform-sync-workspace-74748fc4b9-d8brb 1/1运行0 10s除了部署操作符之外,Helm图表还向集群添加了一个工作区自定义资源定义。>kubectl获取CRD名称创建于workspaces.app.terraform.io 2020-02-11T15:15:06Z»部署工作区将工作区自定义资源应用于Kubernetes集群时,必须定义Terraform云组织、操作符上机密的文件路径、Terraform模块、其变量以及您希望在Kubernetes状态中看到的任何输出。将以下代码段复制到名为工作区.yml.# 工作区.ymlAPI版本:app.terraform.io/v1alpha1种类:工作区元数据:姓名:问候语规格:组织:hashicorp团队演示secretsMountPath:"/tmp/secrets"模块:来源:"terraform aws模块/sqs/aws"版本:"2.0.0"输出:-关键字:urlmoduleOutputName:这个队列id变量:-键:名称价值观:问候语.fifo敏感:错误环境变量:false-键:先进先出队列值:"真"敏感:错误环境变量:false-关键字:AWS默认区域取值来源:configMapKeyRef:名称:aws配置关键:地区敏感:错误环境变量:true-密钥:AWS_ACCESS_key_ID敏感:正确环境变量:true-密钥:AWS_SECRET_ACCESS_密钥敏感:正确环境变量:true-密钥:确认销毁值:"1"敏感:错误环境变量:true目前,运营商部署封装在模块中的Terraform配置。模块源可以是任何公共可用的远程源(Terraform Registry或版本控制和公共可用)。它不支持本地路径或在模块外部单独使用*.tf。对于必须传递给模块的变量,请确保规范中的变量键与模块变量的名称匹配。在本例中,terraform aws modules/sqs/aws需要一个名为name的变量。工作区规范相当于以下地形配置:"队列"模块{source="地形aws模块/sqs/aws"版本="2.0.0"名称=变量名称先进先出队列=变量先进先出队列}除了将变量的键与预期的模块变量相匹配外,还必须指定变量是敏感的还是必须创建为环境变量。变量的值是可选的,可以内联或使用Kubernetes ConfigMap引用定义。如果它是为敏感变量定义的,则运算符将用secretsMountPath中的值覆盖内联值。工作区规范映射模块中的输出输出到Terraform云输出。在工作区.yml在代码片段中,terraform aws modules/sqs/aws为这个_sqs_queue_id输出一个值。工作区规范相当于以下地形配置:输出"url"{值=module.queue.此队列id}为默认的AWS区域创建一个ConfigMap。# 配置映射.ymlAPI版本:v1种类:配置映射元数据:名称:aws配置数据:地区:us-east-1将ConfigMap和工作区应用于命名空间。>kubectl应用-n预处理-f配置映射.yml>kubectl应用-n预处理-f工作区.yml通过检查Terraform ConfigMap检查上传到Terraform云的Terraform配置。Terraform配置包括模块的源、版本和输入。>kubectl描述-n预处理配置映射问候语#为清楚起见省略数据====地形:----地形{后端"远程"{}}"操作员"模块{source="地形aws模块/sqs/aws"版本="2.0.0"名称=变量名称先进先出队列=变量先进先出队列}调试操作员的操作,并通过检查操作员日志检查工作区创建是否出错。>kubectl logs-n prepod$(kubectl get pods-n prepod--selector"component=sync workspace"-o jsonpath="{.items[0].metadata.n