首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Terraform:在集群创建过程中将“证书颁发机构”数据插入Kube上下文

Azure Terraform:在集群创建过程中将“证书颁发机构”数据插入Kube上下文
EN

Stack Overflow用户
提问于 2021-02-26 12:52:21
回答 1查看 513关注 0票数 0

我们使用Terraform将AKS集群部署到VPN代理后的环境中。当没有代理的离网时,集群的部署工作正常,但是在网络上创建Helm部署时出错。

当集群在网络上运行时,我们可以在检索集群上下文后使用下面的命令连接到它。

代码语言:javascript
复制
kubectl config set-cluster <cluster name> --certificate-authority=<path to organization's root certificate in PEM format>

在创建集群之后,还使用Terraform创建了Helm部署。这似乎需要部署certificate-authority数据,而且我们还没有找到一种方法在这个过程中的正确步骤中实现自动化。因此,apply由于错误而失败:

x509:由身份不明的机构签署的证书

知道我们如何才能将certificate-authority数据放在正确的位置,这样Helm部署就不再失败了吗?还是有一种方法可以让集群隐式地信任根证书?我们尝试了几种不同的方法:

  1. 研究了在检索集群上下文(即az aks get-credentials --name <cluster name> --resource-group <cluster RG>)时,是否可以自动获得这些数据?**无法找到一种简单的方法来完成这一任务。
  2. 我们开始考虑添加根证书信息,作为在部署期间生成的kubeconfig的一部分(而不是在检索上下文时创建的信息)。其思想是,它可以传递给kubernetes/helm提供者,也可以在通过本地-exec块运行kubectl命令时利用。我们知道这是可行的,但这意味着我们无法找到通过Terraform实现自动化的方法。
  3. 我们尝试将根证书提供给提供者配置的不同字段,如下所示。我们特别使用cluster_ca_certificate尝试了几种不同的方法,即提供根CA的PEM风格的证书。
代码语言:javascript
复制
    provider "kubernetes" {
      host                   = module.aks.kube_config.0.host
      client_certificate     = base64decode(module.aks.kube_config.0.client_certificate)
      client_key             = base64decode(module.aks.kube_config.0.client_key)
      cluster_ca_certificate = base64decode(module.aks.kube_config.0.cluster_ca_certificate)
    }
    
    provider "helm" {
      version = ">= 1.2.4"
      kubernetes {
        host                   = module.aks.kube_config.0.host
        client_certificate     = base64decode(module.aks.kube_config.0.client_certificate)
        client_key             = base64decode(module.aks.kube_config.0.client_key)
        cluster_ca_certificate = base64decode(module.aks.kube_config.0.cluster_ca_certificate)
      }
    }

提前感谢您的帮助!如果你需要更多的信息,请告诉我。我对这个项目还不熟悉,所以我可能没有正确地解释过一切。

EN

回答 1

Stack Overflow用户

发布于 2021-03-06 03:01:23

如果以后有人发现了这一点,我们最终只需将项目分成两部分:集群创建和引导。这就让我们在中间添加一个local-exec块来运行kubectl config set-cluster...命令。因此,现在的操作顺序是:

  1. 部署AKS集群(将Kube config本地复制为Terraform输出之一)
  2. 运行命令
  3. 部署微服务

因为我们使用的是Terragrunt,所以我们可以使用它的apply-all函数来执行这两个操作,设置描述的这里的依赖关系。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66386152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档