🤖

kubernetes provider の設定が原因でエラーが出た

2023/12/14に公開

はじめに

Terragrunt で Plan したら EKS 周りでエラーが出てよくわからなかったので対処法まとめます。

問題

下記の2件のエラーが発生しました。

EKS のエンドポイントを叩いているべきなのに、localhost になっている、、?

╷
│ Error: Get "http://localhost/api/v1/namespaces/aws-observability": dial tcp [::1]:80: connect: connection refused
│
│   with module.eks_blueprints_addons.kubernetes_namespace_v1.aws_observability[0],
│   on .terraform/modules/eks_blueprints_addons/main.tf line 2545, in resource "kubernetes_namespace_v1" "aws_observability":2545: resource "kubernetes_namespace_v1" "aws_observability" {
│
╵
│ Error: Get "http://localhost/api/v1/namespaces/aws-observability/configmaps/aws-logging": dial tcp [::1]:80: connect: connection refused
│
│   with module.eks_blueprints_addons.kubernetes_config_map_v1.aws_logging[0],
│   on .terraform/modules/eks_blueprints_addons/main.tf line 2558, in resource "kubernetes_config_map_v1" "aws_logging":2558: resource "kubernetes_config_map_v1" "aws_logging" {
│
╵

対象のリソースを state から削除したら、とりあえず Plan は通るようになります。

が、Apply で結局似たようなエラーが発生します。

解決方法

provider の設定を見直すといいと思います。(最初からこっちで良かった)

下記は一例です。

provider "kubernetes" {
host = module.eks.cluster_endpoint
cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)
exec {
api_version = "client.authentication.k8s.io/v1beta1"
args = ["eks", "get-token", "--cluster-name", module.eks.cluster_name]
command = "aws"
}
# config_path = "~/.kube/config"
# config_context = module.eks.cluster_arn
}

おわりに

エラーで検索したら英語の Discussion ばっかでちょっと大変だった。

ネットワーク接続エラーが出た時に、なぜか localhost に接続していることに違和感を持って、そこから Provider の設定を疑っていれば時間浪費せずにすぐに対処できたかも。

参考

Error: Get "http://localhost/api/v1/namespaces/kube-system/configmaps/aws-auth" · Issue #143 · cloudposse/terraform-aws-eks-cluster · GitHub

Terraform Registry

2.6.0 provider version causing `Error: Kubernetes cluster unreachable: exec plugin: invalid apiVersion` · Issue #893 · hashicorp/terraform-provider-helm · GitHub

GitHubで編集を提案

Discussion