# 镜像仓库 FAQ
本页列出使用镜像仓库时常见的一些问题和解决办法。
## DCE 5.0 标准版为什么不能使用中间件部署镜像仓库
部署镜像仓库时会用到一些中间件,但 DCE 5.0 标准版中没有中间件,中间件属于白金版。
## 部署镜像仓库时如何校验配置的中间件网络是否可连接
登录部署 Harbor 的目标集群,在任意节点中执行 `ping` 命令,测试是否能连接到中间件组件。
## 镜像空间列表看不到私有镜像
镜像仓库 v0.7.0-v0.7.3 和 v0.8.0 存在一个 bug,会导致看不到私有镜像,请升级到更高版本的镜像仓库。
## 在使用中间件 MinIO 部署镜像仓库时报错
在使用中间件 MinIO 部署镜像仓库时,需要先手动通过 MinIO 管理平台创建好 bucket。
## 仓库集成支持的 Harbor 最低版本
在仓库集成时因使用了 Harbor 的功能,对版本有一定要求,目前支持的已知最低版本为 v2.4.0。更早的旧版本将不可用。
## 离线环境镜像扫描器失败
镜像扫描因为依赖漏洞数据,默认是去
[CVE 官网](https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=kubernetes)获取漏洞数据。
如果是一个纯离线环境,则不能正常进行漏洞扫描,会执行失败。

## 创建托管 Harbor 时第一步集群校验通过后创建 Harbor 仍然出错
目前只校验了集群中是否有 CRD,没有校验 `harbor-operator` 服务,可能会出现不存在 `harbor-operator` 服务的情况,导致不能正确地创建 Harbor。
## 本地执行 `docker login {ip}` 之后报错
执行 `docker login {ip}` 后出现以下报错:
```text
Error response from daemon: Get "https://{ip}/v2/": x509: cannot validate certificate for {ip} because it doesn't contain any IP SANs
```
出现这个错误是因为 `registry` 是 `https` 服务,是使用了非签名证书或者不安全证书,就会提示这个错误。
解决办法是在 `/etc/docker/daemon.json` 配置文件中 `"insecure-registries"` 加入对应的 IP。
```json
"insecure-registries": [
"{ip}",
"registry-1.docker.io"
]
```
之后重启 `systemctl restart docker`。
## 创建托管 Harbor 接入外部 PostgreSQL、Redis,密码含有特殊字符 `(!@#$%^&*)`,导致服务启动失败
目前密码中不能有特殊字符,不然会出现服务启动失败的情况,可以使用大小写字母和数字组合的情况。
## harbor-operator 安装不成功
harbor-operator 安装不成功需要检查这几点,`cert-manager` 是否安装成功,`installCRDs` 是否设置为 `true`。
安装 harbor-operator 的 __helm__ 任务是否成功。
## 创建托管 Harbor 可以使用 redis cluster 模式吗
目前 Harbor 仍然不能使用 `redis cluster` 模式。
## 私有镜像在非镜像仓库模块能看到吗?
镜像仓库是严格按照 DCE 5.0 的权限来执行的,在镜像仓库中某个用户必须要属于某个租户/工作空间,
才能看到当前租户下的私有镜像空间,否则即使管理员也看不到。
## 私有镜像绑定到工作空间后查询不到私有镜像
私有镜像绑定工作空间后程序需要异步执行很多逻辑,所以不会马上看到。
这个过程会受到系统的影响,如果系统响应较快,则异步执行较快,通常 1 分钟内就能看到。最长应该不会超过 5 分钟。
## 托管Harbor创建后能访问了但是状态依然不健康
目前托管 Harbor 页面上的状态和仓库集成的状态是二合一的,当两个状态都为健康的时候才是健康,
因此可能出现托管 Harbor 已经可以访问了,但是状态依然不健康,这种情况需要等一个服务探测周期,
一个探测周期是 10 分钟,在一个周期后就会恢复如初。
## 创建的托管仓库状态为不健康

