Kubernetes
June 2, 2023

Подключение к кластеру с помощью статического файла конфигурации

Одним из способов, который чаще всего используют в целях автоматизации, является подключение с помощью статического файла. В нём будет храниться вся информация о соединении.

Подготовка!

1. Определимся в начале с кластером, к которому будем подключаться.
2. На ВМ с которой подключаемся создадим каталог, в котором и будет лежать файл статического доступа.
3.Подключимся к кластеру чтобы создать в нём необходимые объекты.

export CLUSTER_ID=catgjoa9q28mah39srg6
mkdir statfile-for-k8s-cluster && cd statfile-for-k8s-cluster
yc managed-kubernetes cluster get-credentials --id catgjoa9q28mah39srg6 --external --force

Поехали!

# Получаем корневой сертификат кластера. С помощью этого сертификата подтверждается подлинность кластера Kubernetes.
yc k8s cluster get --id $CLUSTER_ID --format json | \
jq -r .master.master_auth.cluster_ca_certificate | \
awk '{gsub(/\\n/,"\n")}1' > ca.pem
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
EOF
# Получаем токен для SA
export SA_TOKEN=$(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | \
grep admin-user | \
awk '{print $1}') -o json | \
jq -r .data.token | \
base64 --d)
# Получаем ip мастера.
export MASTER_ENDPOINT=$(yc managed-kubernetes cluster get --id $CLUSTER_ID \
--format json | \
jq -r .master.endpoints.external_v4_endpoint)

Создаём файл конфигурации.

kubectl config set-cluster sa-test2 \
--certificate-authority=ca.pem \
--server=$MASTER_ENDPOINT \
--kubeconfig=test.kubeconfig
kubectl config set-credentials admin-user \
--token=$SA_TOKEN \
--kubeconfig=test.kubeconfig
kubectl config set-context default \
--cluster=sa-test2 \
--user=admin-user \
--kubeconfig=test.kubeconfig
kubectl config use-context default \
--kubeconfig=test.kubeconfig

Проверка результата.

kubectl create ns test23
kubectl get ns --kubeconfig=test.kubeconfig
NAME              STATUS   AGE
default           Active   11d
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d
test23            Active   13s
yandex-system     Active   11d

Подключимся к другому кластеру

yc managed-kubernetes cluster get-credentials --id cateh2jib1g8ja8v811a --external --force
# Смотрим ns в новом кластере
kubectl get ns
NAME              STATUS   AGE
default           Active   21d
kube-node-lease   Active   21d
kube-public       Active   21d
kube-system       Active   21d
yandex-system     Active   21d
# А если использовать статический файл, то подключение идёт к старому кластеру
kubectl get ns --kubeconfig=test.kubeconfig
NAME              STATUS   AGE
default           Active   11d
kube-node-lease   Active   11d
kube-public       Active   11d
kube-system       Active   11d
test23            Active   3m47s
yandex-system     Active   11d