【问题标题】:TLS bootstrapping ,--token-auth-file, User "system:anonymous" cannot create certificatesigningrequestsTLS 引导,--token-auth-file,用户“system:anonymous”无法创建证书签名请求
【发布时间】:2019-01-27 10:48:46
【问题描述】:

为什么我在 api-server 上设置 --token-auth-file 并在工作节点上设置 --bootstrap-kubeconfig,我被指定在 apiserver 和工作节点上的用户名是“kubelet-bootstrap”,我得到了错误显示用户“系统:匿名”?

错误:运行 Kubelet 失败:无法创建证书签名 请求:certificatesigningrequests.certificates.k8s.io 被禁止: 用户“system:anonymous”无法创建 集群范围内的certificatesigningrequests.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 失败:无法创建证书签名 请求:certificatesigningrequests.certificates.k8s.io 被禁止: 用户“system:anonymous”无法创建 集群范围内的certificatesigningrequests.certificates.k8s.io


从 apiserver 登录

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

感谢您的帮助

【问题讨论】:

    标签: kubernetes kubernetes-security


    【解决方案1】:

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

    根据文章Authenticating with Bootstrap Tokens:

    令牌格式

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

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

    考虑阅读 previous 和 this 文章,了解 Bootstrap Token 的想法是如何实现的。

    【讨论】:

      【解决方案2】:

      我会说你没有system:anonymous 的集群角色绑定,因为默认情况下它被禁用以保护集群免受 DoS 攻击。

      在 kube-public 命名空间中有一个 configMap,应该用于 TLS 引导。如果一个节点想要自动加入集群,它需要一些信息。这是在这个 configMap 中出现的时候。但该节点必须具有读取文件的权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-02
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多