rancher导入集群时证书报错

2023-05-16

rancher导入集群时证书报错

现象

导入集群时,cattle-cluster-agent报错如下:

time="2022-06-28T08:00:28Z" level=error msg="Issuer of last certificate found in chain (CN=xmh-k8s-ca,OU=systemGroup,O=k8s,L=HD,ST=BJ,C=CN) does not match with CA certificate Issuer (CN=dynamiclistener-ca,O=dynamiclistener-org). Please check if the configured server certificate contains all needed intermediate certificates and make sure they are in the correct order (server certificate first, intermediates after)"
time="2022-06-28T08:00:28Z" level=fatal msg="Certificate chain is not complete, please check if all needed intermediate certificates are included in the server certificate (in the correct order) and if the cacerts setting in Rancher either contains the correct CA certificate (in the case of using self signed certificates) or is empty (in the case of using a certificate signed by a recognized CA). Certificate information is displayed above. error: Get \"https://rch.72.xmh\": x509: certificate signed by unknown authority"

cattle-cluster-agent报错

背景

最开始用kubeadm搭建了v1.21.2的k8s,后来又搭建了v1.22.6版本的k8s(也是用kubeadm),为了方便说明,下文以k8s21k8s22指代。

在搭建k8s22时用的是已有的tls证书,搭建之后还用同样的ca证书部署了cert-manager(v1.7.1),并用同样的ca证书创建了ClusterIssuer,然后部署rancher(2.6.4)的时候,让cert-managerrancheringress颁发了证书。

报错

背景交代完了,当我突发奇想,想把k8s21统一让k8s22管理时,问题出现了。

首先是把搭建k8s22时的ca证书安装到k8s21的每个node上,然后在k8s21的管理节点上执行rancher页面上提示的命令成功,接下来就但是了——cattle-cluster-agent出现了本文最开始的报错。

排障

当时第一反应是ca证书只安装给node是不够的的,还得安装到需要它的pod,于是一顿操作把ca证书挂载到了pod的/etc/ssl/certs/xmh-k8s-ca.crt路径下。具体步骤如下:

先把ca证书保存到configMap中

kubectl -n cattle-system create cm xmh-k8s-ca.pem --from-file=xmh-k8s-ca.crt

再把configMap挂载到deployment

# 有删减
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cattle-cluster-agent
  namespace: cattle-system
spec:
  template:
    spec:
      containers:
        volumeMounts:
        - mountPath: /etc/ssl/certs/xmh-k8s-ca.crt
          name: xmh-k8s-ca
          subPath: xmh-k8s-ca.crt
      volumes:
      - configMap:
          name: xmh-k8s-ca.crt
        name: xmh-k8s-ca

等pod起来之后看看状态,你猜怎么着我的老baby,这事要是这么简单就完了你就看不到这篇记录了,报错依旧,继续排查。

回想当时给ca证书安装到node时,执行了update-ca-trust命令,那么安装到pod是不是挂载之后也需要执行呢?结果是update-ca-trust命令不存在,但是有update-ca-certificates,但是也报错了:p11-kit: couldn't remove file: /var/lib/ca-certificates/pem/xmh-k8s-ca.crt: Device or resource busy

init-ca报错

这里执行的命令是kubectl -n cattle-system logs -f cattle-cluster-agent-5fd7b889f6-w4zzr -c init-ca,因为cluster-register这个容器无处下手,想在初始化容器中调通了再想办法替换证书。

注意这个报错说的是/var/lib/ca-certificates/pem/xmh-k8s-ca.crt,而我挂载的路径是/etc/ssl/certs/xmh-k8s-ca.crt,说明ca证书是生效了的,那又是怎么回事呢?

在研究怎么给cluster-register开刀的过程中,发现它镜像的entryPointrun.sh,然后就看了一下run.sh干了啥,你猜怎么着我的老baby,破案了啊!

run.sh的最后有这么一段:

mkdir -p /etc/kubernetes/ssl/certs
mv $temp /etc/kubernetes/ssl/certs/serverca
chmod 755 /etc/kubernetes/ssl
chmod 700 /etc/kubernetes/ssl/certs
chmod 600 /etc/kubernetes/ssl/certs/serverca
mkdir -p /etc/docker/certs.d/$CATTLE_SERVER_HOSTNAME_WITH_PORT
cp /etc/kubernetes/ssl/certs/serverca /etc/docker/certs.d/$CATTLE_SERVER_HOSTNAME_WITH_PORT/ca.crt

