一次Kubernetes集群故障处理案例:etcd无法选出Leader导致Kubernetes API-Server启动失败

1. 概述

1、集群信息

Name IP Role
Node1 172.17.1.120 控制节点1
Node2 172.17.1.121 控制节点2
k8s-2 172.17.1.131 工作节点1
k8s-3 172.17.1.132 工作节点2

2、故障现象

我按照正常卸载工作节点的操作步骤,一切顺利,当时并没有什么异常。

出现错误的操作记录
1
2
3
4
root@node1:~# kubectl drain node node2 --ignore-daemonsets --delete-emptydir-data
root@node1:~# kubectl delete node node2

root@node2:~# kubeadm reset --force

故障出现原因:双控制平面Kubernetes(这个状态本身就异常,但不在本次讨论范围内)删除Node2控制节点后,另外一个控制平面无法正常工作。具体表现为ETCD启动失败,导致Kubernetes api-server 启动失败。

journalctl -u kubelet -n 100 --no-pager | less
1
Jul 22 23:17:05 node1 kubelet[3301]: E0722 23:17:05.135471    3301 controller.go:145] "Failed to ensure lease exists, will retry" err="Get \"https://172.17.1.120:6443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases/node1?timeout=10s\": dial tcp 172.17.1.120:6443: connect: connection refused" interval="7s"
阅读更多

从Dashboard鉴权认识Kubernetes的用户认证

Kubernetes 用户认证

  1. 从Dashboard鉴权认识Kubernetes的用户认证
  2. 从签发用户证书认识Kubernetes的用户认证

Kubernetes的API准入(Access Control)分为用户认证(Authenticating)鉴权(Authorization)两个部分。鉴权是对权限的控制,来控制角色(Role)、用户(User)是否能访问对象,主要通过RBAC、ABAC实现,你大概率听说过这两种鉴权控制策略。当然鉴权不是本片讨论的重点,下面内容我们主要讨论认证部分。

阅读更多

kubernetes配置私有仓库证书

目录


公司内部有个Kubernetes集群,镜像服务使用私有化部署的Harbor,突然一天发现域名没有续费… 接下来面临的问题就是TLS证书过期无法通过权威CA证书机构签发新证书,但如果更换域名CI/CD、K8s workload 都需要修改,修改量比较大。有没有简单处理方案呢,当然有,改由本地DNS解析域名,自己签发证书。下面的内容就是操作步骤,相对还算是简单的。

一、 OpenSSL 生成证书

  1. 生成根证书
阅读更多