5.2.2.3. Kubeconfigs
Kubeconfig — это конфигурационный файл, который предоставляет доступ к кластеру Kubernetes. Он содержит информацию о серверах API, учетных данных пользователей (таких как токены или сертификаты) и контекстах, определяющих, какой кластер и пользователь используются. Kubeconfig обеспечивает аутентификацию и авторизацию при взаимодействии с кластером через kubectl или другие клиенты, позволяя безопасно управлять ресурсами и настройками кластера.
Создаём
kubeconfig
-файлы для компонентов и пользователей. Это обеспечивает защищённое и контролируемое подключение к API-серверу.
- Init
- Join
Создание конфигураций kubeconfig и сертификатов
● Обязателен к применению
Создание конфигураций kubeconfig и сертификатов
● Обязателен к применению
- Super Admin
- Admin
- Controller
- Scheduler
- Kubelet
Super Admin
Super Admin
- HardWay
- Kubeadm
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
mkdir -p /etc/kubernetes/kubeconfig
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/super-admin.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = kubernetes-super-admin
O = system:masters
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Генерация приватного ключа
openssl genrsa \
-out /etc/kubernetes/kubeconfig/super-admin.key 2048
Генерация CSR
openssl req \
-new \
-key /etc/kubernetes/kubeconfig/super-admin.key \
-out /etc/kubernetes/openssl/csr/super-admin.csr \
-config /etc/kubernetes/openssl/super-admin.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/super-admin.csr \
-out /etc/kubernetes/kubeconfig/super-admin.crt \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/super-admin.conf
Настройка Kubeconfig для super-admin
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/super-admin.conf
kubectl config set-credentials system:node:${HOST_NAME} \
--client-certificate=/etc/kubernetes/kubeconfig/super-admin.crt \
--client-key=/etc/kubernetes/kubeconfig/super-admin.key \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/super-admin.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${HOST_NAME} \
--kubeconfig=/etc/kubernetes/super-admin.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/super-admin.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/kubeconfig/super-admin.crt
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
super-admin.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Генерация сертификатов
kubeadm init phase kubeconfig super-admin \
--config=/var/run/kubeadm/kubeadm.yaml
После выполнения команд получаем следующий вывод.
#### Генерация сертификатов
[kubeconfig] Writing "super-admin.conf" kubeconfig file
Проверка готовности сертификата
Данная команда не способна отображать статус конкретного сертификата, только список доступных.
kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
super-admin.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Admin
Admin
- HardWay
- Kubeadm
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
mkdir -p /etc/kubernetes/kubeconfig
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/admin.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = kubernetes-admin
O = kubeadm:cluster-admins
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Приватные ключи
openssl genrsa \
-out /etc/kubernetes/kubeconfig/admin.key 2048
Генерация CSR
openssl req \
-new \
-key /etc/kubernetes/kubeconfig/admin.key \
-out /etc/kubernetes/openssl/csr/admin.csr \
-config /etc/kubernetes/openssl/admin.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/admin.csr \
-out /etc/kubernetes/kubeconfig/admin.crt \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/admin.conf
Настройка Kubeconfig для admin
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/admin.conf
kubectl config set-credentials system:node:${HOST_NAME} \
--client-certificate=/etc/kubernetes/kubeconfig/admin.crt \
--client-key=/etc/kubernetes/kubeconfig/admin.key \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/admin.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${HOST_NAME} \
--kubeconfig=/etc/kubernetes/admin.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/admin.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/kubeconfig/admin.crt
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Генерация сертификатов
kubeadm init phase kubeconfig admin \
--config=/etc/kubernetes/kubeadm.yaml
После выполнения команд получаем следующий вывод.
#### Генерация сертификатов
[kubeconfig] Writing "admin.conf" kubeconfig file
Проверка готовности сертификата
Данная команда не способна отображать статус конкретного сертификата, только список доступных.
kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Kube Controller Manager
Kube Controller Manager
- HardWay
- Kubeadm
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/controller-manager-client.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = system:kube-controller-manager
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Генерация приватного ключа
openssl genrsa \
-out /etc/kubernetes/kubeconfig/controller-manager-client-key.pem 2048
Генерация CSR
openssl req \
-new \
-key /etc/kubernetes/kubeconfig/controller-manager-client-key.pem \
-out /etc/kubernetes/openssl/csr/controller-manager-client.csr \
-config /etc/kubernetes/openssl/controller-manager-client.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-outform PEM \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/controller-manager-client.csr \
-out /etc/kubernetes/kubeconfig/controller-manager-client.pem \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/controller-manager-client.conf
export CLUSTER_NAME="my-first-cluster"
export BASE_DOMAIN="example.com"
export CLUSTER_DOMAIN="cluster.local"
export FULL_HOST_NAME="${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}"
Настройка Kubeconfig для controller-manager-client
kubectl config set-cluster kubernetes \
--certificate-authority="/etc/kubernetes/pki/ca.crt" \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/controller-manager.conf
kubectl config set-credentials system:node:${FULL_HOST_NAME} \
--client-certificate=/etc/kubernetes/kubeconfig/controller-manager-client.pem \
--client-key=/etc/kubernetes/kubeconfig/controller-manager-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/controller-manager.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${FULL_HOST_NAME} \
--kubeconfig=/etc/kubernetes/controller-manager.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/controller-manager.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/kubeconfig/controller-manager-client.pem
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
controller-manager.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Генерация сертификатов
kubeadm init phase kubeconfig controller-manager \
--config=/var/run/kubeadm/kubeadm.yaml
После выполнения команд получаем следующий вывод.
#### Генерация сертификатов
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
Проверка готовности сертификата
Данная команда не способна отображать статус конкретного сертификата, только список доступных.
kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
controller-manager.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Kube Scheduler
Kube Scheduler
- HardWay
- Kubeadm
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/scheduler-client.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = system:kube-scheduler
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Генерация приватного ключа
openssl genrsa \
-out /etc/kubernetes/kubeconfig/scheduler-client-key.pem 2048
Генерация CSR
openssl req \
-new \
-key /etc/kubernetes/kubeconfig/scheduler-client-key.pem \
-out /etc/kubernetes/openssl/csr/scheduler-client.csr \
-config /etc/kubernetes/openssl/scheduler-client.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-outform PEM \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/scheduler-client.csr \
-out /etc/kubernetes/kubeconfig/scheduler-client.pem \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/scheduler-client.conf
export CLUSTER_NAME="my-first-cluster"
export BASE_DOMAIN="example.com"
export CLUSTER_DOMAIN="cluster.local"
export FULL_HOST_NAME="${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}"
Инструкция создания Kubeconfig
kubectl config set-cluster kubernetes \
--certificate-authority="/etc/kubernetes/pki/ca.crt" \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/scheduler.conf
kubectl config set-credentials system:node:${FULL_HOST_NAME} \
--client-certificate=/etc/kubernetes/kubeconfig/scheduler-client.pem \
--client-key=/etc/kubernetes/kubeconfig/scheduler-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/scheduler.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${FULL_HOST_NAME} \
--kubeconfig=/etc/kubernetes/scheduler.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/scheduler.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/kubeconfig/scheduler-client.pem
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
scheduler.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Генерация сертификатов
kubeadm init phase kubeconfig scheduler \
--config=/var/run/kubeadm/kubeadm.yaml
После выполнения команд получаем следующий вывод.
#### Генерация Kube Scheduler сертификатов
[kubeconfig] Writing "scheduler.conf" kubeconfig file
Проверка готовности сертификата
Данная команда не способна отображать статус конкретного сертификата, только список доступных.
kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
scheduler.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Kubelet client
Kubelet client
Обратите внимание! Можно подписать через kubectl certificate approve
- HardWay
- Kubeadm
Переменные окружения
export CLUSTER_NAME=my-first-cluster
export BASE_DOMAIN=example.com
export CLUSTER_DOMAIN=cluster.local
export FULL_HOST_NAME=${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
mkdir -p /var/lib/kubelet/pki
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/kubelet-client.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = system:node:${FULL_HOST_NAME}
O = system:nodes
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Генерация приватного ключа
openssl genrsa \
-out /var/lib/kubelet/pki/kubelet-client-key.pem 2048
Генерация CSR
openssl req \
-new \
-key /var/lib/kubelet/pki/kubelet-client-key.pem \
-out /etc/kubernetes/openssl/csr/kubelet-client.csr \
-config /etc/kubernetes/openssl/kubelet-client.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-outform PEM \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/kubelet-client.csr \
-out /var/lib/kubelet/pki/kubelet-client.pem \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/kubelet-client.conf
cat /var/lib/kubelet/pki/kubelet-client.pem /var/lib/kubelet/pki/kubelet-client-key.pem >> /var/lib/kubelet/pki/kubelet-client-$(date '+%Y-%m-%d-%H-%M-%S').pem
ln -s /var/lib/kubelet/pki/kubelet-client-$(date '+%Y-%m-%d-%H-%M-%S').pem /var/lib/kubelet/pki/kubelet-client-current.pem
export CLUSTER_NAME="my-first-cluster"
export BASE_DOMAIN="example.com"
export CLUSTER_DOMAIN="cluster.local"
export FULL_HOST_NAME="${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}"
Инструкция создания Kubeconfig
kubectl config set-cluster kubernetes \
--certificate-authority="/etc/kubernetes/pki/ca.crt" \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config set-credentials system:node:${FULL_HOST_NAME} \
--client-certificate=/var/lib/kubelet/pki/kubelet-client.pem \
--client-key=/var/lib/kubelet/pki/kubelet-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${FULL_HOST_NAME} \
--kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/kubelet.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/pki/etcd/server.crt
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
kubelet-client-current Oct 22, 2025 22:06 UTC 364d kubernetes no
Генерация сертификатов
kubeadm init phase kubeconfig kubelet \
--config=/var/run/kubeadm/kubeadm.yaml
После выполнения команд получаем следующий вывод.
#### Генерация сертификатов
[kubeconfig] Writing "kubelet.conf" kubeconfig file
Ротация сертификатов
kubeadm init phase kubelet-finalize experimental-cert-rotation \
--config=/var/run/kubeadm/kubeadm.yaml
После выполнения команд получаем следующий вывод.
#### Ротация сертификатов
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
Проверка готовности сертификата
kubeadm не отображает статус сертификата, используемого компонентом kubelet
.
Создание конфигураций kubeconfig и сертификатов
● Обязателен к применению
Создание конфигураций kubeconfig и сертификатов
● Обязателен к применению
- Super Admin
- Admin
- Controller
- Scheduler
- Kubelet
Super Admin
Super Admin
- HardWay
- Kubeadm
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
mkdir -p /etc/kubernetes/kubeconfig
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/super-admin.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = kubernetes-super-admin
O = system:masters
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Генерация приватного ключа
openssl genrsa \
-out /etc/kubernetes/kubeconfig/super-admin.key 2048
Генерация CSR
openssl req \
-new \
-key /etc/kubernetes/kubeconfig/super-admin.key \
-out /etc/kubernetes/openssl/csr/super-admin.csr \
-config /etc/kubernetes/openssl/super-admin.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/super-admin.csr \
-out /etc/kubernetes/kubeconfig/super-admin.crt \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/super-admin.conf
Настройка Kubeconfig для super-admin
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/super-admin.conf
kubectl config set-credentials system:node:${HOST_NAME} \
--client-certificate=/etc/kubernetes/kubeconfig/super-admin.crt \
--client-key=/etc/kubernetes/kubeconfig/super-admin.key \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/super-admin.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${HOST_NAME} \
--kubeconfig=/etc/kubernetes/super-admin.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/super-admin.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/kubeconfig/super-admin.crt
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
super-admin.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Имейте в виду: на этапе Join нельзя выбрать, какие kubeconfigs генерировать — kubeadm создаёт их все сразу, в полном объёме.
Генерация манифеста
kubeadm join phase control-plane-prepare kubeconfig \
--config=/var/run/kubeadm/kubeadm.yaml
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubeconfig] Generating kubeconfig files
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
Проверка готовности сертификата
Данная команда не способна отображать статус конкретного сертификата, только список доступных.
kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
super-admin.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Admin
Admin
- HardWay
- Kubeadm
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
mkdir -p /etc/kubernetes/kubeconfig
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/admin.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = kubernetes-admin
O = kubeadm:cluster-admins
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Приватные ключи
openssl genrsa \
-out /etc/kubernetes/kubeconfig/admin.key 2048
Генерация CSR
openssl req \
-new \
-key /etc/kubernetes/kubeconfig/admin.key \
-out /etc/kubernetes/openssl/csr/admin.csr \
-config /etc/kubernetes/openssl/admin.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/admin.csr \
-out /etc/kubernetes/kubeconfig/admin.crt \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/admin.conf
Настройка Kubeconfig для admin
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/admin.conf
kubectl config set-credentials system:node:${HOST_NAME} \
--client-certificate=/etc/kubernetes/kubeconfig/admin.crt \
--client-key=/etc/kubernetes/kubeconfig/admin.key \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/admin.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${HOST_NAME} \
--kubeconfig=/etc/kubernetes/admin.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/admin.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/kubeconfig/admin.crt
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Имейте в виду: на этапе Join нельзя выбрать, какие kubeconfigs генерировать — kubeadm создаёт их все сразу, в полном объёме.
Генерация манифеста
kubeadm join phase control-plane-prepare kubeconfig \
--config=/var/run/kubeadm/kubeadm.yaml
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubeconfig] Generating kubeconfig files
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
Проверка готовности сертификата
Данная команда не способна отображать статус конкретного сертификата, только список доступных.
kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Kube Controller Manager
Kube Controller Manager
- HardWay
- Kubeadm
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/controller-manager-client.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = system:kube-controller-manager
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Генерация приватного ключа
openssl genrsa \
-out /etc/kubernetes/kubeconfig/controller-manager-client-key.pem 2048
Генерация CSR
openssl req \
-new \
-key /etc/kubernetes/kubeconfig/controller-manager-client-key.pem \
-out /etc/kubernetes/openssl/csr/controller-manager-client.csr \
-config /etc/kubernetes/openssl/controller-manager-client.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-outform PEM \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/controller-manager-client.csr \
-out /etc/kubernetes/kubeconfig/controller-manager-client.pem \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/controller-manager-client.conf
export CLUSTER_NAME="my-first-cluster"
export BASE_DOMAIN="example.com"
export CLUSTER_DOMAIN="cluster.local"
export FULL_HOST_NAME="${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}"
Настройка Kubeconfig для controller-manager-client
kubectl config set-cluster kubernetes \
--certificate-authority="/etc/kubernetes/pki/ca.crt" \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/controller-manager.conf
kubectl config set-credentials system:node:${FULL_HOST_NAME} \
--client-certificate=/etc/kubernetes/kubeconfig/controller-manager-client.pem \
--client-key=/etc/kubernetes/kubeconfig/controller-manager-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/controller-manager.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${FULL_HOST_NAME} \
--kubeconfig=/etc/kubernetes/controller-manager.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/controller-manager.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/kubeconfig/controller-manager-client.pem
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
controller-manager.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Имейте в виду: на этапе Join нельзя выбрать, какие kubeconfigs генерировать — kubeadm создаёт их все сразу, в полном объёме.
Генерация манифеста
kubeadm join phase control-plane-prepare kubeconfig \
--config=/var/run/kubeadm/kubeadm.yaml
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubeconfig] Generating kubeconfig files
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
Проверка готовности сертификата
Данная команда не способна отображать статус конкретного сертификата, только список доступных.
kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
controller-manager.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Kube Scheduler
Kube Scheduler
- HardWay
- Kubeadm
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/scheduler-client.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = system:kube-scheduler
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Генерация приватного ключа
openssl genrsa \
-out /etc/kubernetes/kubeconfig/scheduler-client-key.pem 2048
Генерация CSR
openssl req \
-new \
-key /etc/kubernetes/kubeconfig/scheduler-client-key.pem \
-out /etc/kubernetes/openssl/csr/scheduler-client.csr \
-config /etc/kubernetes/openssl/scheduler-client.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-outform PEM \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/scheduler-client.csr \
-out /etc/kubernetes/kubeconfig/scheduler-client.pem \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/scheduler-client.conf
export CLUSTER_NAME="my-first-cluster"
export BASE_DOMAIN="example.com"
export CLUSTER_DOMAIN="cluster.local"
export FULL_HOST_NAME="${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}"
Инструкция создания Kubeconfig
kubectl config set-cluster kubernetes \
--certificate-authority="/etc/kubernetes/pki/ca.crt" \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/scheduler.conf
kubectl config set-credentials system:node:${FULL_HOST_NAME} \
--client-certificate=/etc/kubernetes/kubeconfig/scheduler-client.pem \
--client-key=/etc/kubernetes/kubeconfig/scheduler-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/scheduler.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${FULL_HOST_NAME} \
--kubeconfig=/etc/kubernetes/scheduler.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/scheduler.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/kubeconfig/scheduler-client.pem
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
scheduler.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Имейте в виду: на этапе Join нельзя выбрать, какие kubeconfigs генерировать — kubeadm создаёт их все сразу, в полном объёме.
Генерация манифеста
kubeadm join phase control-plane-prepare kubeconfig \
--config=/var/run/kubeadm/kubeadm.yaml
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubeconfig] Generating kubeconfig files
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
Проверка готовности сертификата
Данная команда не способна отображать статус конкретного сертификата, только список доступных.
kubeadm certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
scheduler.conf Oct 22, 2025 22:06 UTC 364d kubernetes no
Kubelet client
Kubelet client
Обратите внимание! Можно подписать через kubectl certificate approve
- HardWay
- Kubeadm
Переменные окружения
export CLUSTER_NAME=my-first-cluster
export BASE_DOMAIN=example.com
export CLUSTER_DOMAIN=cluster.local
export FULL_HOST_NAME=${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}
Рабочая директория
mkdir -p /etc/kubernetes/pki
mkdir -p /etc/kubernetes/openssl/csr
mkdir -p /var/lib/kubelet/pki
Конфигурация
cat <<EOF > /etc/kubernetes/openssl/kubelet-client.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = system:node:${FULL_HOST_NAME}
O = system:nodes
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
EOF
Генерация приватного ключа
openssl genrsa \
-out /var/lib/kubelet/pki/kubelet-client-key.pem 2048
Генерация CSR
openssl req \
-new \
-key /var/lib/kubelet/pki/kubelet-client-key.pem \
-out /etc/kubernetes/openssl/csr/kubelet-client.csr \
-config /etc/kubernetes/openssl/kubelet-client.conf
Подпись CSR
openssl x509 \
-req \
-days 365 \
-sha256 \
-outform PEM \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-in /etc/kubernetes/openssl/csr/kubelet-client.csr \
-out /var/lib/kubelet/pki/kubelet-client.pem \
-extensions v3_ext \
-extfile /etc/kubernetes/openssl/kubelet-client.conf
cat /var/lib/kubelet/pki/kubelet-client.pem /var/lib/kubelet/pki/kubelet-client-key.pem >> /var/lib/kubelet/pki/kubelet-client-$(date '+%Y-%m-%d-%H-%M-%S').pem
ln -s /var/lib/kubelet/pki/kubelet-client-$(date '+%Y-%m-%d-%H-%M-%S').pem /var/lib/kubelet/pki/kubelet-client-current.pem
export CLUSTER_NAME="my-first-cluster"
export BASE_DOMAIN="example.com"
export CLUSTER_DOMAIN="cluster.local"
export FULL_HOST_NAME="${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}"
Инструкция создания Kubeconfig
kubectl config set-cluster kubernetes \
--certificate-authority="/etc/kubernetes/pki/ca.crt" \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config set-credentials system:node:${FULL_HOST_NAME} \
--client-certificate=/var/lib/kubelet/pki/kubelet-client.pem \
--client-key=/var/lib/kubelet/pki/kubelet-client-key.pem \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config set-context default \
--cluster=kubernetes \
--user=system:node:${FULL_HOST_NAME} \
--kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config use-context default \
--kubeconfig=/etc/kubernetes/kubelet.conf
Проверка готовности сертификата
Данный раздел зависит от следующих разделов:
/etc/kubernetes/openssl/cert-report.sh /etc/kubernetes/pki/etcd/server.crt
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
kubelet-client-current Oct 22, 2025 22:06 UTC 364d kubernetes no
Имейте в виду: на этапе Join нельзя выбрать, какие kubeconfigs генерировать — kubeadm создаёт их все сразу, в полном объёме.
Генерация манифеста
kubeadm join phase control-plane-prepare kubeconfig \
--config=/var/run/kubeadm/kubeadm.yaml
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubeconfig] Generating kubeconfig files
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
Проверка готовности сертификата
kubeadm не отображает статус сертификата, используемого компонентом kubelet
.