K8s 问题处理:服务账户权限和证书配置
前言:鉴于隐私性,这里二次开发版的 k8s 容器平台的命名空间统一以 “lkk” 代称;二开云监控平台的命名空间用yjk来代称。下面分享k8s运维中关于服务账号权限及证书配置的问题解决方法。
一、k8s服务账号权限问题
1、部署 LKK 平台的 host 集群时发现lkk命令空间的lkk-installer-566877b4cd-wgljx(pod)启动不起来,使用以下命令查看日志进行排查
kubectl logs -n lkk-system $(kubectl get pod -n lkk-system -l app=lkk-install -o jsonpath='{.items[0].metadata.name}') -f
报错分析:服务账户 lkk-installer (ServiceAccount),试图操作 alerting.lkk.io API 组下的 globalrulegroups 资源,但是没有足够的权限,因此遇到了 Forbidden 错误。需要授予相应的访问权限
2、编译yaml文件
命令:vim lkk-installer.yaml
:set number在248行下添加:
- alerting.lkk.io
解析:
在Kubernetes中,lkk-installer.yaml
文件通常是一个用于安装或配置Kubernetes平台的YAML文件。在这个文件中,apiGroups
是一个关键的部分,它定义了Kubernetes API的访问权限。每个apiGroup
代表一组相关的API资源,这些资源可以是核心API,也可以是扩展API。
① application.lkk.io
:这个API组可能代表了与应用管理相关的一组API资源。在Kubernetes生态中,这通常涉及到部署应用程序、管理应用配置和服务等。例如,它可能包括了部署(Deployments)、服务(Services)、 ingress资源等,这些都是用来定义、扩展和管理应用程序的API资源。
② alerting.lkk.io
:这个API组可能代表了与告警系统相关的一组API资源。在Kubernetes中,告警系统用于监控集群资源和应用的状态,当某些指标超出预设阈值时触发告警。这可能包括了告警规则(Alerting Rules)、告警实例(Alert Instances)等资源,用于配置告警策略和管理告警事件。
3、执行以下命令更新
kubectl apply -f lkk-installer.yaml
4、删除对应的pod,重启
kubectl delete pod lkk-installer-566877b4cd-wgljx -n lkk-system
5、再次查看日志,没有出现json就没有问题
kubectl logs -n lkk-system $(kubectl get pod -n lkk-system -l app=lkk-install -o jsonpath='{.items[0].metadata.name}') -f
二、证书配置问题
1、查看到promethues未运行起来,命令
kubectl get -n lkk-monitoring-system pod
2、配置证书
报错分析:需要配置下etcd 的证书 secret
解决方法:
在 kubernetes 的 master 节点的 /etc/ssl/etcd/ssl/ 目录下的 etcd 证书文件创建成 secret 认证证书(该操作仅当 etcd 安装在 master 节点时执行)
①错误示范
命令(此条命令是我失误的步骤,这个步骤不需要执行,直接执行下一条):
kubectl -n lkk-monitoring-system create secret generic kube-etcd-client-certs --from-file=etcd-client-ca.crt=/etc/ssl/etcd/ssl/ca.pem --from-file=etcd-client.crt=/etc/ssl/etcd/ssl/admin-ms-yjk-1.pem
--from-file=etcd-client.key=/etc/ssl/etcd/ssl/admin-ms-yjk-1-key.pem
执行以上命令没有注意加\
符号,导致只执行成功了第一条。
处理方法:
查看secret是不是创建成功:
kubectl -n lkk-monitoring-system get secrets kube-etcd-client-certs
删除secret的命令:
kubectl -n lkk-monitoring-system delete secret kube-etcd-client-certs
②正确示范
执行命令:
kubectl -n lkk-monitoring-system create secret generic kube-etcd-client-certs \
--from-file=etcd-client-ca.crt=/etc/ssl/etcd/ssl/ca.pem \
--from-file=etcd-client.crt=/etc/ssl/etcd/ssl/admin-ms-yjk-1.pem \
--from-file=etcd-client.key=/etc/ssl/etcd/ssl/admin-ms-yjk-1-key.pem
3、验证
查看到promethues启动成功,命令
kubectl get -n lkk-monitoring-system pod