我正在使用 Terraform 设置外部 DNS。根据文档,我必须手动创建一个azure.json文件并将其挂载为秘密卷。指示还指出:
默认情况下,Azure DNS 提供程序期望配置文件位于 /etc/kubernetes/azure.json
{
"tenantId": "01234abc-de56-ff78-abc1-234567890def",
"subscriptionId": "01234abc-de56-ff78-abc1-234567890def",
"resourceGroup": "MyDnsResourceGroup",
"aadClientId": "01234abc-de56-ff78-abc1-234567890def",
"aadClientSecret": "uKiuXeiwui4jo9quae9o"
}
然后我运行kubectl create secret generic azure-config-file --from-file=/local/path/to/azure.json将秘密挂载为文件。
问题是这些值是动态的,我需要根据 CI/CD 管道自动执行此操作。我正在使用 Terraform Kubernetes 资源,在这里我使用了该kubernetes_secret资源。
resource "kubernetes_secret" "azure_config_file" {
metadata {
name = "azure-config-file"
}
data = {
tenantId = data.azurerm_subscription.current.tenant_id
subscriptionId = data.azurerm_subscription.current.subscription_id
resourceGroup = azurerm_resource_group.k8s.name
aadClientId = azuread_application.sp_externaldns_connect_to_dns_zone.application_id
aadClientSecret = azuread_application_password.sp_externaldns_connect_to_dns_zone.value
}
depends_on = [
kubernetes_namespace.external_dns,
]
}
秘密被挂载,但 pod 永远不会看到它,它会导致 crashLoopBackoff。这可能不是最好的方向。
如何使用 Terraform 自动化此过程并正确安装?
作为参考,这是 YAML 清单的相关部分
...
volumeMounts:
- name: azure-config-file
mountPath: /etc/kubernetes
readOnly: true
volumes:
- name: azure-config-file
secret:
secretName: azure-config-file
items:
- key: externaldns-config.json
path: azure.json