Terraform 控制器:云资源自助服务

8个月前发布 SanS三石
41 0 0

了解 Kubernetes 如何帮助应用程序依赖性和消费不再创建进展的主要瓶颈

每天‬分享‬最新‬软件‬开发‬,Devops,敏捷‬,测试‬以及‬项目‬管理‬最新‬,最热门‬的‬文章‬,每天‬花‬3分钟‬学习‬何乐而不为‬,希望‬大家‬点赞‬,加‬关注‬,你的‬支持‬是我‬最大‬的‬动力‬。
Kubernetes 在为开发人员提供生态系统、提高运输速度、将组件置于通用框架和 DSL 之下,以及扩展和扩展产品的灵活性方面表现出色。因此,难以置信的是,与客户对话、应用程序依赖性和消费仍然是进展的主要瓶颈,团队被阻止等待数据库、队列、对象存储等等。

问题是

  • 大多数应用程序甚至还没有投入生产——软件交付周期的很大一部分是原型开发和实验。它被驱使着快速展示价值: 尝试,展示,看看是否失败
  • 这种说法常常与平台工程相冲突,这是自然而然的。他们的产品化设置、可靠性、成本和安全性的所有权的目标是一个非常不同的世界观
  • 在消除应用程序交付的障碍方面非常成功,使得开发团队和为了将平台体验为一种服务,大量组织中的应用程序依赖项仍然是一个票据系统; 单击、打开支持票据、等待响应,等等

虽然地形控制器并没有试图解决所有这些问题,但这是朝着正确方向迈出的一步。

  • 重复使用 Terraform 模块和已有的代码; 没有支点或技术选择
  • 允许团队在维护对资产(Terraform 模块)和安全配置文件(Checkov)的控制的同时使用它
  • 让团队意识到他们自己的成本,允许他们改进他们

The Why and the What For

为什么和做什么

开发商须知

  • 工作流在开发人员的名称空间之外运行,因此可以集中管理和共享凭据,而不必公开
  • 可以事先批准更改,遵循计划并应用工作流
  • 开发人员可以从他们的名称空间查看和调试 Terraform 工作流
  • 将输出作为环境变量交付,准备直接从库伯内特秘密中使用,而不需要进一步操作这些值

平台工程师

  • 它并非对所有人都是免费的; 平台工程师可以实现一些策略,应用程序团队可以围绕这些策略使用模块
  • 配置可以是特定于环境的,使工程师能够将特定于环境的数据注入到模块配置中。可以注入环境标签、过滤器、项目标签、成本代码等用例
  • 使开发人员能够看到他们在 Kubernetes 内配置的相关成本
  • 支持 pod 标识(AWS 上的 IRSA)并将凭证管理移交给云供应商
  • Integrates 与Infracost并提供查看预期成本和潜在执行政策(预算控制)的能力
  • 重用Terraform 你可能已经写过了,你几乎肯定已经得到了经验
  • 放置护栏周围的模块,你的团队可以使用,而不是参考或从互联网上拉任何 Terraform 模块
  • 孤立资源的能力,即删除自定义资源而不删除支持它的云资源

先决条件

  • Helm CLI
  • Kind

启动和运行的最快方法是通过Helm。

部署控制器

Shell

$ git clone git@github.com:appvia/terraform-controller.git
$ cd terraform-controller
# kind create cluster
$ helm install -n terraform-system terraform-controller charts/ --create-namespace
$ kubectl -n terraform-system get po

为开发人员配置凭据

Shell



# The following assumes you are using static credentials. For managed pod identity see the docs: https://github.com/appvia/terraform-controller/blob/master/docs/providers.md
$ kubectl -n terraform-system create secret generic aws 
  --from-literal=AWS_ACCESS_KEY_ID=<ID> 
  --from-literal=AWS_SECRET_ACCESS_KEY=<SECRET> 
  --from-literal=AWS_REGION=<REGION>
$ kubectl -n terraform-system apply -f examples/provider.yaml

创建第一个配置

Shell

