1

我正在使用 kubespray 在本地设置一个 k8s 集群。

我正在尝试使用 CIS Benchmark 文档来强化 kubernetes 集群。

对于--kubelet-certificate-authority参数,我在 apiserver 和 kubelets 之间建立了 TLS 连接。/etc/kubernetes/manifests/kube-apiserver.yaml然后,我在主节点上编辑 API 服务器 pod 规范文件,并--kubelet-certificate-authority为证书颁发机构设置参数,如下所示:--kubelet-certificate-authority=/etc/kubernetes/ssl/apiserver.crt

但是有了这个,我不再能够顶级部署 pod(使用 helm),出现已知错误:

[centos@infra-vm ~]$ helm list 错误:转发端口:错误升级连接:错误拨号后端:x509:无法验证 192.168.33.143 的证书,因为它不包含任何 IP SAN

192.168.33.143主节点IP地址在哪里。

我已经检查了上述证书授权,并且具有 IP SAN: 在此处输入图像描述

所以我真的不知道问题出在哪里。

[centos@infra-vm ~]$ kubectl get pod --namespace kube-system
NAME                                        READY   STATUS    RESTARTS   AGE
calico-kube-controllers-7555c9885c-tjz78    1/1     Running   0          3d21h
calico-node-2p4p4                           1/1     Running   0          3d21h
calico-node-4rhzj                           1/1     Running   0          3d21h
coredns-56bc6b976d-wrxsl                    1/1     Running   0          3d21h
coredns-56bc6b976d-zlvxb                    1/1     Running   0          3d21h
dns-autoscaler-5fc5fdbf6-sl6gg              1/1     Running   0          3d21h
kube-apiserver-cpu-node0                    1/1     Running   0          3d21h
kube-controller-manager-cpu-node0           1/1     Running   0          3d21h
nvidia-device-plugin-daemonset-1.12-zj82x   1/1     Running   0          3d20h
tiller-deploy-677fbf76bb-hcgtw              1/1     Running   0          3d21h

[centos@infra-vm ~]$ kubectl logs tiller-deploy-677fbf76bb-hcgtw  --namespace kube-system
Error from server: Get https://192.168.33.143:10250/containerLogs/kube-system/tiller-deploy-677fbf76bb-hcgtw/tiller: x509: cannot validate certificate for 192.168.33.143 because it doesn't contain any IP SANs
[centos@infra-vm ~]$

可以尝试帮助弄清楚发生了什么吗?

4

1 回答 1

1

首先/etc/kubernetes/ssl/apiserver.crt不是一个有效的CA证书。CA 将有:

    X509v3 extensions:
        X509v3 Key Usage: critical
            Digital Signature, Key Encipherment, Certificate Sign

注意Certificate Sign允许签署证书的扩展。


您看到此错误:cannot validate certificate for 192.168.33.143 because it doesn't contain any IP SANs因为 kubelet 使用自签名证书在端口 10250 上提供 https 流量,而您使用无效证书对其进行验证。


那么你应该怎么做才能让它工作呢?

  • 用于/etc/kubernetes/ssl/ca.crt为具有有效 IP SAN 的 kubelet 签署新证书。
  • 设置--kubelet-certificate-authority=/etc/kubernetes/ssl/ca.crt(有效的 CA)。
  • /var/lib/kubelet/config.yaml(kubelet 配置文件)中设置tlsCertFiletlsPrivateKeyFile指向新创建的 kubeletcrtkey文件。
于 2020-09-23T09:59:29.990 回答