发现新大陆了啊,/etc/kubernetes/ssl/certs这个路径才是有用的啊,于是一顿操作又把ca证书的挂载点干到了这个路径下,你猜怎么着我的老baby,那个粘人的小报错还在屏幕上看着我……

所以说要克制不要激动,静下来仔细看看这个run.sh,还有这么一段:

curl --insecure -s -fL $CATTLE_SERVER/v3/settings/cacerts | jq -r '.value | select(length > 0)' > $temp

原来这个$temp是从rancher接口拿过来的啊,于是我想起了rancher全局配置的那个cert,在页面上看到这么句话:

删除CA证书

让我删除?众所周知我是个谨慎的有点过头的人,删除是不可能删除的,哑巴治成聋子了可咋整,于是备份之后在api页面打算修改一下,于是看到了这样的response:

cert-readOnly

readOnly?逗我玩呢?前面说删了,后面说只读?有那么点“大夫说很严重,专家说没事”那味……

我觉得这个是rancher的锅了,于是去官方群艾特官方来解答,你猜怎么着我的老baby,在我尽可能详细的描述完问题并把官方的人艾特一遍之后,果然等到了来自路人甲的一图表情……

好吧自己动手丰衣足食,再来研究研究这个run.sh,这次还真给我发现了点东西,在找rancher接口要证书之前,有这么一个判断:

if [ -n "$CATTLE_CA_CHECKSUM" ]; then

cattle-cluster-agent的环境变量中还真有这么一段:

- name: CATTLE_CA_CHECKSUM
  value: 3e5c48a1953664eb7a9f5b452178684d71dd1569f881c8326adfeeb252f2a823

而且run.sh中给/etc/kubernetes/ssl和里面的文件做了一堆chmod,说明这里面应该是有用的,那干脆直接点,把ca证书挂到/etc/kubernetes/ssl/certs/serverca这个文件上。

于是修改了挂载点,并注释掉CATTLE_CA_CHECKSUM这个环境变量,等待pod重启之后,你猜怎么着我的老baby……

收工!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rancher导入集群时证书报错 的相关文章

