Загрузка TLS, -token-auth-file, пользователь "system:anonymous" не может создавать запросы на подпись сертификатов
Почему я установил --token-auth-file на api-сервер и установил --bootstrap-kubeconfig на рабочем узле, мне было указано имя пользователя "kubelet-bootstrap" на apiserver и рабочем узле, и я получил сообщение об ошибке: Пользователь "system:anonymous"?
ошибка: не удалось запустить Kubelet: не удалось создать запрос на подпись сертификата: certificateigningrequests.certificates.k8s.io запрещен: пользователь "system: anonymous" не может создать certificateigningrequests.certificates.k8s.io в области кластера
версия Kubernetes v1.8.3
ниже моя конфигурация
apiserver:
/usr/local/bin/kube-apiserver --etcd-servers=http://127.0.0.1:2379
--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota
--service-account-key-file=/srv/kubernetes/pubkey.pem
--service-cluster-ip-range=10.96.0.0/16
--allow-privileged=true
--authorization-mode=RBAC
--enable-bootstrap-token-auth=true
--token-auth-file=/var/lib/kubernetes/bootstrap.csv
--client-ca-file=/var/lib/kubernetes/cacert.pem
--tls-cert-file=/var/lib/kubernetes/servercert.pem
--tls-private-key-file=/var/lib/kubernetes/serverkey.pem
--address=172.18.11.249
--insecure-bind-address=127.0.0.1
--advertise-address=172.18.11.249
--audit-log-maxage=30
--audit-log-maxsize=100
--audit-log-path=/var/log/kube-apiserver.log
--v=4
1>>/var/log/kube-apiserver.log 2>&1
/var/lib/kubernetes/bootstrap.csv
0d681e2438667d2b5236ad7385d80ddc,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
рабочий узел:
/usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubelet/bootstrap.kubeconfig.yaml
--pod-manifest-path=/etc/kubernetes/manifests
--node-labels=node-role.kubernetes.io/worker=
--node-ip=172.18.10.16
--allow-privileged
--v=4
/etc/kubelet/bootstrap.kubeconfig.yaml
apiVersion: v1
clusters:
- cluster:
server: https://172.18.11.249:6443/
name: myk8s
contexts:
- context:
cluster: myk8s
name: myk8s
current-context: myk8s
kind: Config
preferences: {}
users:
- name: kubelet-bootstrap
user:
as-user-extra: {}
token: 0d681e2438667d2b5236ad7385d80ddc
войти с рабочего узла
I0821 08:49:50.916993 6232 bootstrap.go:57] Использование начальной загрузки kubeconfig для создания сертификата, ключа и файла kubeconfig клиента TLS
ошибка: не удалось запустить Kubelet: не удалось создать запрос на подпись сертификата: certificateigningrequests.certificates.k8s.io запрещен: пользователь "system: anonymous" не может создать certificateigningrequests.certificates.k8s.io в области кластера
войти из apiserver
I0821 08: 05: 05.726968 5 rbac.go: 116] RBAC DENY: пользователь "system:anonymous" groups ["system:unauthenticated"] не может "создавать" сертификаты ресурса "signigning requests.certificates.ktificate.k8s.io" для всего кластера I0821 08:05:05.727015 5 authorization.go:59] Запрещено: "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests", причина: ""
Спасибо за помощь
1 ответ
Формат токена в вашем bootstrap.kubeconfig.yaml
выглядит иначе, чем обычные токены, которые генерируются kubeadm
,
Согласно статье Аутентификация с помощью токенов Bootstrap:
Формат токена
Жетоны начальной загрузки имеют вид abcdef.0123456789abcdef. Более формально, они должны соответствовать регулярному выражению [a-z0-9]{6}.[A-z0-9]{16}.
Первая часть токена является "Идентификатором токена" и считается общедоступной информацией. Он используется при обращении к токену без утечки секретной части, используемой для аутентификации. Вторая часть - "Секрет токена" и должна передаваться только доверенным сторонам.
Вы можете прочитать предыдущую и эту статью, чтобы понять, как реализована идея Bootstrap Token.
Я бы сказал, что у вас нет кластера system:anonymous
по умолчанию он отключен для защиты кластера от DoS-атак.
В пространстве имен kube-public есть файл configMap, который следует использовать для начальной загрузки TLS. Если узел хочет автоматически присоединиться к кластеру, ему нужна некоторая информация. Это когда приходит в этой configMap. Но узел должен иметь права на чтение файла.