rancher2使用helm部署harbor,搭建私有镜像/helm仓库并解决证书x509问题

接上一篇《rancher2安装nfs-subdir-external-provisioner为PVC/PV动态提供存储空间(动态分配卷)》
本篇开始讲如何在rancher2中部署harbor,来搭建一个私有的镜像/helm仓库。

一、安装harbor服务

1. 在目标集群中添加命名空间

在这里插入图片描述
在这里插入图片描述

2. 将提供harbor的chart仓库添加进rancher中

添加chart仓库的详细步骤可参考上篇文章二的1-5步,将如下的chart仓库信息替换进去即可:
名称:harbor
Index URL:https://helm.goharbor.io
3. 安装harbor
在这里插入图片描述
在这里插入图片描述

将values的三处域名,改为你的实际域名,如下图所示:
在这里插入图片描述
至此,harbor服务在rancher中的安装运行就搞定了。

二、 配置rancher,使其能够访问harbor提供的chart服务

1. 将harbor提供的chart服务地址加入到rancher的chart仓库中

添加chart仓库的详细步骤可参考上篇文章二的1-5步。
下面的名称根据实际需要命名,然后index URL中的harbor.your_domain.com换成你的实际域名
名称:your_chart_repo
Index URL:https://harbor.your_domain.com/chartrepo/library
完成添加后,会看到该操作报错
在这里插入图片描述

2. 解决证书错误x509: certificate signed by unknown authority

参考:https://ranchermanager.docs.rancher.com/zh/v2.5/pages-for-subheaders/helm-charts-in-rancher#repositories
这一步需要做的操作有点多,需要用到linux命令行,请心细阅读
(1). 回到集群界面,找到harbor服务安装时创建的证书
在这里插入图片描述

在这里插入图片描述
(2). 拷贝ca.crt的值,用Base64解码
这里推荐个在线base64解码的网站,也可以用其他网站
https://tools.fun/base64.html
在这里插入图片描述
(3). 将解码后的内容写入到ca.pem(也可是其他文件名)文件中,然后用命令openssl x509 -outform der -in ca.pem | base64 -w0生成rancher所需的DER格式的值
在这里插入图片描述
(4). 拷贝上步的输出,贴入到报错的chart仓库中
在chart仓库中,找到目标,从最右边的三个点按钮中选择编辑yaml,把值贴到caBundle
在这里插入图片描述
再查看该仓库,可发现证书错误解决,但又提示新的错误no API version specified,这个原因是harbor服务需要填写账号密码

3. 接下来解决harbor认证问题

默认管理员账号/密码为:admin/Harbor12345
在这里插入图片描述

三、 使宿主机上的docker能与rancher中的harbor服务交互

1. k8s节点的所有机器修改/etc/hosts,增加自定义域名解析

# vim /etc/hosts
172.20.29.1 harbor.your_domain.com

2. 将二.2.(2)中解码后的证书内容添加到主机的信任证书列表里

任选下面两个方案中的一个即可
(1). 方案一:可以添加到/etc/ssl/certs/ca-bundle.crt
下面是命令行追加内容示例,将xxx替换为你的实际证书内容,也可用vim等编辑器实现

# cat >> /etc/ssl/certs/ca-bundle.crt <</EOF
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxx
-----END CERTIFICATE-----
EOF

(2). 方案二:也可以添加到docker的证书目录里/etc/docker/certs.d/harbor.your_domain.com/ca.crt
harbor.your_domain.com目录是不存在的,创建即可

# mkdir /etc/docker/certs.d/harbor.your_domain.com
# cat >> /etc/docker/certs.d/harbor.your_domain.com/ca.crt <</EOF
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxx
-----END CERTIFICATE-----
EOF

3. 重启docker服务

# systemctl docker restart

4. 登录harbor

# docker login harbor.your_domain.com
username: admin
password:
  1. 打一个镜像,推送到harbor,测试是否成功
