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

2021-11-24 10:04:36 +08:00
 lovewell
kube-controller-manager[12830]: E1124 09:41:20.142393 12830 cidr_allocator.go:137] Failed to list all nodes: Unauthorized 。
有遇到过的兄弟,告诉我下是那个一个角色少了,难受..我已经折腾好久了。。
3459 次点击
所在节点    Kubernetes
27 条回复
idblife
2021-11-24 10:10:13 +08:00
用什么方案搭建的
lovewell
2021-11-24 10:12:18 +08:00
@idblife 直接 github 下载 tar.gz ,用 ansible 安装进 3 台虚拟机。
lovewell
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/kubernetes/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
2021-11-24 10:16:52 +08:00
用 kubeadm 吧。
hwdef
2021-11-24 10:17:17 +08:00
或者 kind minikube
swulling
2021-11-24 10:20:36 +08:00
用 K3s ,你这个 Unauthorized 应该是权限和证书出问题了。
defunct9
2021-11-24 10:21:01 +08:00
kube-controller-manager 里没有配置 node ip range 吧
lovewell
2021-11-24 10:28:34 +08:00
过了认证,但是没被授权。我试过吧 kubeconfig 换成 CN:admin O:system:masters 也不行。。所以我就想是他请求 ip 份配的时候到底是用那个角色。。
lovewell
2021-11-24 10:33:39 +08:00
@hwdef 我是想一步到位,顺便了解下底层交互。这个是要搭在公司测试的,minikube 更不行了。。
hwdef
2021-11-24 10:40:50 +08:00
kubeadm 已经是官方指定的,可以用在生产力的,k8s 环境搭建工具了。。。。没必要把时间浪费在搭建环境上。
amrom
2021-11-24 10:51:13 +08:00
签发 kube-controller-manager-kubeconfig.yaml 的证书权限不足,重新签发一个
goushenggege
2021-11-24 10:53:09 +08:00
新手学习还是 kubeadm 安装吧,二进制容易劝退
betainCao
2021-11-24 10:53:24 +08:00
lovewell
2021-11-24 10:57:15 +08:00
@hwdef hmm, 前面的各种困难都过来了,现在只差成功一几步,很想知道是啥导致的。
suifengdang666
2021-11-24 11:00:18 +08:00
建议还是 kubeadm 搭建,二进制搭建太费时间费精力,还一堆问题
yibo2018
2021-11-24 11:16:13 +08:00
哎,很多时候我都在想,为啥已经很成熟的东西都没有完全傻瓜式的方式,或者完美的文档,总是有坑。尤其是在配置环境的时候,时间都耗在配置环境是真难受。 就很羡慕解决问题能力强的人吗,之前的 leader 就很变态,都是靠自己的思路去解决的,google 都很少用
lovewell
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
2021-11-24 11:22:37 +08:00
@yibo2018 那是得要对整个体系(知识面广),基础牢固的人才行,要不然还是得 google 。
locoz
2021-11-24 12:03:35 +08:00
建议直接 kubeadm ,官方推荐方案,坑少。

另外,刚接触不要直接搞太新的版本,往后退 1-2 个版本会好点,主要有些应用不一定兼容新版本的 API 。
idblife
2021-11-24 12:09:20 +08:00
kubeadm 吧
按照官方教程一次成功

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/817579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX