从 terraform helm_release 资源获取 redis 主机 url
Get redis host url from terraform helm_release resource
我正在使用 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] Unhandled error event: Error: getaddrinfo ENOTFOUND
redis-dev-master
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) [ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND
这表明 redis-dev-master
不是 redis
实例的正确主机。
如何从 helm_release
或 release
创建的任何基础服务中获取 redis
主机?
我已尝试调试 pinging
我的 app
部署中的特定 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
也许您只是使用了错误的 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
}
}
我正在使用 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
.
我是这样做的:
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] Unhandled error event: Error: getaddrinfo ENOTFOUND redis-dev-master at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) [ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND
这表明 redis-dev-master
不是 redis
实例的正确主机。
如何从 helm_release
或 release
创建的任何基础服务中获取 redis
主机?
我已尝试调试 pinging
我的 app
部署中的特定 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
也许您只是使用了错误的 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
}
}