Допустим вы сменили место работы.
На новом месте GCP, Azure, AWS. Миллионы куберов.
Разные тенанты, разные сабскрипшны, разные профили, разные аккаунты, разные регионы.
Ваше железо с нуля, в нём пока нет ничего (а зачем старое со старых работ тащить?)
Надо установить утилиты, Надо обновить кубконфиг.
Чтобы видеть сразу всё и сразу (из доступного по правам).
Первым делом ставим
asdf.https://github.com/asdf-vm/asdf/releases
Затем добавляем тулзы.
cat ~/.tool-versions
kubelogin 0.1.4
helm 3.17.0
dive 0.12.0
sops 3.9.4
terragrunt 0.54.15
terraform 1.5.3
kubectl 1.29.0
awscli 2.31.6
aws-sso-cli 2.0.3
kubectx 0.9.5
eksctl 0.215.0
azure-cli 2.77.0
jq 1.8.1
Апплаим (у меня это алиас
asdfu)cut -d' ' -f1 ~/.tool-versions | xargs -I{} asdf plugin add {} && asdf installТеперь у нас есть все необходимые утилиты
Затем конфигурируем один раз профили(если есть).
aws configure sso
# или
aws configure sso --profile profilename
az login
Теперь нам надо один раз залогиниться в ажур и амазон.
Где-то достаточно
az login и aws sso loginгде-то разово надо попрыгать по профилям
aws sso login --profile profilename
Мы залогинились во все тенанты, все подписки, все аккаунты.
Как теперь в автоматике собрать все кубконфиги?
На помощь нам приходит любимый
bash ❤️.AWS (пример)
account_id=$(aws sts get-caller-identity --query Account --output text)
eksctl get cluster --all-regions -o json | jq -r '.[] | [.Name, .Region] | @tsv' | while read -r name region; do
aws eks update-kubeconfig \
--name "$name" \
--region "$region" \
--alias "${account_id}_${name}-${region}"
done
Azure (пример)
origin_context=$(kubectl config current-context)
original_subscription_info=$(az account show --query '{id:id, name:name}' --output json)
original_subscription_id=$(echo "$original_subscription_info" | jq -r '.id')
subscriptions=$(az account list --query "[].id" --output tsv)
for subscription in $subscriptions; do
az account set --subscription "$subscription"
clusters=$(az aks list --query "[].{name:name, resourceGroup:resourceGroup}" --output json)
for cluster in $(echo "$clusters" | jq -c '.[]'); do
cluster_name=$(echo "$cluster" | jq -r '.name')
resource_group=$(echo "$cluster" | jq -r '.resourceGroup')
az aks get-credentials \
--resource-group "$resource_group" \
--name "$cluster_name" \
--overwrite-existing \
--context "${subscription}_${cluster_name}"
kubelogin convert-kubeconfig -l azurecli
done
done
kubectl config use-context "$origin_context"
az account set --subscription "$original_subscription_id"
Это пример логики скриптов.
Можно изменять под любые цели, мне в целом удобнее формат алиасов кластеров
# AWS
<account_id>_<cluster_name>-<region>
# Azure
<subscription_id>_<cluster_name>-<region>
Алиасы каждый пилит сам под себя - как кому удобнее.
Можно даже добавлять суффикс, что за кластера
# AWS
eks-<account_id>_<cluster_name>-<region>
# Azure
aks-<subscription_id>_<cluster_name>-<region>
Очевидно, что если аккаунт один, подписка одна и регион один - сложный нейминг не нужен.
Теперь наше рабочее место настроено и в любой момент времени можно обновить актуальные кластера всех провайдеров, всех тенантов, подписок, аккаунтов и даже всех регионов.
Вводим
kubectx, видим огромный список всего.> kubectx
aks-98765-98765-98765_stage-fake-centralus
aks-54321-54321-54321_dev-fake-eastus2
aks-12345-12345-12345_uat-fake-germanywestcentral
eks-123456789_dev-project1-us-east-1
eks-123456789_stage-project2-us-east-2
...
Cвичимся в нужное и поехали работать.
* в условиях разных SSO и корпоративных политик некоторые способы могут отличаться. Это лишь общий паттерн.
А доступ в GCP вам так и не дали 😀