k8s master节点更换ip 重签证书

一、开始

证书的修改,必须要 apiserver 服务可用

旧IP:

k8s-master10.0.0.5
k8s-node-110.0.0.6
k8s-node-210.0.0.7

新IP: 

k8s-master10.0.0.10
k8s-node-110.0.0.11
k8s-node-210.0.0.12

修改/etc/hosts解析(所有节点):

vim /etc/hosts

k8s-master 10.0.0.10
k8s-node-1 10.0.0.11
k8s-node-2 10.0.0.12

二、备份 kubernetes 目录

cp -r /etc/kubernetes{,-bak}

三、查看证书内的 ip

for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'Address'

可以看到,只有 apiserver 和 etcd 的证书里面是包含了 ip 的

/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/server.crt
                DNS:k8s-master, DNS:localhost, IP Address:10.0.0.1, IP Address:127.0.0.1, IP Address:0:0:0:0:0:0:0:1
/etc/kubernetes/pki/etcd/healthcheck-client.crt
/etc/kubernetes/pki/etcd/peer.crt
                DNS:k8s-master, DNS:localhost, IP Address:10.0.0.1, IP Address:127.0.0.1, IP Address:0:0:0:0:0:0:0:1
/etc/kubernetes/pki/apiserver.crt
                DNS:k8s-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:lb-vip, IP Address:10.96.0.1, IP Address:10.0.0.1
/etc/kubernetes/pki/apiserver-kubelet-client.crt
/etc/kubernetes/pki/front-proxy-client.crt
/etc/kubernetes/pki/apiserver-etcd-client.crt

四、生成集群配置

kubeadm config view > /root/kubeadm.yaml

更换IP:

vim kubeadm.yaml

apiServer:
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
  # 增加下面的配置
  certSANs:
  - 10.0.0.10
  # 增加上面的配置
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: lb-vip:6443
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
    # 增加下面的配置
    serverCertSANs:
    - 10.0.0.10
    peerCertSANs:
    - 10.0.0.10
    # 增加上面的配置
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.17.3
networking:
  dnsDomain: cluster.local
  podSubnet: 172.10.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}

五、删除原有的证书

需要保留 ca ,sa,front-proxy 这三个证书

rm -rf /etc/kubernetes/pki/{apiserver*,front-proxy-client*}
rm -rf /etc/kubernetes/pki/etcd/{healthcheck*,peer*,server*}

六、重新生成证书

kubeadm init phase certs all --config /root/kubeadm.yaml

再次查看证书内的 ip

for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'DNS:';done
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/server.crt
                DNS:k8s-master, DNS:localhost, IP Address:10.0.0.10, IP Address:127.0.0.1, 
/etc/kubernetes/pki/etcd/peer.crt
                DNS:k8s-master, DNS:localhost, IP Address:10.0.0.10, IP Address:127.0.0.1, 
/etc/kubernetes/pki/etcd/healthcheck-client.crt
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/apiserver.crt
                DNS:k8s-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:lb-vip, IP Address:10.96.0.1, IP Address:10.0.0.10
/etc/kubernetes/pki/apiserver-kubelet-client.crt
/etc/kubernetes/pki/front-proxy-client.crt
/etc/kubernetes/pki/apiserver-etcd-client.crt

七、将配置更新到 configmap 中

这样,以后有升级,或者增加其他 ip 时,也会将配置的 CertSANs 的 ip 保留下来,方便以后删减

kubeadm init phase upload-config kubeadm --config kubeadm.yaml

八、检查

# 检查kubeadm.config配置的ip是否为新节点IP

kubectl get cm -A|grep kubeadm
kubectl get cm -A kubeadm-config -o yaml

#检查所有容器健康状态

kubectl get pod -A

node节点IP更换,证书会自动重新签发

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
Kubernetesk8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。在k8s集群中,有一个主节点master node)和多个工作节点(worker node)。主节点负责管理集群中的资源和进行调度决策,而工作节点则负责运行应用程序容器。 在k8s集群中添加多个主节点可以提高集群的可靠性和容错能力。如果某个主节点出现故障,其他主节点可以继续正常工作,确保集群的稳定性和可用性。 下面是详细的步骤和解析,以添加两个主节点为例: 1. 准备环境 确保每个新的主节点都可以访问k8s集群,并且已安装了所需的软件包和依赖项。需要确保主节点上的kubeadm、kubelet、kubectl、容器运行时(如Docker或CRI-O)等软件版本与其他节点相同。 2. 初始化第一个主节点 在集群中选择一个现有的主节点来初始化第一个新主节点。可以使用kubeadm init命令将新主节点纳入集群。 示例命令: ``` $ kubeadm init --control-plane-endpoint=LOAD_BALANCER_DNS_OR_IP --upload-certs ``` 其中,LOAD_BALANCER_DNS_OR_IP是负载均衡器的DNS或IP地址,用于将流量分配到多个主节点。--upload-certs选项将证上传到新的主节点,以确保其可以加入现有的控制平面。 3. 加入第二个主节点 使用kubeadm join命令将第二个主节点加入集群。要注意的是,需要指定新的主节点的API服务器地址和证,以便其可以连接到集群。 示例命令: ``` $ kubeadm join LOAD_BALANCER_DNS_OR_IP --token TOKEN --discovery-token-ca-cert-hash SHA256:HASH --control-plane --certificate-key CERTIFICATE_KEY ``` 其中,TOKEN是由第一个主节点生成的加入令牌,HASH是由第一个主节点生成的CA证哈希值,CERTIFICATE_KEY是第一个主节点生成的证密钥。 4. 初始化第二个主节点 在第二个主节点上执行与第一个主节点相同的命令,初始化第二个主节点并加入集群。 示例命令: ``` $ kubeadm init --control-plane-endpoint=LOAD_BALANCER_DNS_OR_IP --upload-certs ``` 5. 验证集群状态 使用kubectl命令验证集群状态,确保所有节点都已成功加入集群。可以使用以下命令查看节点状态: ``` $ kubectl get nodes ``` 6. 完成 现在,k8s集群已添加两个主节点,并且可以更好地扩展和管理容器化应用程序。 解析: 添加多个主节点可以提高k8s集群的可靠性和容错能力。多个主节点可以共同管理集群中的资源和进行调度决策,从而确保集群的稳定性和可用性。 在添加新的主节点之前,需要确保每个新的主节点都可以访问k8s集群,并且已安装了所需的软件包和依赖项。需要确保主节点上的kubeadm、kubelet、kubectl、容器运行时(如Docker或CRI-O)等软件版本与其他节点相同。 在添加新的主节点时,需要指定API服务器地址和证,以便新的主节点可以连接到集群。如果使用负载均衡器将流量分配到多个主节点,需要确保所有主节点的负载均衡器地址相同。 添加多个主节点后,需要使用kubectl命令验证集群状态,确保所有节点都已成功加入集群。可以使用kubectl get nodes命令查看节点状态。 总的来说,添加多个主节点可以提高k8s集群的可靠性和容错能力,使其更适合运行生产环境中的容器化应用程序。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值