Кажется, что при регистрации узла kubelet не использует правильного пользователя - PullRequest
0 голосов
/ 25 мая 2018

Когда kubelet пытается запуститься на моих рабочих узлах Kubernetes, я получаю сообщения, подобные этому, в системном журнале:

May 25 19:43:57 ip-10-240-0-223 kubelet[4882]: I0525 19:43:57.627389    4882 kubelet_node_status.go:82] Attempting to register node worker-1
May 25 19:43:57 ip-10-240-0-223 kubelet[4882]: E0525 19:43:57.628967    4882 kubelet_node_status.go:106] Unable to register node "worker-1" with API server: nodes is forbidden: User "system:node:" cannot create nodes at the cluster scope: unknown node for user "system:node:"
May 25 19:43:58 ip-10-240-0-223 kubelet[4882]: E0525 19:43:58.256557    4882 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:451: Failed to list *v1.Service: services is forbidden: User "system:node:" cannot list services at the cluster scope: unknown node for user "system:node:"
May 25 19:43:58 ip-10-240-0-223 kubelet[4882]: E0525 19:43:58.257381    4882 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:47: Failed to list *v1.Pod: pods is forbidden: User "system:node:" cannot list pods at the cluster scope: unknown node for user "system:node:"

Если я правильно их читаю, проблема в том, что узелиспользуя имя пользователя system:node: при подключении к серверу API вместо system:node:worker-1.Но, насколько я могу судить, он должен быть рабочим.Вот мои kubeconfig (с исключенными личными данными):

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: [elided]
    server: https://[elided]:6443
  name: kubernetes-the-hard-way
contexts:
- context:
    cluster: kubernetes-the-hard-way
    user: system:node:worker-1
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: system:node:worker-1
  user:
    client-certificate-data:  [elided]
    client-key-data:  [elided]

У меня сложилось впечатление, что указанные user были теми, которые использовались при обращении к API, но, очевидно, я ошибаюсь.Где-то еще я пропустил ссылку на worker-1?

Я следую учебнику Kubernetes the Hard Way , но настраиваю его для AWS, так что этопроблема почти наверняка ошибка, которую я сделал при настройке файлов конфигурации.Если есть какие-либо другие файлы конфигурации, которые я должен предоставить для облегчения / возможности отладки, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Текущий "Kubernetes-The-Hard-Way" использует Узловая авторизация , поэтому убедитесь, что ваши сертификаты kubelet x509 содержат

Subject: CN=system:node:worker-1, O=system:nodes 

Также дважды проверьте, есть ли у вашего API-сервера эти опции

--authorization-mode=Node,RBAC
--enable-admission-plugins=...,NodeRestriction,...

в противном случае узел не сможет автоматически зарегистрироваться в API.

Вы можете проверить свой сертификат x509 с помощью

openssl x509 -in /var/lib/kubelet/${HOSTNAME}.pem -text
0 голосов
/ 26 мая 2018

Сервер определяет пользователя по CN сертификата.Проверьте сценарий, сгенерировавший сертификат, вероятно, он имел неустановленную переменную, когда создавал CN в форме CN=system:node:$NODE

...