新手自搭 k8s v1.22.4 集群, kube-controller-manager 报 Failed to list all nodes: Unauthorized 缺少解决思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lovewell
V2EX    Kubernetes

新手自搭 k8s v1.22.4 集群, kube-controller-manager 报 Failed to list all nodes: Unauthorized 缺少解决思路

  •  
  •   a href="/member/lovewell">lovewell 2021-11-24 10:04:36 +08:00 3955 次点击
    这是一个创建于 1485 天前的主题,其中的信息可能已经有所发展或是发生改变。
    kube-controller-manager[12830]: E1124 09:41:20.142393 12830 cidr_allocator.go:137] Failed to list all nodes: Unauthorized 。
    有遇到过的兄弟,告诉我下是那个一个角色少了,难受..我已经折腾好久了。。
    27 条回复    2021-12-13 10:32:52 +08:00
    idblife
        1
    idblife  
       2021-11-24 10:10:13 +08:00 via iPhone
    用什么方案搭建的
    lovewell
        2
    lovewell  
    OP
       2021-11-24 10:12:18 +08:00
    @idblife 直接 github 下载 tar.gz ,用 ansible 安装进 3 台虚拟机。
    lovewell
        3
    lovewell  
    OP
       2021-11-24 10:15:38 +08:00
    这是我的 apiserver 启动配置:
    KUBE_APISERVER_ARGS='
    --api-audiences=https://kubernetes.default.svc.cluster.local
    --runtime-cOnfig=api/all=true
    --apiserver-count=3
    --allow-privileged=true
    --advertise-address=192.168.62.131
    --bind-address=0.0.0.0
    --secure-port=6443
    --storage-backend=etcd3
    --etcd-cafile=/etc/etcd/pki/etcd-ca.pem
    --etcd-certfile=/etc/kubernetes/kube-apiserver/pki/kube-apiserver-client-etcd.pem
    --etcd-keyfile=/etc/kubernetes/kube-apiserver/pki/kube-apiserver-client-etcd-key.pem
    --etcd-servers=https://192.168.62.131:2379,https://192.168.62.132:2379,https://192.168.62.133:2379
    --kubelet-certificate-authority=/etc/kubernetes/pki/kubernetes-ca.pem
    --kubelet-client-certificate=/etc/kubernetes/kube-apiserver/pki/kube-apiserver-client-kubelet.pem
    --kubelet-client-key=/etc/kubernetes/kube-apiserver/pki/kube-apiserver-client-kubelet-key.pem
    --kubelet-preferred-address-types=InternalIP,InternalDNS,ExternalIP,ExternalDNS,Hostname
    --kubelet-timeout=10s
    --service-cluster-ip-range=10.22.88.0/22
    --service-node-port-range=30000-32767
    --service-account-key-file=/etc/kubernetes/kube-apiserver/pki/sa-pub.pem
    --service-account-issuer=https://kubernetes.default.svc.cluster.local
    --service-account-signing-key-file=/etc/kubernetes/kube-apiserver/pki/sa-signing-key.pem
    --enable-bootstrap-token-auth=true
    --anonymous-auth=false
    --authorization-mode=RBAC,Node
    --client-ca-file=/etc/kubernetes/pki/kubernetes-ca.pem
    --cert-dir=/etc/kubernetes/kube-apiserver/pki
    --tls-cert-file=/etc/kubernetes/kube-apiserver/pki/kube-apiserver.pem
    --tls-private-key-file=/etc/kubernetes/kube-apiserver/pki/kube-apiserver-key.pem
    --event-ttl=168h
    --audit-log-maxage=15
    --audit-log-maxbackup=3
    --audit-log-maxsize=100
    --audit-log-truncate-enabled
    --audit-log-path=/var/log/kubernetes/kube-apiserver/audit.log
    --audit-policy-file=/etc/kubernetes/kube-apiserver/audit-policy.yaml
    --requestheader-allowed-names=aggregator-proxy-client
    --requestheader-extra-headers-prefix=X-Remote-Extra-
    --requestheader-group-headers=X-Remote-Group
    --requestheader-username-headers=X-Remote-User
    --requestheader-client-ca-file=/etc/kubernetes/pki/aggregation-ca.pem
    --proxy-client-cert-file=/etc/kubernetes/kube-apiserver/pki/aggregator-proxy-client.pem
    --proxy-client-key-file=/etc/kubernetes/kube-apiserver/pki/aggregator-proxy-client-key.pem
    --enable-aggregator-routing=true
    --profiling
    --default-not-ready-toleration-secOnds=360
    --default-unreachable-toleration-secOnds=360
    --max-mutating-requests-inflight=2000
    --max-requests-inflight=4000
    --default-watch-cache-size=200
    --delete-collection-workers=2
    --logtostderr=false
    --logging-format=text
    --log-dir=/var/log/kubernetes/kube-apiserver
    --v=2
    '


    这是我的 kube-controller-manager 配置:

    KUBE_CONTROLLER_MANAGER_ARGS='
    --cluster-name=kubernetes
    --profiling
    --kubecOnfig=/etc/kubernetes/kube-controller-manager/kube-controller-manager-kubeconfig.yaml
    --authentication-kubecOnfig=/etc/kubernetes/kube-controller-manager/kube-controller-manager-kubeconfig.yaml
    --authorization-kubecOnfig=/etc/kubernetes/kube-controller-manager/kube-controller-manager-kubeconfig.yaml
    --cOntrollers=*,bootstrapsigner,tokencleaner
    --bind-address=0.0.0.0
    --service-cluster-ip-range=10.22.88.0/22
    --kube-api-qps=1000
    --kube-api-burst=2000
    --use-service-account-credentials=true
    --concurrent-service-syncs=2
    --root-ca-file=/etc/kubernetes/pki/kubernetes-ca.pem
    --service-account-private-key-file=/etc/kubernetes/kube-controller-manager/pki/sa-key.pem
    --allocate-node-cidrs=true
    --cluster-cidr=172.16.0.0/12
    --node-cidr-mask-size=24
    --cert-dir=/etc/kubernetes/kube-controller-manager/pki
    --tls-cert-file=/etc/kubernete/kube-controller-manager/pki/kube-controller-manager.pem
    --tls-private-key-file=/etc/kubernetes/kube-controller-manager/pki/kube-controller-manager-key.pem
    --client-ca-file=/etc/kubernetes/pki/kubernetes-ca.pem
    --cluster-signing-cert-file=/etc/kubernetes/pki/kubernetes-ca.pem
    --cluster-signing-key-file=/etc/kubernetes/pki/kubernetes-ca-key.pem
    --requestheader-allowed-names=aggregator-proxy-client
    --requestheader-extra-headers-prefix=X-Remote-Extra-
    --requestheader-group-headers=X-Remote-Group
    --requestheader-username-headers=X-Remote-User
    --requestheader-client-ca-file=/etc/kubernetes/pki/aggregation-ca.pem
    --logtostderr=false
    --logging-format=text
    --log-dir=/var/log/kubernetes/kube-controller-manager
    --v=2
    '

    感觉没问题,实际不行。
    hwdef
        4
    hwdef  
       2021-11-24 10:16:52 +08:00
    用 kubeadm 吧。
    hwdef
        5
    hwdef  
       2021-11-24 10:17:17 +08:00
    或者 kind minikube
    swulling
        6
    swulling  
       2021-11-24 10:20:36 +08:00
    用 K3s ,你这个 Unauthorized 应该是权限和证书出问题了。
    defunct9
        7
    defunct9  
       2021-11-24 10:21:01 +08:00
    kube-controller-manager 里没有配置 node ip range 吧
    lovewell
        8
    lovewell  
    OP
       2021-11-24 10:28:34 +08:00
    过了认证,但是没被授权。我试过吧 kubeconfig 换成 CN:admin O:system:masters 也不行。。所以我就想是他请求 ip 份配的时候到底是用那个角色。。
    lovewell
        9
    lovewell  
    OP
       2021-11-24 10:33:39 +08:00
    @hwdef 我是想一步到位,顺便了解下底层交互。这个是要搭在公司测试的,minikube 更不行了。。
    hwdef
        10
    hwdef  
       2021-11-24 10:40:50 +08:00
    kubeadm 已经是官方指定的,可以用在生产力的,k8s 环境搭建工具了。。。。没必要把时间浪费在搭建环境上。
    amrom
        11
    amrom  
       2021-11-24 10:51:13 +08:00
    签发 kube-controller-manager-kubeconfig.yaml 的证书权限不足,重新签发一个
    goushenggege
        12
    goushenggege  
       2021-11-24 10:53:09 +08:00
    新手学习还是 kubeadm 安装吧,二进制容易劝退
    lovewell
        14
    lovewell  
    OP
       2021-11-24 10:57:15 +08:00
    @hwdef hmm, 前面的各种困难都过来了,现在只差成功一几步,很想知道是啥导致的。
    bpf2049
        15
    bpf2049  
       2021-11-24 11:00:18 +08:00
    建议还是 kubeadm 搭建,二进制搭建太费时间费精力,还一堆问题
    yibo2018
        16
    yibo2018  
       2021-11-24 11:16:13 +08:00
    哎,很多时候我都在想,为啥已经很成熟的东西都没有完全傻瓜式的方式,或者完美的文档,总是有坑。尤其是在配置环境的时候,时间都耗在配置环境是真难受。 就很羡慕解决问题能力强的人吗,之前的 leader 就很变态,都是靠自己的思路去解决的,google 都很少用
    lovewell
        17
    lovewell  
    OP
       2021-11-24 11:19:29 +08:00
    @amrom 大佬,我在 3 个节点单节中关闭 2 个,然后用 kubectl 的 admin 证书替换掉 kube-controller-manager 的 kubeconfig,auth/z-kubeconfig 也是失败的。下面是我的生成 kube-controller-manager-kubeconfig.yaml 的过程。
    ===
    这个是 csr:
    {
    "CN": "system:kube-controller-manager",
    "hosts": [
    "192.168.62.131",
    "192.168.62.132",
    "192.168.62.133",
    "127.0.0.1",
    "localhost"
    ],
    "key": {
    "algo": "rsa",
    "size": 2048
    },
    "names": [
    {
    "C": "CN",
    "ST": "Guangdong",
    "L": "Dongguan",
    "O": "system:kube-controller-manager",
    "OU": "Kubernetes"
    }
    ]
    }


    ansible 对应的脚本:

    - name: kube-controller-manager-csr.json
    ansible.builtin.shell:
    cmd: >-
    cfssl gencert -ca {{ control_node_temp_dirs.temp_certs_dir }}/kubernetes-ca.pem
    -ca-key {{ control_node_temp_dirs.temp_certs_dir }}/kubernetes-ca-key.pem
    -config {{ role_path }}/ca-config.json
    -profile peer {{ control_node_temp_dirs.temp_csrs_dir }}/kube-controller-manager-csr.json
    | cfssljson -bare {{ control_node_temp_dirs.temp_certs_dir }}/kube-controller-manager
    - name: set-cluster kube-controller-manager-kubeconfig.yaml
    ansible.builtin.shell:
    cmd: >-
    kubectl config set-cluster {{ k8s.cluster_name }}
    --certificate-authority={{ control_node_temp_dirs.temp_certs_dir }}/kubernetes-ca.pem
    --embed-certs=true
    --server=https://127.0.0.1:6443
    --kubecOnfig={{ control_node_temp_dirs.temp_kubeconfigs_dir }}/kube-controller-manager-kubeconfig.yaml
    - name: set-credentials kube-controller-manager-kubeconfig.yaml
    ansible.builtin.shell:
    cmd: >-
    kubectl config set-credentials system:kube-controller-manager
    --client-certificate={{ control_node_temp_dirs.temp_certs_dir }}/kube-controller-manager.pem
    --client-key={{ control_node_temp_dirs.temp_certs_dir }}/kube-controller-manager-key.pem
    --embed-certs=true
    --kubecOnfig={{ control_node_temp_dirs.temp_kubeconfigs_dir }}/kube-controller-manager-kubeconfig.yaml
    - name: set-context kube-controller-manager-kubeconfig.yaml
    ansible.builtin.shell:
    cmd: >-
    kubectl config set-context default
    --cluster={{ k8s.cluster_name }}
    --user=system:kube-controller-manager
    --kubecOnfig={{ control_node_temp_dirs.temp_kubeconfigs_dir }}/kube-controller-manager-kubeconfig.yaml
    - name: kubeconfig use-context kube-controller-manager
    ansible.builtin.shell:
    cmd: kubectl config use-context default --kubecOnfig={{ control_node_temp_dirs.temp_kubeconfigs_dir }}/kube-controller-manager-kubeconfig.yaml
    lovewell
        18
    lovewell  
    OP
       2021-11-24 11:22:37 +08:00
    @yibo2018 那是得要对整个体系(知识面广),基础牢固的人才行,要不然还是得 google 。
    locoz
        19
    locoz  
       2021-11-24 12:03:35 +08:00
    建议直接 kubeadm ,官方推荐方案,坑少。

    另外,刚接触不要直接搞太新的版本,往后退 1-2 个版本会好点,主要有些应用不一定兼容新版本的 API 。
    idblife
        20
    idblife  
       2021-11-24 12:09:20 +08:00 via iPhone
    kubeadm 吧
    按照官方教程一次成功
    zhoudaiyu
        21
    zhoudaiyu  
    PRO
       2021-11-24 12:18:24 +08:00
    @defunct9 #7 让我 SSH 上去看看
    amrom
        22
    amrom  
       2021-11-24 13:40:40 +08:00
    @lovewell 试试加个 rolebinding ,kubectl create rolebinding xx-binding --clusterrole=admin --user=system:kube-controller-manager
    eaglewangl37670
        23
    eaglewangl37670  
       2021-11-24 15:55:50 +08:00
    我之前遇到过是用楼上的方案解决的,不知道二进制这种有没有用
    hwdef
        24
    hwdef  
       2021-11-24 15:58:12 +08:00
    @lovewell 学 k8s 久了就知道了,不可能把 k8s 所有都搞懂,,对你没用的就不要关注了。
    Reficul
        25
    Reficul  
       2021-11-24 18:05:08 +08:00
    clusterrolebinding system:kube-controller-manager 感觉是 API 启动的时候写的,可以看看代码。
    offswitch
        26
    offswitch  
       2021-11-25 22:27:46 +08:00
    你的这些配置参数,都可以通过 KubeletConfiguration 、KubeProxyConfiguration 、ClusterConfiguration 、InitConfiguration 、JoinConfiguration 来配置,可以看看这个 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/control-plane-flags/
    lework1234
        27
    lework1234  
       2021-12-13 10:32:52 +08:00
    github.com/lework/kainstall 一键安装。可以看看里面的 shell 脚本。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3949 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:19 PVG 13:19 LAX 21:19 JFK 00:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86