使用 Terraform 或 Helm 在 EKS 集群上的 ISTIO 上进行设置

Swe*_*rma 9 kubernetes terraform kubernetes-helm istio amazon-eks

我是 Terraform 和 Helm 世界的新手!我需要在 AWS EKS 集群上设置 Istio。我能够使用 Terraform 设置 EKS 集群。我正在考虑通过编写 terraform 模块使用 Terraform 在 EKS 集群之上安装 ISTIO。然而,我发现我们可以使用 Helm Chart 在 eks 之上设置 Istio。

有人可以帮我回答我的几个问题吗:

  1. 我应该使用 Terraform 安装 Istio 吗?如果是,是否有可用的 terraform 模块或我如何编写一个?
  2. 我应该使用 Helm Chart 安装 Istio 吗?如果是的话,它的优点和缺点是什么?
  3. 我需要编写一个管道来在 EKS 集群上安装 Istio。我应该结合使用 terraform 和 Helm 作为提供程序吗?

非常感谢您的宝贵时间。感谢您的所有帮助!

Ben*_*nda 9

为了扩展 @Chris terraform + helm 提供者的第三个选项,

至于 istio 1.12.0+ 版本,他们官方有一个可用的 helm 仓库:

istio 舵安装

并且使用 terraform 的 helm 提供程序 Terraform helm 提供 程序允许仅由 terraform 配置的简单设置:

provider "helm" {
  kubernetes {
    // enter the relevant authentication
  }
}

locals {
  istio_charts_url = "https://istio-release.storage.googleapis.com/charts"
}

resource "helm_release" "istio-base" {
  repository       = local.istio_charts_url
  chart            = "base"
  name             = "istio-base"
  namespace        = var.istio-namespace
  version          = "1.12.1"
  create_namespace = true
}

resource "helm_release" "istiod" {
  repository       = local.istio_charts_url
  chart            = "istiod"
  name             = "istiod"
  namespace        = var.istio-namespace
  create_namespace = true
  version          = "1.12.1"
  depends_on       = [helm_release.istio-base]
}

resource "kubernetes_namespace" "istio-ingress" {
  metadata {
    labels = {
      istio-injection = "enabled"
    }

    name = "istio-ingress"
  }
}

resource "helm_release" "istio-ingress" {
  repository = local.istio_charts_url
  chart      = "gateway"
  name       = "istio-ingress"
  namespace  = kubernetes_namespace.istio-ingress-label.id
  version    = "1.12.1"
  depends_on = [helm_release.istiod]
}
Run Code Online (Sandbox Code Playgroud)

这是为制作做好准备所缺少的最后一步

不再需要使用 null_resource 在本地保存 helm 图表

如果您希望覆盖默认的 helm 值,这里很好地显示了它: Artifact hub,选择相关图表并查看值


jt9*_*t97 4

正如@Matt Schuchard 提到的,这是一个基于意见的问题,这就是为什么我会根据我的理解来回答这个问题。


问题 1。

  1. 要回答你的问题,Should I install Istio using Terraform?是的,如果你遵循 DevOps 实践,那么你应该在代码中编写所有内容,所以我建议这样做。

  2. 根据你问题的第二部分,If yes, Is there any Terraform module available不,从我目前的情况来看,Terraform 没有 Istio 模块,只有一个helm模块。

  3. 至于第一个问题的最后一部分,How can I write Terraform module?我建议从 Terraform文档开始。还有一个创建模块的教程。


问题 2。

  1. 要回答您的问题,Should I install Istio using Helm Chart?取决于您的用例,您可以使用 helm 或 istioctl/istio 运算符来完成。
  2. 至于下面的问题,根据 Istio文档If yes, what are the pros and cons of it?我不确定当前的 Helm Chart 是否已准备好生产,因此根据我的理解,您应该使用 Operator 而不是 Helm。还值得注意的是,如果在 1.8 版本中重新使用 Helm Chart,则有几个版本都没有使用它。Providing the full configuration in an IstioOperator CR is considered an Istio best practice for production environments

问题 3。

  1. 根据最后一个问题,I need to write a pipeline to install Istio on EKS cluster. Should I use a combination of both terraform and Helm as provider?取决于,它可以是 Terraform 和 Helm,但从我看来,也可以使用 Terraform 和 Istio Operator 来做到这一点,有一个例子。因此,走哪条路完全取决于你自己。

我还建议您看看这个 reddit线程。您可能会在此处的 prod 环境中找到一些关于使用 Terraform 安装 Istio 的有用注释。