Начальная загрузка TLS, - token-auth-file, Пользовательская система: анонимный не может создавать запросы на подписание сертификатов

почему я установил --token-auth-file на api-server и установил --bootstrap-kubeconfig на рабочем узле, мне было указано имя пользователя «kubelet-bootstrap» на apiserver и рабочем узле, и я получил сообщение об ошибке Пользователь "система: анонимный"?

ошибка: не удалось запустить Kubelet: невозможно создать запрос на подпись сертификата: Certificigningrequests.certificates.k8s.io запрещен: пользователь «система: анонимный» не может создать сертификатыigningrequests.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 для генерации сертификата клиента TLS, ключа и файла kubeconfig

ошибка: не удалось запустить Kubelet: невозможно создать запрос на подпись сертификата: Certificigningrequests.certificates.k8s.io запрещен: пользователь «система: анонимный» не может создать сертификатыigningrequests.certificates.k8s.io в области кластера


журнал от apiserver

I0821 08: 05: 05.726968 5 rbac.go: 116] RBAC DENY: пользовательская "система: анонимные" группы ["система: не прошедшая проверку подлинности"] не может "создать" ресурс "сертификатыigningrequests.certificates.k8s.io" на уровне кластера I0821 08: 05: 05.727015 5 authorization.go: 59] Запрещено: "/apis/certificates.k8s.io/v1beta1/certificatesigningrequests", Причина: ""

Спасибо за помощь


person jerry    schedule 21.08.2018    source источник


Ответы (2)


Формат токенов в вашем bootstrap.kubeconfig.yaml отличается от обычных токенов, генерируемых kubeadm.

Согласно статье Аутентификация с помощью токенов Bootstrap:

Формат токена

Токены начальной загрузки имеют вид abcdef.0123456789abcdef. Более формально они должны соответствовать регулярному выражению [a-z0-9] {6}. [A-z0-9] {16}.

Первая часть токена - это «идентификатор токена» и считается общедоступной информацией. Он используется при обращении к токену без утечки секретной части, используемой для аутентификации. Вторая часть - это «секрет токена», и ее следует передавать только доверенным лицам.

Рекомендуем прочитать предыдущий и эта статья чтобы понять, как реализована идея Bootstrap Token.

person VASャ    schedule 22.08.2018

Я бы сказал, что у вас нет привязки к кластеру для system:anonymous, поскольку по умолчанию он отключен для защиты кластера от DoS-атак.

В пространстве имен kube-public есть configMap, который следует использовать для начальной загрузки TLS. Если узел хочет присоединиться к кластеру автоматически, ему нужна некоторая информация. Это когда входит в эту configMap. Но у узла должны быть разрешения на чтение файла.

person suren    schedule 05.07.2019