我正在尝试使用RBAC authz和门禁控制选项构建Kubernetes集群V1.9.3。
我已经使用V1.6做了一切并且一切正常,当我的节点启动kubelet时,它使用bootstrap文件来获取kubelet的客户端证书。 它有5个文件:kubelet.crt,kubelet.key,kubelet-client.key,kubelet-client.crt和kubelet.conf。
在V1.9中,我在所有组件上使用相同的配置,我只是将它们改编为更新1.6-> 1.9。 apiserver,scheduler和controller-manager启动没有任何问题。
当我的节点启动kubelet时,它也使用bootstrap并获取kubelet.crt kubelet.key和kubelet-client.key,但是kubelet-client.crt和kubelet.conf文件都没有。
我发现所有组件的日志都没有问题,一切似乎都没问题,但我的kubelet没有得到它的配置文件
这里我的apiserver配置在1.9:
Future[List[ImageTypeMetadata]]
1.9中的Kubelet配置:
--admission-control=NodeRestriction,NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds
--authorization-mode=Node,RBAC
--secure-port=6443
--bind-address=0.0.0.0
--advertise-address=10.0.0.8
--insecure-port=0
--insecure-bind-address=127.0.0.1
--client-ca-file=/etc/kubernetes/pki/ca.crt
--etcd-servers=http://127.0.0.1:2379
--service-account-key-file=/etc/kubernetes/pki/sa.pub
--service-cluster-ip-range=172.30.100.0/24
--tls-cert-file=/etc/kubernetes/pki/kube-apiserver.crt
--tls-private-key-file=/etc/kubernetes/pki/kube-apiserver.key
--enable-bootstrap-token-auth
--kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
--kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
--requestheader-username-headers=X-Remote-User
--requestheader-group-headers=X-Remote-Group
--requestheader-allowed-names=front-proxy-client
--requestheader-extra-headers-prefix=X-Remote-Extra-
systemctl status -l kubelet:
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig
--kubeconfig=/etc/kubernetes/kubelet.conf
--pod-manifest-path=/etc/kubernetes/manifests
--allow-privileged=true
--network-plugin=cni
--cni-conf-dir=/etc/cni/net.d
--cni-bin-dir=/opt/cni/bin
--cluster-dns=172.30.0.10
--cluster-domain=cluster.local
--authorization-mode=Webhook
--client-ca-file=/etc/kubernetes/pki/ca.crt
--cadvisor-port=0
--rotate-certificates=true
--cert-dir=/var/lib/kubelet/pki
--cgroup-driver=systemd
ls / var / lib / kubelet / pki:
Feb 23 17:24:43 kubenode1 systemd[1]: Started Kubernetes Kubelet.
Feb 23 17:24:43 kubenode1 systemd[1]: Starting Kubernetes Kubelet...
Feb 23 17:24:43 kubenode1 kubelet[12489]: I0223 17:24:43.664804 12489 feature_gate.go:226] feature gates: &{{} map[]}
Feb 23 17:24:43 kubenode1 kubelet[12489]: I0223 17:24:43.664956 12489 controller.go:114] kubelet config controller: starting controller
Feb 23 17:24:43 kubenode1 kubelet[12489]: I0223 17:24:43.664960 12489 controller.go:118] kubelet config controller: validating combination of defaults and flags
Feb 23 17:24:44 kubenode1 kubelet[12489]: W0223 17:24:44.078716 12489 cni.go:171] Unable to update cni config: No networks found in /etc/cni/net.d
Feb 23 17:24:44 kubenode1 kubelet[12489]: I0223 17:24:44.082194 12489 server.go:182] Version: v1.9.3
Feb 23 17:24:44 kubenode1 kubelet[12489]: I0223 17:24:44.082228 12489 feature_gate.go:226] feature gates: &{{} map[]}
Feb 23 17:24:44 kubenode1 kubelet[12489]: I0223 17:24:44.082310 12489 plugins.go:101] No cloud provider specified.
如何强制kubelet在v1.9中获取kubelet.conf文件? 有人有什么想法吗?
答案 0 :(得分:0)
我认为我发现了问题,控制器管理器不再自动批准kubelet请求了。我必须使用以下命令批准它:
$ kubectl -n kube-system get csr
NAME AGE REQUESTOR CONDITION
node-csr-a1NZL_Efc2eDyrtSNZcIL1NxuHTvrsCO-ObfFFRUh8U 27s system:bootstrap:61bb3c Pending
node-csr-co5i3DRYeYOwCBff5XYA0rfSIqniy05VtdiVTmarQQA 5h system:bootstrap:61bb3c Approved,Issued
$ kubectl certificate approve node-csr-IoN3CNTJmJHGKUWso1OXLwd1H3KLOon4oVCz3uVYfqw
certificatesigningrequest "node-csr-a1NZL_Efc2eDyrtSNZcIL1NxuHTvrsCO-ObfFFRUh8U" approved
我按照这个文档思考,可以启用自动批准,但似乎不是:/ https://kubernetes.io/docs/admin/kubelet-tls-bootstrapping/#kubectl-approval
答案 1 :(得分:0)
使用以下命令生成相应的配置文件:
kubeadm alpha kubeconfig user --org system:masters --client-name kubernetes-admin > admin.conf
kubeadm alpha kubeconfig user --client-name system:kube-controller-manager > controller-manager.conf
kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > kubelet.conf
kubeadm alpha kubeconfig user --client-name system:kube-scheduler > scheduler.conf