随机推荐

  • selenium重要功能应用

    当使用C 编写爬虫时 xff0c 以下是一些常用的爬虫框架 xff1a AngleSharp xff08 用于HTML解析 xff09 HtmlAgilityPack xff08 用于HTML解析 xff09 ScrapySharp xff
  • 【CSP201809-3】元素选择器【模拟】

    题意 思路 xff1a 用point来存储结构化文档 xff0c 里面string label string id为标签和id xff0c int c为所在层数 xff0c 两个点就为一层 读入结构化文档 xff1a 用getline读入一
  • 【Week14作业 B】Q老师与十字叉【模拟】

    题意 xff1a 思路 xff1a 存储网格图不可能开数组a 50000 50000 xff0c 发现n m lt 61 400000 xff0c 可以用a 400001 来存储 xff0c i j gt a i 1 m 43 j 读入数据
  • 【Week14作业 C】Q老师的考验【矩阵快速幂】

    题意 xff1a Q老师 对数列有一种非同一般的热爱 xff0c 尤其是优美的斐波那契数列 这一天 xff0c Q老师 为了增强大家对于斐波那契数列的理解 xff0c 决定在斐波那契的基础上创建一个新的数列 f x 来考一考大家 数列 f
  • 【Week14作业 D】Q老师染砖【矩阵快速幂优化dp】

    题意 xff1a 衣食无忧的 Q老师 有一天突发奇想 xff0c 想要去感受一下劳动人民的艰苦生活 具体工作是这样的 xff0c 有 N 块砖排成一排染色 xff0c 每一块砖需要涂上红 蓝 绿 黄这 4 种颜色中的其中 1 种 且当这 N
  • 【Week15实验 D】瑞瑞爱上字符串【模拟】

    题意 xff1a 瑞瑞最近迷上了字符串 xff0c 因此决定出一个字符串的题 给定两个正整数 N K xff0c 考虑所有由 N 2 个 a 和 2 个 b 组成的字符串 xff0c 要求输出其中字典序第 K 小的 例如当 N 61 5 时
  • 【Week15作业 C】ZJM与纸条【KMP】

    题意 xff1a ZJM 的女朋友是一个书法家 xff0c 喜欢写一些好看的英文书法 有一天 ZJM 拿到了她写的纸条 xff0c 纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物 ZJM 想知道自己收到的礼物是不是就是她送的
  • 【Week16实验 A】TT数鸭子【模拟】

    题意 xff1a 思路 xff1a 如果k gt 10 xff0c 则每个数都可以满足条件 xff0c 答案即为n xff1b 否则依次读入每一个数 xff0c 计算不同数位的个数sum xff0c 如果sum lt k xff0c 则这个
  • 【Week16实验 B】ZJM要抵御宇宙射线【模拟】

    题意 xff1a 思路 xff1a 对每个点都求出到其余点的距离平方 xff0c 然后取该点到其他点的距离平方的最大值为半径平方 xff0c 最后对所有点的半径平方取最小值 注意有多解时将x较小 y较小的点作为答案 总结 xff1a 一道简
  • 【Week16实验 C】宇宙狗的危机【区间dp】

    题意 xff1a 思路 xff1a 这道题是区间dp xff0c 不是BST xff01 xff01 xff01 令l i j 表示以j为根 j的左子树可到i这样的BST是否存在 xff0c r i j 表示以i为根 i的右子树可到j这样的
  • Ubuntu实现远程登陆之telnet——安装telnet服务端

    telnet是一种网络通信协议 xff0c 我们可以使用它登录远程服务器 xff0c 虽然telnet有安全问题这一硬伤 xff0c 但正因如此 xff0c 它十分简洁 xff0c 非常容易地在资源受限设备上 xff08 如嵌入式环境 xf
  • week6 限时大模拟 A - 掌握魔法の东东 II

    题意 思路 创建一个pair lt int int gt 类型的数组a xff0c 用来保存一副牌的花色以及大小 运用stl的vector xff0c 来存储手牌shoupai xff0c 随后使用dfs搜索 xff0c 数组a里的牌在手牌
  • Hadoop可视化神器-Hue安装、编译、运行

    下载安装 CDH版本 xff1a http archive cloudera com cdh5 官网 xff1a http gethue com tar zxf hue 3 9 0 cdh5 15 0 tar gz C opt module
  • 电脑通过wifi连接树莓派3

    前提要求 树莓派首先要能用网线和电脑连接起来 树莓派和电脑连接的是同一个wifi 电脑的网络设置和电脑网线直连树莓派的设置是一样的 xff0c 可以参照我的上篇博文设置 树莓派必须是树莓派3型 xff0c 因为只有这个型号才内置了wifi模
  • Ubuntu更换源说明

    Ubuntu更换源说明 更换源步骤如下 xff1a 备份源列表 sudo cp etc apt sources list etc apt sources list bak 命令行打开sources list文件 sudo gedit etc
  • MyBatis-Plus 分页查询以及自定义sql分页

    一 引言 分页查询每个人程序猿几乎都使用过 xff0c 但是有部分同学不懂什么是物理分页和逻辑分页 物理分页 xff1a 相当于执行了limit分页语句 xff0c 返回部分数据 物理分页只返回部分数据占用内存小 xff0c 能够获取数据库
  • golang为什么用协程而不是线程

    当协程阻塞的时候 xff0c 运行时会自动将同一操作系统线程上的其他协程移动到另一个可运行的线程上 xff0c 这样这些协程就不会阻塞 xff0c 并且这个操作对开发人员来说是透明的 调用协程的开销很小 xff0c 大概只在内存的栈区用几K
  • golang从channel读数据的各种情况

    文章目录 用var定义channel且不make用var定义channel且make直给写操作加for直给读操作加for读写都加for读channel的第二个返回值关闭channel继续读写完然后关闭channel再开始读加个selectc
  • 一个小技巧:修改swagger源码让postman更好用

    本文假设你知道swagger xff0c 并且会用go generate swagger generate spec o swagger json生成json 首先生成的swagger json是可以直接导入到postman的 xff0c
  • rancher导入集群时证书报错

    rancher导入集群时证书报错 现象 导入集群时 xff0c cattle cluster agent报错如下 xff1a time 61 34 2022 06 28T08 00 28Z 34 level 61 error msg 61