1

我正在使用 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
4

0 回答 0