TLS引导,-token-auth-file,用户“ system:anonymous”无法创建证书签名请求

时间:2018-08-21 09:18:18

标签: kubernetes kubernetes-security

为什么我在api服务器上设置--token-auth-file并在工作程序节点上设置--bootstrap-kubeconfig,为什么我在apiserver和工作程序节点上指定用户名是“ kubelet-bootstrap”,却得到了错误显示用户“ system:anonymous”?

  

错误:无法运行Kubelet:无法创建证书签名   要求:禁止使用certificatesigningrequests.certificates.k8s.io:   用户“ system:anonymous”无法创建   群集范围内的certificatesigningrequests.certificates.k8s.io

kubernetes版本1.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:无法创建证书签名   要求:禁止使用certificatesigningrequests.certificates.k8s.io:   用户“ system:anonymous”无法创建   群集范围内的certificatesigningrequests.certificates.k8s.io


从apiserver记录

  

I0821 08:05:05.726968 5 rbac.go:116] RBAC DENY:用户   “系统:匿名”组[“系统:未经身份验证”]无法“创建”   群集范围内的资源“ certificatesigningrequests.certificates.k8s.io”   I0821 08:05:05.727015 5 Author.go:59]禁止:   “ /apis/certificates.k8s.io/v1beta1/certificatesigningrequests”,   原因:“”

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您的bootstrap.kubeconfig.yaml中的令牌格式看起来与kubeadm生成的常规令牌不同。

根据文章Authenticating with Bootstrap Tokens

  

令牌格式

     

Bootstrap令牌采用abcdef.0123456789abcdef的形式。更多   形式上,它们必须匹配正则表达式   [a-z0-9] {6}。[a-z0-9] {16}。

     

令牌的第一部分是“令牌ID”,被认为是公开的   信息。在引用令牌而不会泄漏令牌时使用   用于身份验证的秘密部分。第二部分是“令牌   机密”,并且只能与受信任的各方共享。

请考虑阅读previousthis文章,以了解如何实现Bootstrap令牌的想法。

答案 1 :(得分:0)

我会说您没有system:anonymous的clusterrolebindings,因为默认情况下,它是禁用的,以保护群集免受DoS攻击。

在kube-public名称空间中有一个configMap,应用于TLS引导。如果节点要自动加入集群,则需要一些信息。这是该configMap中附带的内容。但是该节点必须具有读取文件的权限。