Kubectl multicluster

Установить kubectl и kubelogin

Установить оба инструмента

# Install kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

# Install kubelogin (oidc-login)
# For Linux
curl -LO https://github.com/int128/kubelogin/releases/latest/download/kubelogin_linux_amd64.zip
unzip kubelogin_linux_amd64.zip
chmod +x kubelogin
sudo mv kubelogin /usr/local/bin/

Сконфигурировать разные контексты

# Add first cluster
kubectl config set-cluster cluster1 \
  --server=https://api.cluster1.example.com \
  --certificate-authority=cluster1-ca.crt

kubectl config set-credentials user1 \
  --auth-provider=oidc \
  --auth-provider-arg=idp-issuer-url=https://issuer.example.com \
  --auth-provider-arg=client-id=your-client-id \
  --auth-provider-arg=client-secret=your-client-secret \
  --auth-provider-arg=refresh-token=your-refresh-token

kubectl config set-context cluster1 \
  --cluster=cluster1 \
  --user=user1 \
  --namespace=default

# Add second cluster
kubectl config set-cluster cluster2 \
  --server=https://api.cluster2.example.com \
  --certificate-authority=cluster2-ca.crt

kubectl config set-credentials user2 \
  --auth-provider=oidc \
  --auth-provider-arg=idp-issuer-url=https://issuer.example.com \
  --auth-provider-arg=client-id=your-client-id \
  --auth-provider-arg=client-secret=your-client-secret

kubectl config set-context cluster2 \
  --cluster=cluster2 \
  --user=user2 \
  --namespace=default

Подключение с выбором контекста

# Login to cluster1
kubectl oidc-login --context=cluster1

# Login to cluster2  
kubectl oidc-login --context=cluster2

Скрипт-обёртка для kubectl

#!/bin/bash
# kubectl-auth.sh

CONTEXT=$1
shift

# Refresh token if needed
kubectl oidc-login --context=$CONTEXT --skip-open-browser > /dev/null 2>&1

# Execute kubectl command
kubectl --context=$CONTEXT "$@"

Использование:

./kubectl-auth.sh cluster1 get pods
./kubectl-auth.sh cluster2 get nodes

Настройка kubelogin

Разные конфиги для разных кластеров занести в YAML:

# ~/.kube/kubelogin.yaml
- name: cluster1-login
  context: cluster1
  oidc:
    issuerUrl: https://issuer.example.com
    clientId: cluster1-client-id
    clientSecret: cluster1-client-secret
    extraScopes: ["email", "groups"]

- name: cluster2-login  
  context: cluster2
  oidc:
    issuerUrl: https://issuer2.example.com
    clientId: cluster2-client-id
    clientSecret: cluster2-client-secret

Переключение между кластерами

# Список контекстов
kubectl config get-contexts

# Переключение на конкретный кластер
kubectl config use-context cluster1

# Верификация контекста
kubectl config current-context

# Запуск команд без переключения контекста
kubectl --context=cluster1 get pods
kubectl --context=cluster2 get nodes