Сертифікати PKI та вимоги

Kubernetes вимагає наявності сертифікатів PKI для автентифікації за допомогою TLS. Якщо ви встановлюєте Kubernetes за допомогою kubeadm, сертифікати, необхідні для вашого кластера, генеруються автоматично. Ви також можете створити свої власні сертифікати, наприклад, щоб зберігати ваші приватні ключі більш безпечно, не зберігаючи їх на сервері API. Ця сторінка пояснює, які сертифікати необхідні для вашого кластера.

Як кластер використовує сертифікати

Kubernetes вимагає PKI для наступних операцій:

  • Сертифікати клієнта для kubelet для автентифікації на сервері API
  • Сертифікати сервера kubelet для спілкування сервера API з kubelet
  • Сертифікат для точки доступу сервера API
  • Сертифікати клієнта для адміністраторів кластера для автентифікації на сервері API
  • Сертифікати клієнта для сервера API для спілкування з kubelet
  • Сертифікат клієнта для сервера API для спілкування з etcd
  • Сертифікат клієнта/kubeconfig для менеджера контролера для спілкування з сервером API
  • Сертифікат клієнта/kubeconfig для планувальника для спілкування з сервером API.
  • Сертифікати клієнта та сервера для проксі-сервера

etcd також реалізує взаємну аутентифікацію TLS для автентифікації клієнтів.

Де зберігаються сертифікати

Якщо ви встановлюєте Kubernetes за допомогою kubeadm, більшість сертифікатів зберігається в /etc/kubernetes/pki. Усі шляхи в цьому документі стосуються цієї теки, за винятком сертифікатів облікових записів користувачів, які kubeadm розміщує в /etc/kubernetes.

Налаштування сертифікатів вручну

Якщо ви не хочете, щоб kubeadm генерував необхідні сертифікати, ви можете створити їх за допомогою одного кореневого ЦС або подавши всі сертифікати. Детальні відомості щодо створення власного центра сертифікації дивіться в Сертифікати. Додаткові відомості знаходяться в розділі Certificate Management з kubeadm.

Один кореневий ЦС

Ви можете створити один кореневий ЦС, яким керує адміністратор. Цей кореневий ЦС може створювати кілька проміжних ЦС та делегувати весь подальший процес створення Kubernetes.

Необхідні ЦС:

шляхТиповий CNопис
ca.crt,keykubernetes-caЗагальний ЦС Kubernetes
etcd/ca.crt,keyetcd-caДля всіх функцій, повʼязаних з etcd
front-proxy-ca.crt,keykubernetes-front-proxy-caДля проксі-сервера

На додачу до цих ЦС також необхідно отримати пару ключ/сертифікат для управління обліковими записами служби, sa.key та sa.pub. Наведений нижче приклад ілюструє файли ключа та сертифіката ЦС, показані в попередній таблиці:

/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-ca.key

Усі сертифікати

Якщо ви не хочете копіювати приватні ключі ЦС до свого кластера, ви можете створити всі сертифікати самостійно.

Необхідні сертифікати:

Типовий CNБатьківський ЦСO (в обʼєкті)видhosts (SAN)
kube-etcdetcd-caserver, client<hostname>, <Host_IP>, localhost, 127.0.0.1
kube-etcd-peeretcd-caserver, client<hostname>, <Host_IP>, localhost, 127.0.0.1
kube-etcd-healthcheck-clientetcd-caclient
kube-apiserver-etcd-clientetcd-caclient
kube-apiserverkubernetes-caserver<hostname>, <Host_IP>, <advertise_IP>, [1]
kube-apiserver-kubelet-clientkubernetes-casystem:mastersclient
front-proxy-clientkubernetes-front-proxy-caclient

[1]: будь-яка інша IP-адреса чи DNS-імʼя, за яким ви звертаєтеся до свого кластера (що використовується kubeadm для стабільної IP-адреси або DNS-імені балансування навантаження, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster, kubernetes.default.svc.cluster.local)

де kind посилається на один або кілька ключів x509, які також документовані в .spec.usages типу CertificateSigningRequest:

kindВикористання ключа
serverцифровий підпис, шифрування ключа, автентифікація сервера
clientцифровий підпис, шифрування ключа, автентифікація клієнта

Шляхи до сертифікатів

Сертифікати повинні бути розміщені в рекомендованому шляху (який використовує kubeadm). Шляхи повинні бути вказані за вказаним аргументом незалежно від місця розташування.

