Kubernetes V1.9如何获取kubelet.conf?V1.9.3 RBAC集群配置疑问
Kubernetes 1.9.3 中获取kubelet.conf的方法及组件启动问题排查
刚巧我之前也折腾过K8s 1.9版本的手动集群搭建,结合你从1.6升级过来的情况,给你梳理下解决方案:
一、获取kubelet.conf的两种方式
1. 自动生成(推荐,沿用bootstrap流程)
K8s 1.9依然支持kubelet通过bootstrap自动获取证书并生成kubelet.conf,只是部分参数有调整,步骤如下:
- 首先确保你已经准备好bootstrap-kubelet.conf文件,里面包含向apiserver请求证书的权限(需要提前在apiserver端配置好
system:node-bootstrapper的ClusterRole和对应的ClusterRoleBinding,绑定到system:nodes组) - 启动kubelet时,指定以下关键参数:
kubelet \ --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \ --kubeconfig=/etc/kubernetes/kubelet.conf \ --rotate-certificates=true \ --node-name=<你的节点名称>注意:
--kubeconfig指定的kubelet.conf文件初始可以不存在,kubelet会自动向apiserver发起证书签名请求(CSR),当你通过kubectl certificate approve <csr-name>批准后,kubelet会自动生成kubelet.conf以及对应的证书文件(kubelet.crt、kubelet.key等)
2. 手动生成(适合自定义配置场景)
如果需要手动控制证书生成流程,可以按以下步骤操作:
- 生成kubelet私钥和CSR:
openssl genrsa -out /etc/kubernetes/pki/kubelet.key 2048 openssl req -new -key /etc/kubernetes/pki/kubelet.key -out /etc/kubernetes/pki/kubelet.csr -subj "/CN=system:node:<你的节点名称>/O=system:nodes" - 创建并批准CSR资源:
kubectl create csr node-<你的节点名称> --certificate-request-file=/etc/kubernetes/pki/kubelet.csr --key=/etc/kubernetes/pki/kubelet.key kubectl certificate approve node-<你的节点名称> - 下载批准后的证书:
kubectl get csr node-<你的节点名称> -o jsonpath='{.status.certificate}' | base64 -d > /etc/kubernetes/pki/kubelet.crt - 生成kubelet.conf配置文件:
kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/pki/ca.crt \ --server=https://<apiserver地址>:6443 \ --kubeconfig=/etc/kubernetes/kubelet.conf kubectl config set-credentials system:node:<你的节点名称> \ --client-certificate=/etc/kubernetes/pki/kubelet.crt \ --client-key=/etc/kubernetes/pki/kubelet.key \ --kubeconfig=/etc/kubernetes/kubelet.conf kubectl config set-context default \ --cluster=kubernetes \ --user=system:node:<你的节点名称> \ --kubeconfig=/etc/kubernetes/kubelet.conf kubectl config use-context default --kubeconfig=/etc/kubernetes/kubelet.conf
二、组件启动问题排查方向
你提到apiserver、调度器和控制器管理器已启动但有问题,结合1.6到1.9的版本差异,重点检查以下几点:
- RBAC权限配置:1.9版本默认强制开启RBAC,你需要确保控制器管理器、调度器等组件对应的ClusterRole和ClusterRoleBinding配置正确(比如
system:controller-manager、system:scheduler角色需要绑定到对应的ServiceAccount) - 准入控制参数变更:1.9版本将原
--admission-control参数替换为--enable-admission-plugins,如果你需要启用RBAC、NodeRestriction等插件,需要调整为类似--enable-admission-plugins=NamespaceLifecycle,RBAC,NodeRestriction的配置 - 证书与kubeconfig有效性:检查组件的kubeconfig文件中证书路径、apiserver地址是否正确,证书是否过期或未被CA签名
- 废弃参数清理:1.6到1.9有不少参数被废弃或重命名,比如apiserver的
--insecure-port默认禁用,控制器管理器的部分旧版权限参数需要更新,建议对照官方文档清理废弃参数
内容的提问来源于stack exchange,提问作者yoh852
相关产品推荐
相关产品推荐

