当我尝试根据此kubernetes_persistent_volume_claim创建持久声明和卷时,我会遇到此错误
错误:发布"http://localhost/api/v1/namespaces/default/persistentvolumeclaims":拨号tcp [::1]:80:connectex:无法建立连接,因为目标计算机主动拒绝了它。
我还尝试过假脱机azure磁盘并通过此处概述的方法创建卷Persistent Volume using Azure Managed Disk
我的terraform kubernetes提供程序看起来像这样:
provider "kubernetes" {
alias = "provider_kubernetes"
host = module.kubernetes-service.kube_config.0.host
username = module.kubernetes-service.kube_config.0.username
password = module.kubernetes-service.kube_config.0.password
client_certificate = base64decode(module.kubernetes-service.kube_config.0.client_certificate)
client_key = base64decode(module.kubernetes-service.kube_config.0.client_key)
cluster_ca_certificate = base64decode(module.kubernetes-service.kube_config.0.cluster_ca_certificate)
}
我不相信它甚至击中了我的RG中的K8。有什么我错过了或者也许我不明白这是如何工作的,把它放在一起的正确方式。我有RG假脱机与K8资源在同一terraform创建罚款,但当谈到设置持久性存储我不能得到过去的错误。
2条答案
按热度按时间j5fpnvbx1#
提供程序有别名,因此首先要确保所有
kubernetes
资源使用正确的提供程序。您必须为每个资源指定别名提供程序。另一种可能性是,
localhost
连接错误可能是,因为Kubernetes群集资源存在挂起的更改,导致其返回属性处于known-after-apply状态。尝试
terraform plan --target module.kubernetes-service.kube_config
,查看是否显示了对K8s资源的任何挂起的更改(它可能依赖于)。最好直接指向Kubernetes群集资源。如果是,请先单独应用这些更改:
terraform apply --target module.kubernetes-service.kube_config
,然后运行第二个应用,但不使用--target
,如下所示:terraform apply
.如果群集资源没有挂起的更改,请检查模块返回的凭据是否正确。同时,请仔细检查base64decode的使用是否正确。
vsnjm48y2#
尝试使用terraform plan--target module. kubernetes-service. kube_config查看〉是否显示了对K8s资源的任何挂起的更改(它可能依赖于)。〉更好的方法是直接将Kubernetes群集资源作为目标。
如果是,请先单独应用这些更改:terraform apply--target〉模块. kubernetes-service. kube_config,然后运行第二个没有--〉目标应用程序,如下所示:地形应用。
在我的例子中,是IAM角色定义和分配中的冲突导致了这个问题。执行
terraform plan --target module.eks
(模块. eks是terraform代码中使用的模块名),然后执行terraform apply --target module.eks
,可以删除冲突的角色定义。从terraform输出中,我可以看到是哪个角色策略和角色导致了这个问题。