这里创建一个随机密码:
resource "random_password" "password" {
length = 12
special = true
override_special = "!#$%&*()-_=+[]{}:?"
}
这里我为数据库创建一个秘密:
resource "kubernetes_secret" "db_pass" {
metadata {
name = "db-pass"
}
data = {
MYSQL_PASSWORD = "${aws_db_instance.database.password}"
S3_ACCESS_KEY_ID : ""
S3_SECRET_KEY : ""
RABBITMQ_PASSWORD = "${var.rabbitpassw}"
RABBITMQ_ERLANGCOOKIE = "${var.erlangcookie}"
}
depends_on = [
aws_db_instance.database,
module.s3_bucket
]
}
那么这段代码应该使用数据库用于连接的随机密码:
resource "aws_db_instance" "database" {
allocated_storage = var.instance_storage_db
max_allocated_storage = var.max_storage_db
engine = var.instance_engine_db
engine_version = var.instance_engine_version_db
instance_class = var.instance_size_db
identifier = "${var.cluster_name}-db-instance"
db_name = "tester"
username = "admin"
password = random_password.password.result
snapshot_identifier = var.db_snapshot_id
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.db_sg.id]
skip_final_snapshot = var.skip_final_snapshot_db
multi_az = var.multi_az_db
backup_retention_period = var.ret_period_db
}
我以前用过它,它工作正常,现在我创建新集群并秘密创建24个字符的密码,我无法使用mysql连接到RDS
创建硬编码密码时,与RDS的连接正常
grafana 随机密码也有同样的问题。
有人解决这个问题吗?
首先,我将使用
random_password.password.result
作为 kubernetes 秘密的数据内容。您正在创建不必要的依赖关系。
当您在 aws_db_instance 资源中创建硬编码密码(不推荐)或
random_password.password.result
时,它会起作用,因为它使用真实内容。
但请记住,kubernetes Secret内容是用base64格式混合的。因此,当您创建资源时
kubernetes_secret
,它已经生成了带有 base64 的 random_password。
无论如何,你可以调试你的 kubernetes 秘密和随机密码的内容。
调试:
即使使用sensitive = false,terraform的输出选项也不允许显示密码,但如果您有权访问纯文本teraform.tfstate,您可以找到随机密码的纯文本(类似于
"result": "V1dp81Dxr#nj",
)并检查它是否与类似查询结果匹配:
kubectl get secret db-pass -o jsonpath='{.data.MYSQL_PASSWORD}' -n namespace | base64 --decode | awk '{print $1}'
希望对你有帮助。