# docker tag your_image:tag harbor.your_domain.com/library/your_image:tag
# docker push harbor.your_domain.com/library/your_image:tag
<think>嗯,用户遇到了一个错误信息:“FATA[0000] unexpected status from POST request to https://10.3.5.78/v2/rancher/fleet-agent/blobs/uploads/: 404 Not Found”。我需要帮他们分析这个问题。首先,我应该回忆一下常见的404错误可能的原因。通常,404意味着资源未找到,所以可能是URL不正确或者服务端没有对应的端点。 接下来,用户提到的URL是https://10.3.5.78/v2/rancher/fleet-agent/blobs/uploads/,看起来像是在使用Rancher的Fleet组件进行上传。Fleet用于集群管理,可能涉及镜像仓库的操作。这里的路径包含“/v2/”,可能涉及到Docker Registry API,因为Registry的API版本2通常以/v2/开头。上传blob的端点应该是正确的,但返回404,可能说明Registry服务没有正确响应。 可能的错误点有几个方面:首先,检查这个URL是否正确。用户是否配置了正确的镜像仓库地址?例如,是否应该是不同的端口或者路径?其次,服务端是否真的运行了Registry v2的服务?如果服务端没有正确配置,可能无法处理上传请求,导致404。另外,网络连接问题也可能导致无法访问,但通常404更倾向于路径错误而非连接问题。 另外,考虑证书问题。因为使用的是HTTPS,可能服务端使用了自签名证书,而客户端没有正确信任该证书,导致请求失败。不过,如果是证书问题,通常会出现证书验证错误,而不是404,但也不能完全排除。用户可能需要检查是否配置了正确的CA证书。 还有可能是权限问题,比如没有认证信息,但如果是权限问题,通常会返回401或403状态码,而不是404。所以暂时可以排除权限问题,不过还是需要确认是否有必要的认证头信息被正确添加。 接下来,用户的环境可能是在私有部署Rancher私有镜像仓库中,IP地址10.3.5.78是内网地址,可能存在网络策略或防火墙规则阻止了请求,但同样,404更可能的是路径问题而不是连接问题。不过,用户应该检查是否能从客户端访问该地址的端口,比如使用curl或telnet测试连通性。 总结可能的原因: 1. URL路径错误,服务端没有对应的端点。 2. 镜像仓库服务未正确运行或配置,比如未启用/v2/的API。 3. 网络问题导致无法正确访问服务,但返回的是404而不是连接拒绝。 4. 证书问题导致请求未能正确到达服务端,但更可能的是其他错误。 建议用户进行的步骤: - 验证URL是否正确,确保镜像仓库的地址和路径正确。 - 检查服务端是否运行了支持/v2/的Docker Registry,确认其健康状态。 - 使用curl命令手动发送POST请求到该URL,观察响应,确认是否是同样的404。 - 查看服务端日志,了解请求处理的情况,是否有错误记录。 - 检查客户端和服务端之间的网络连接,确保端口开放,没有防火墙拦截。 - 确认是否需要跳过TLS验证,或者安装自签名证书到客户端。 如果用户是在安装或升级Fleet Agent时遇到此问题,可能需要检查Rancher的配置,确保Fleet的配置指向正确的镜像仓库地址,仓库中确实存在所需的fleet-agent镜像。另外,Rancher版本和Fleet的兼容性也可能是一个因素,需要确认版本匹配。 另外,检查是否有代理设置或DNS解析问题,导致域名解析到错误的IP地址。虽然这里用的是IP,但可能涉及其他网络配置。例如,某些情况下,容器内的DNS解析可能有问题,导致无法正确访问服务。 最后,用户可能需要参考Rancher或Fleet的官方文档,查找类似问题解决方案,或者查看社区是否有类似的问题报告,是否有已知的修复方法或补丁。你</think>遇到的错误信息表明在向指定的URL发送POST请求时,服务端返回了 **404 Not Found**。这通常意味着请求的路径不存在,或者服务端未正确配置。以下是可能的原因和解决方法: --- ### **常见原因分析** 1. **URL地址错误** - 检查 `https://10.3.5.78/v2/rancher/fleet-agent/blobs/uploads/` 是否正确。 - 确认目标服务(如镜像仓库Rancher Fleet服务)是否部署在该地址,且路径 `/v2/` 有效。 2. **镜像仓库服务未正常运行** - 服务端可能未运行支持 Docker Registry V2 API 的服务(如 HarborDocker Registry 等)。 - 检查服务端是否正常监听端口,验证 `/v2/` 接口是否可用(例如用 `curl -k https://10.3.5.78/v2/`)。 3. **TLS/SSL证书问题** - 如果服务端使用自签名证书,客户端可能需要跳过证书验证(添加 `--insecure` 参数)或手动信任证书。 - 确保客户端能访问 `10.3.5.78` 的指定端口(默认HTTPS为443)。 - 使用 `telnet 10.3.5.78 443` 或 `curl -v https://10.3.5.78` 测试连通性。 5. **Rancher Fleet配置问题** - 如果涉及 Rancher Fleet 部署,检查 `fleet-agent` 的配置是否指向正确的镜像仓库地址。 - 确保仓库中存在所需的 `fleet-agent` 镜像,且权限允许拉取/上传。 --- ### **解决步骤** 1. **手动验证服务端接口** 用以下命令测试服务端是否响应 `/v2/` 接口: ```bash curl -k -v https://10.3.5.78/v2/ ``` - 预期响应:`200 OK` 或 `401 Unauthorized`(若需认证)。 - 如果返回 `404`,说明服务端未正确提供 Registry V2 API。 2. **检查镜像仓库日志** 查看服务端(如 HarborDocker Registry)的日志,确认是否收到请求及错误详情。 3. **确认Rancher Fleet配置** - 如果是部署 Rancher Fleet Agent,检查 `fleet.yaml` 或 Helm Chart 中的镜像仓库配置。 - 确保镜像名称和仓库地址正确(如 `rancher/fleet-agent` 是否存在于仓库中)。 4. **临时跳过TLS验证(测试用途)** 如果是证书问题,可临时添加 `--insecure` 或环境变量 `SSL_NO_VERIFY=true`(取决于具体工具)。 5. **检查网络策略** - 确保客户端(如K8s集群节点)能访问 `10.3.5.78:443`。 - 排查防火墙、安全组或网络插件(如Calico)是否拦截了流量。 --- ### **示例:快速测试Registry可用性** ```bash # 1. 测试/v2/接口 curl -k https://10.3.5.78/v2/ # 2. 测试镜像是否存在(替换为实际镜像名) curl -k -X GET https://10.3.5.78/v2/rancher/fleet-agent/tags/list # 3. 若有认证,添加用户名密码 curl -k -u username:password https://10.3.5.78/v2/ ``` --- ### **进一步建议** - 如果服务端是私有仓库,确保已登录(`docker login 10.3.5.78`)。 - 参考 Rancher 官方文档,确认 Fleet Agent 的部署要求: [Rancher Fleet Documentation](https://rancher.com/docs/rancher/v2.6/en/deploy-across-clusters/fleet/) 通过逐步排查,通常可以定位到是配置错误、服务未运行还是网络问题导致的404。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值