--insecure-skip-tls-verify
选项绕过此操作,但我宁愿使用的证书仅包含我的IP地址。只是...尽管我确实有一些想法,但我不确定如何做到这一点。 IP?这样做会产生任何不利影响(例如排除我的local / 192.168 IP吗?)。理想情况下,我希望为内部和外部IP都签署证书。还是我应该给kubeadm init
其他选择?其次,既然已经初始化了,是否有任何方法可以重新生成证书并换出证书,还是需要对集群进行核对?要澄清一下,我没有任何证书管理器已安装。我不是在谈论Ingress。我说的是kubeadm在首次安装群集时生成的实际“根”证书(由于缺少更好的术语),即位于
--apiserver-advertise-address
的证书。#1 楼
为此,您首先需要kubeadm
配置文件。这将创建一个名为kubeadm.yaml
的文件:kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml
现在在编辑器中打开该文件,并在
certSANs
部分下找到apiServer
列表。如果不存在,则需要添加它;如果是这样,您只需在该列表中添加另一个条目。示例:apiServer:
certSANs:
- "172.29.50.162"
- "k8s.domain.com"
- "other-k8s.domain.net"
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
现在将旧证书移动到另一个文件夹,否则
kubeadm
将不会重新创建新证书:mv /etc/kubernetes/pki/apiserver.{crt,key} ~
使用
kubeadm
生成新的apiserver证书:kubeadm init phase certs apiserver --config kubeadm.yaml
现在重新启动kubeapiserver容器:
运行
docker ps | grep kube-apiserver | grep -v pause
以获得运行Kubernetes API服务器的容器的容器ID
运行
docker kill <containerID>
杀死该容器。Kubelet将自动重新启动该容器,这将获取新证书。
如果一切正常,请不要忘记更新存储在集群中的
kubeadm
ConfigMap,否则,将来的kubeadm
升级将缺少新配置:如果使用Kubernetes
kubeadm config upload from-file --config kubeadm.yaml
对于Kubernetes版本> = v1.15:
kubeadm init phase upload-config kubeadm --config kubeadm.yaml
本文有一个有关如何向Kubernetes API Server证书添加名称的更完整的指南te
#2 楼
@Eduardo Baitello给出的答案是绝大多数Kube安装的正确答案。但是我了解到,如果您在Ubuntu上安装了MicroK8S snap安装,则说明会有所不同。对于此问题,您需要更新/var/snap/microk8s/current/certs/csr.conf.template
文件,然后依次运行microk8s.stop
和microk8s.start
。
评论
像魅力一样工作!只需注意一件事:在最后指定的from-file选项实际上已被弃用。上载该文件的新命令是kubeadm init phase upload-config kubeadm --config = kubeadm.yaml谢谢!
–soapergem
19年11月3日在5:09
@soapergem感谢您的注意!答案已使用新命令更新。
–爱德华多·贝特洛(Eduardo Baitello)
19年11月4日在2:42