- A1:用户输入的数据库、Redis、S3 存储等信息有误,导致无法连接,可通过查看日志文件进行排查。
现象主要是几个核心服务有 Pod 启动失败,可以通过查看日志进一步确认原因。
```shell
kubectl -n kangaroo-lrf04 get pods
```
```none
NAME READY STATUS RESTARTS AGE
trust-node-port-harbor-harbor-chartmuseum-57fdfb9cdc-qznwc 1/1 Running 0 20h
trust-node-port-harbor-harbor-core-855f8df46c-cgqb9 1/1 Running 0 20h
trust-node-port-harbor-harbor-jobservice-6b958dbc57-ks997 1/1 Running 0 20h
trust-node-port-harbor-harbor-portal-5cf6bf659b-kj6gd 1/1 Running 0 20h
trust-node-port-harbor-harbor-registry-5ccbf457c5-qrtx5 2/2 Running 0 20h
trust-node-port-harbor-harbor-trivy-dbdc8945-xh6rv 1/1 Running 0 20h
trust-node-port-nginx-deployment-677c74576-7kmh4 1/1 Running 0 20h
```
- A2:如果通过 [A1](#a1) 排查后无误,继续排查 `harborcluster` 资源是否健康,如下命令查看 `harborcluster` 资源状态。
```shell
kubectl -n kangaroo-lrf04 get harborclusters.goharbor.io
```
```none
NAME PUBLIC URL STATUS
trust-node-port https://10.6.232.5:30010 healthy
```
- A3:如果 [A2](#a2) 排查后无误,继续在 `kpanda-global-cluster` 集群上排查 `registrysecrets.kangaroo.io`
资源是否创建,以及 `status` 情况。
提示: namespace 默认为 kangaroo-system。
```shell
kubectl -n kangaroo-system get registrysecrets.kangaroo.io
```
```none
NAME AGE
inte-bz-harbor-1 34d
```
```shell
kubectl -n kangaroo-system describe registrysecrets.kangaroo.io inte-bz-harbor-1
```
!!! tip
- 上述 [A1](#a1)、[A2](#a2) 都在托管 Harbor 所在的集群上排查问题,在目标集群上的查看路径为: __仓库实例__ -> __概览__ -> __部署位置__
- 上述 [A3](#a3) 在 `kpanda-global-cluster` 集群上验证。
## 创建 `Project` 或上传镜像后发现页面上的镜像空间和可用存储未增加
这是因为 UI 页面上在 **托管 Harbor** 首页、仓库集成详情中的统计信息是异步获取的数据,会有一定的延迟,最长延迟为 10 分钟。
## 仓库集成后但状态为不健康

首先确认实例是否真的健康,如果实例不健康,则需要排查实例的问题;
如果实例健康,则通过在 `kpanda-global-cluster` 集群上排查 `registrysecrets.kangaroo.io`
资源是否创建,并排查 `status` 情况,这样可以初步确认问题所在。
提示:namespace 默认为 `kangaroo-system`。
```shell
kubectl -n kangaroo-system get registrysecrets.kangaroo.io
```
```none
NAME AGE
trust-test-xjw 34d
```
```shell
kubectl -n kangaroo-system get registrysecrets.kangaroo.io trust-test-xjw -o yaml
```
```yaml
apiVersion: kangaroo.io/v1alpha1
kind: RegistrySecret
metadata:
name: trust-test-xjw
namespace: kangaroo-system
spec:
....
status:
state:
lastTransitionTime: "2023-03-29T03:27:31Z"
message: 'Get "https://harbor.kangaroo.daocloud.io": dial tcp: lookup harbor.kangaroo.daocloud.io
on 10.233.0.3:53: no such host'
reason: RegistryHealthCheckFail
status: "False"
type: HealthCheckFail
```
## 仓库集成后,在镜像列表页面实例中不可查看
请确认仓库集成的资源是否健康,如果不健康是不会在镜像列表页面的实例列表中显示的。
确认方式请参考[仓库集成后不健康的确认方法](#_2)。
## 在 `Kpanda` 镜像选择器中选中一个私有 `Project` 镜像但部署时提示镜像拉取失败
- A1:能在镜像选择器中看到私有 `Project` 表明 `Project` 和 `Workspace` 已经进行了绑定,
此时需要去镜像部署的目标集群 `namespace` 中确认是否生成名为 `registry-secret` 的 __secret__ 。
```shell
kubectl -n default get secret registry-secret
```
```none
NAME TYPE DATA AGE
registry-secret kubernetes.io/dockerconfigjson 1 78d
```
- A2:如果确认已经生成名为 `registry-secret` 的 __secret__ ,则需要确认 `secret` 中的 __dockerconfigjson__ 是否正确。
```shell
kubectl get secret registry-secret -o jsonpath='{.data.*}'| base64 -d | jq
```
```json
{
"auths": {
"127.0.0.1:5000": {
"auth": "YWRtaW46SGFyYm9yMTIzNDU="
}
}
}
```
```shell
echo "YWRtaW46SGFyYm9yMTIzNDU=" | base64 -d
```
```none
admin:Harbor12345
```