🤖

ArgoCDに外部クラスタを登録する方法

2023/04/10に公開

構成

  • EKS 1.25
  • クラスタは2台
    • ArgoCDクラスタ
    • 対象クラスタ
    • 2台とも同一サブネット上に所属

手順

対象EKSクラスタのcontextを取得

aws eks update-kubeconfig --region ap-northeast-1 --name vamdemic-clsuter

Name部分を控える

kubectl config get-contexts

ArgoCDに登録

argocd cluster add arn:aws:eks:ap-northeast-1:123456789012:cluster/vamdemic-cluster

標準出力

WARNING: This will create a service account `argocd-manager` on the cluster referenced by context `arn:aws:eks:ap-northeast-1:123456789012:cluster/terema-dev-service-cluster` with full cluster level privileges. Do you want to continue [y/N]? y
INFO[0001] ServiceAccount "argocd-manager" already exists in namespace "kube-system"
INFO[0001] ClusterRole "argocd-manager-role" updated
INFO[0001] ClusterRoleBinding "argocd-manager-role-binding" updated
Cluster 'https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.gr7.ap-northeast-1.eks.amazonaws.com' added

このメッセージが出る場合、対象クラスタへの通信が届いていない。
セキュリティグループでArgoCDがのっているクラスタからのアクセスを許可すると解決できるかもしれないです。
これちなみに、同一サブネット上に対象クラスタがある場合は、サブネット内のプライベート通信での接続になるはずなので、EKSClusterのAPIエンドポイントの公開設定も確認したほうがいいかもしれません。

FATA[0032] rpc error: code = Unknown desc = Get "https://XXXXXXXXXXXXXXXXXXXXXXXXX.gr7.ap-northeast-1.eks.amazonaws.com/version?timeout=32s": dial tcp 10.0.87.65:443: i/o timeout

うまく追加できるとこのような感じで、UIからClusterがセットされているのが確認できる。

ちなみに、対象ClusterにApplicationリソースをデプロイしていない状態だと、Successfullと出ず、Unknownと出ますが、接続自体は成功しているはずなので、なにか適当なApplicationリソースを作って試してみるといいかもしれません。

それでもダメな場合

登録先にリソース作成をするのだけど、失敗時のゴミリソースになっているかもしれないので、クリアしてみると変わるかもしれないです。

kubectl -n kube-system delete ClusterRoleBinding argocd-manager-role-binding
kubectl -n kube-system delete clusterrole argocd-manager-role
kubectl -n kube-system delete serviceaccounts argocd-manager

セキュリティグループでハマったら

EKSには、デフォルトでセットされるセキュリティグループと追加でアタッチできるセキュリティグループがあります。
結論、ソースセキュリティグループを指定する形でルールを作る場合、「追加となるセキュリティグループにデフォルトでセットされているセキュリティグループを許可する設定を入れる」とすると、できました。
なので、EKS的にはデフォルトでセットされているセキュリティグループが主であり、EC2やLambdaにロールアタッチするのはこの設定が対応していると思えばOKみたいです。

Discussion