Типовий CNрекомендований шлях до ключарекомендований шлях до сертифікатакомандааргумент ключааргумент сертифіката
etcd-caetcd/ca.keyetcd/ca.crtkube-apiserver--etcd-cafile
kube-apiserver-etcd-clientapiserver-etcd-client.keyapiserver-etcd-client.crtkube-apiserver--etcd-keyfile--etcd-certfile
kubernetes-caca.keyca.crtkube-apiserver--client-ca-file
kubernetes-caca.keyca.crtkube-controller-manager--cluster-signing-key-file--client-ca-file, --root-ca-file, --cluster-signing-cert-file
kube-apiserverapiserver.keyapiserver.crtkube-apiserver--tls-private-key-file--tls-cert-file
kube-apiserver-kubelet-clientapiserver-kubelet-client.keyapiserver-kubelet-client.crtkube-apiserver--kubelet-client-key--kubelet-client-certificate
front-proxy-cafront-proxy-ca.keyfront-proxy-ca.crtkube-apiserver--requestheader-client-ca-file
front-proxy-cafront-proxy-ca.keyfront-proxy-ca.crtkube-controller-manager--requestheader-client-ca-file
front-proxy-clientfront-proxy-client.keyfront-proxy-client.crtkube-apiserver--proxy-client-key-file--proxy-client-cert-file
etcd-caetcd/ca.keyetcd/ca.crtetcd--trusted-ca-file, --peer-trusted-ca-file
kube-etcdetcd/server.keyetcd/server.crtetcd--key-file--cert-file
kube-etcd-peeretcd/peer.keyetcd/peer.crtetcd--peer-key-file--peer-cert-file
etcd-caetcd/ca.crtetcdctl--cacert
kube-etcd-healthcheck-clientetcd/healthcheck-client.keyetcd/healthcheck-client.crtetcdctl--key--cert

Ті ж самі вимоги стосуються пари ключів облікових записів служби:

Шлях приватного ключаШлях публічного ключакомандааргумент
sa.keykube-controller-manager--service-account-private-key-file
sa.pubkube-apiserver--service-account-key-file

Наведений нижче приклад ілюструє повні шляхи до файлів, перерахованих в попередній таблиці:

/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/apiserver-etcd-client.key
/etc/kubernetes/pki/apiserver-etcd-client.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/apiserver.key
/etc/kubernetes/pki/apiserver.crt
/etc/kubernetes/pki/apiserver-kubelet-client.key
/etc/kubernetes/pki/apiserver-kubelet-client.crt
/etc/kubernetes/pki/front-proxy-ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-client.key
/etc/kubernetes/pki/front-proxy-client.crt
/etc/kubernetes/pki/etcd/server.key
/etc/kubernetes/pki/etcd/server.crt
/etc/kubernetes/pki/etcd/peer.key
/etc/kubernetes/pki/etcd/peer.crt
/etc/kubernetes/pki/etcd/healthcheck-client.key
/etc/kubernetes/pki/etcd/healthcheck-client.crt
/etc/kubernetes/pki/sa.key
/etc/kubernetes/pki/sa.pub

Налаштування сертифікатів для облікових записів користувачів

Ви повинні вручну налаштувати ці облікові записи адміністратора та службові облікові записи:

ім'я файлуім'я облікового записуТиповий CNO (в обʼєкті)
admin.confdefault-adminkubernetes-admin<admin-group>
super-admin.confdefault-super-adminkubernetes-super-adminsystem:masters
kubelet.confdefault-authsystem:node:<nodeName> (див. примітку)system:nodes
controller-manager.confdefault-controller-managersystem:kube-controller-manager
scheduler.confdefault-schedulersystem:kube-scheduler
  1. Для кожної конфігурації створіть пару ключ/сертифікат x509 із зазначеними CN та O.

  2. Виконайте команду kubectl для кожної конфігурації наступним чином:

KUBECONFIG=<filename> kubectl config set-cluster default-cluster --server=https://<host ip>:6443 --certificate-authority <path-to-kubernetes-ca> --embed-certs
KUBECONFIG=<filename> kubectl config set-credentials <credential-name> --client-key <path-to-key>.pem --client-certificate <path-to-cert>.pem --embed-certs
KUBECONFIG=<filename> kubectl config set-context default-system --cluster default-cluster --user <credential-name>
KUBECONFIG=<filename> kubectl config use-context default-system

Ці файли використовуються наступним чином:

Ім'я файлуКомандаКоментар
admin.confkubectlНалаштовує користувача-адміністратора для кластера
super-admin.confkubectlНалаштовує користувача-суперадміністратора для кластера
kubelet.confkubeletОдин обовʼязковий для кожного вузла в кластері
controller-manager.confkube-controller-managerМає бути доданий до manifests/kube-controller-manager.yaml
scheduler.confkube-schedulerМає бути доданий до manifests/kube-scheduler.yaml

Наведені нижче файли ілюструють повні шляхи до файлів, перерахованих у попередній таблиці:

/etc/kubernetes/admin.conf
/etc/kubernetes/super-admin.conf
/etc/kubernetes/kubelet.conf
/etc/kubernetes/controller-manager.conf
/etc/kubernetes/scheduler.conf
Змінено June 20, 2024 at 12:44 PM PST: Sync changest from andygol/k8s-website (36d05bc8a1)