$ kubectl create namespace apps
# NOTE: Make sure to change the bucket name in examples/configuration.yaml (spec.variables.bucket)
$ vim examples/configuration.yaml
$ kubectl -n apps apply -f examples/configuration.yaml
# Check the module output
$ kubectl -n apps get secret test -o yaml

路线图上有什么?

预算限制

随着预算控制的引入,预算控制已经整合了一个想法。虽然它不会直接增加成本,而且一些资源是基于使用的(例如,一个 S3存储桶是免费的,但是在里面转储10TB,并且成本很高)。它可以是一种获取成本的轻量级方法,允许开发人员发挥/调整他们的依赖关系,并促进对成本的更好理解。

YAML

constraints:
  budgets:
    # Allow monthly spend of up to 100 dollars within each namespace for cloud resources
    - namespaces:
        matchExpressions:
          - key: kubernetes.io/metadata.name
            operator: Exists
      budget: 100
    # Allow monthly spend of up to 500 dollars for namespaces with project cost center code PK-101
    - namespaces:
        matchExpression:
          - key: company.com/costcode:
            operator: In 
            values: [PK-101]
        budget: 500

政策执行

将 Checkov 集成到管道中,并允许平台工程师从上面驱动策略。

YAML

constraints:
  checkov:
    source: https://github.com/<ORG>/<POLICY-REPO>.git?ref=v1.2.0
    secretRef:
       name: policy-sshkey

注意: 虽然这是一个障碍,但如果这是针对生产工作负载应用的,并且没有真正遵循 shift-left 方法,那么在游戏中就非常晚了。对于耦合方法(即在发布版本之前在 Terraform 模块 CI 工作流中使用相同的 PaC 存储库,以及在部署时在集群中强制执行) ,我们的 Policy As (Versioned) Code (PaC)博客绝对值得一读。

更新: 已经完成,可以从 v0.1.1开始使用:
https://github.com/appvia/terraform-controller/releases/tag/v0.1.1

那么,还有什么选择呢?

这并不意味着是一个独家的列表或比较,有很多博客谷歌搜索以外,但它值得强调一些著名的项目。

Crossplane

Crossplane 是一个有趣的项目,正好符合美国 DevOps 所喜爱的“金砖四国”模式。简而言之,它由被管理的资源(想想 Terraform 资源)组成,这些资源被打包成“组合”(想想 Terraform 模块的固执己见的集合) ,并作为可消费的 CRD 呈现给 Application Developer。最初试图复制 Terraform 云支持的广度,最近它加入了 Terrajet 项目俱乐部,该项目由 Terraform 供应商的编码控制器控制。

  • 它有很多优点,但是确实伴随着技术上的支点和平台团队的学习曲线
  • 不能重用以前的投资或经验。机会是你有一个尝试和测试的地形模块,即将被废弃的集合
  • 没有演习或计划支持。对资源所做的任何更改都将尝试立即应用,这存在风险,因为修改特定资源属性可能会引发破坏性更改

Terraform Operator

也许是第一次谷歌点击时键入地形控制器。该项目的工作方式类似——通过 Kubernetes 工作协调一系列工作流程,并将其映射到“ terraform init”和“ terraform application”。

  • T那个自定义资源定义 是非常灵活的,允许调整; 图像,版本,后期和预运行脚本,以及许多其他设置(虽然可以说,你可能不得不以某种方式阻止一些这种功能,因为它增加了表面积滥用)
  • 目前,操作员无法共享凭据。这可以被看作是一种专业技术,但是,它确实使得开发人员的部署和使用更加复杂,因为您现在需要为团队管理凭据,或者可能需要与类似的产品集成Vault .
  • 它具有 spec.resource 下载的特性,这个特性非常有用,可以用来提供特定于环境的配置
  • 不支持批准或审查变更——所有东西都是“自动批准”的
  • 该策略之后必须通过另一个组件(即 GateKeeper 或Kynervo admission controller Kynervo 入场控制器.
  • Terraform 输出是作为 Kubernetes Secret 中的 JSON 对象编写的,因此您的应用程序可能需要更改来解析和使用这些值
© 版权声明

相关文章

没有相关内容!

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...