V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lovewell
V2EX  ›  Kubernetes

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

  •  
  •   lovewell · 2021-11-24 10:04:36 +08:00 · 3472 次点击
    这是一个创建于 1099 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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/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
        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, 前面的各种困难都过来了,现在只差成功一几步,很想知道是啥导致的。
    suifengdang666
        15
    suifengdang666  
       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  
       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   ·   实用小工具   ·   5507 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:44 · PVG 16:44 · LAX 00:44 · JFK 03:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.