修改apiserver证书
问题:k8s集群增加了新的虚拟IP和网址,默认的证书包含的名称不能满足我们的要求重新更新证书。解决:Kubernetes APIServer 使用数字证书来加密 APIServer 的相关流量以及验证到 APIServer 的连接。所以如果我们想使用命令行客户端(比如 kubectl)连接到 APIServer,并且使用的主机名或者 IP 地址不包括在证书的 subject 的备选名称(SAN)列
·
问题:
k8s集群增加了新的虚拟IP和网址,默认的证书包含的名称不能满足我们的要求重新更新证书。
解决:
Kubernetes APIServer 使用数字证书来加密 APIServer 的相关流量以及验证到 APIServer 的连接。所以如果我们想使用命令行客户端(比如 kubectl)连接到 APIServer,并且使用的主机名或者 IP 地址不包括在证书的 subject 的备选名称(SAN)列表中的话,访问的时候可能会出错,会提示对指定的 IP 地址或者主机名访问证书无效。要解决这个问题就需要更新证书,使 SAN 列表中包含所有你将用来访问 APIServer 的 IP 地址或者主机名。
更新 APIServer 证书
首先要修改kubeadm的配置文件,如果你使用配置文件安装的集群可以直接修改,没有可以直接kube-system空间的下的configmap中找到文件,导出到本地
编辑配置文件,添加新的IP或域名
kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml
apiServer:
# 默认没有SAN信息
certSANs:
- 10.10.10.10
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/16
scheduler: {}
添加完成后需要把已存在的密钥剪切走
# 剪切证书密钥
$ mv /etc/kubernetes/pki/apiserver.{crt,key} ~
# 执行命令生成新的密钥
$ kubeadm init phase certs apiserver --config kubeadm.yaml
验证:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text
在显示的结果中就能看到你添加的IP了,最后记得编辑下kube-system中的map文件
更多推荐
已为社区贡献17条内容
所有评论(0)