【问题标题】:Get redis host url from terraform helm_release resource从 terraform helm_release 资源获取 redis 主机 url
【发布时间】:2022-01-17 17:35:27
【问题描述】:

我正在使用 Terraform helm_release 资源在我的 K8s 集群中安装 bitnami/redis 实例。

代码如下所示:

resource "helm_release" "redis-chart" {
  name = "redis-${var.env}"

  repository = "https://charts.bitnami.com/bitnami"
  chart      = "redis"
  namespace  = "redis"
  create_namespace = true

  set {
    name  = "auth.enabled"
    value = "false"
  }

  set {
    name  = "master.containerPort"
    value = "6379"
  }

  set {
    name  = "replica.replicaCount"
    value = "2"
  }
}

它成功完成并在一个单独的目录中我有我的app terraform 配置。 在app的配置中,我想从上面的helm_release获取redis主机。

我是这样做的:

data "kubernetes_service" "redis-master" {
  metadata {
    name      = "redis-${var.env}-master"
    namespace = "redis"
  }
}

然后在kubernetes_secret 资源中,我将数据传递给我的app 部署:

resource "kubernetes_secret" "questo-server-secrets" {
  metadata {
    name      = "questo-server-secrets-${var.env}"
    namespace = kubernetes_namespace.app-namespace.metadata.0.name
  }

  data = {
    REDIS_HOST            = data.kubernetes_service.redis-master.metadata.0.name
    REDIS_PORT            = data.kubernetes_service.redis-master.spec.0.port.0.port
  }
}

但不幸的是,当我运行应用程序 deployment 时,我得到了以下日志:

[ioredis] 未处理的错误事件:错误:getaddrinfo ENOTFOUND redis-dev-master 在 GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) [ioredis] 未处理的错误事件:错误:getaddrinfo ENOTFOUND

这表明redis-dev-master 不是redis 实例的正确主机。

如何从helm_releaserelease 创建的任何底层服务获取redis 主机?

我已尝试从我的 app 部署中调试并 pinging 一个特定的 pod。

作为参考,这些是我的redis资源:

NAME                       READY   STATUS    RESTARTS   AGE
pod/redis-dev-master-0     1/1     Running   0          34m
pod/redis-dev-replicas-0   1/1     Running   1          34m
pod/redis-dev-replicas-1   1/1     Running   0          32m

NAME                         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/redis-dev-headless   ClusterIP   None             <none>        6379/TCP   34m
service/redis-dev-master     ClusterIP   172.20.215.60    <none>        6379/TCP   34m
service/redis-dev-replicas   ClusterIP   172.20.117.134   <none>        6379/TCP   34m

NAME                                  READY   AGE
statefulset.apps/redis-dev-master     1/1     34m
statefulset.apps/redis-dev-replicas   2/2     34m

【问题讨论】:

  • 你为什么不试试data.kubernetes_service.redis-master.spec.cluster_ip
  • 听起来 DNS 在 Terraform 执行的任何地方都无法为您解析。该错误消息也看起来像 Redis 抛出的错误,而不是 Terraform 或 Terraform-Kubernetes 提供者抛出的错误,这有助于缩小根本原因。
  • 是的,@Hackerman,我就是这么做的,如果你把它写成答案,我很乐意为可能偶然发现它的其他人投票。

标签: kubernetes redis terraform


【解决方案1】:

也许您只是使用了错误的attribute 来获取该信息。检查Terraform Registry Website 的文档,我们可以使用 cluster_ip 属性,如 spec 文档描述中所述。 所以你应该得到类似的结果:

data.kubernetes_service.redis-master.spec.cluster_ip

最后得到以下结果:

resource "kubernetes_secret" "questo-server-secrets" {
  metadata {
    name      = "questo-server-secrets-${var.env}"
    namespace = kubernetes_namespace.app-namespace.metadata.0.name
  }

  data = {
     REDIS_HOST            = data.kubernetes_service.redis-master.spec.cluster_ip
     REDIS_PORT            = data.kubernetes_service.redis-master.spec.port
  }
}

【讨论】:

    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2020-03-26
    • 2015-07-14
    • 2019-07-19
    相关资源
    最近更新 更多