V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pydiff
V2EX  ›  Kubernetes

自建 harbor 证书问题

  •  
  •   pydiff · 2021-12-22 14:09:01 +08:00 · 2309 次点击
    这是一个创建于 827 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚刚看到有人问 gcr.io 的镜像问题就想起来以前的没解决的问题。 就是我们自建 harbor 的时候,如果启用了 https,想要用域名访问的时候就要么用证书,要么在 deamon.json 中增加 insecurity 项。

    我之前是用 acme 申请的免费证书,直接在 nginx 上配置证书,如果我用命令 docker pull xxx.domian.com/image:latest拉取镜像的时候,会报 x509 错误,如: x509: certificate signed by unknown authority;如果我用 openssl 生成自签证书,想要正常用的话,也需要把证书手动复制到每台机器上 /etc/docker/cert.d目录下。

    而我看比如阿里云他们的镜像源也不需要配置证书就可以直接拉取了,还有我也见过公司合作的厂商也有些的 docker 仓库的域名也不需要特别配置就可以直接拉取,那么他们用的证书是什么样的证书,为啥可以直接通过 docker daemon 的验证,这种证书有免费的吗?

    因为我对这块也不熟,查了谷歌跟百度也没有找到答案,所以过来请教一下各位大佬。

    13 条回复    2021-12-26 20:17:49 +08:00
    southwolf
        1
    southwolf  
       2021-12-22 14:19:05 +08:00
    你先确认一下证书申请吧..如果是 ACME 搞的证书 绑好了域名应该不会有问题
    pydiff
        2
    pydiff  
    OP
       2021-12-22 14:23:06 +08:00
    @southwolf 证书没问题了,直接在页面上访问 harbor,证书也是显示正常的,就是用 docker 拉取镜像时报 x509 错误.同时这个证书用在给其他服务也是正常的
    ooxxcc
        3
    ooxxcc  
       2021-12-22 14:45:16 +08:00 via iPad
    没有配置中间证书
    hxsf
        4
    hxsf  
       2021-12-22 14:55:07 +08:00
    @pydiff #2 如果仅仅是 docker pull 报证书错的情况,可能是运行 docker 的那台机器上的根证书没更新 or 证书链有问题。
    一般来说,Linux 上根证书的包叫 ca-certificates , 可以使用包管理更新。然后用 update-ca-trust 命令更新。
    然后 docker pull 其实是发命令给 dockerd ,实际的 pull 动作是 dockerd 发起的,你可能还需要重启一下 dockerd 。
    pydiff
        5
    pydiff  
    OP
       2021-12-22 15:15:41 +08:00 via iPhone
    @ooxxcc 中间证书是啥,可以详细点吗
    pydiff
        6
    pydiff  
    OP
       2021-12-22 16:04:20 +08:00 via iPhone
    @ooxxcc 大佬,感谢,解决了,确实是中间证书问题,之前还困扰了好久,好奇别人怎么可以自己搞得不行的
    Illusionary
        7
    Illusionary  
       2021-12-22 16:05:15 +08:00
    harbor.yml 里面配置好就行了,没那么多乱七八糟
    https:
    port: 443
    certificate: /data/harbor/cert/google.com.pem
    private_key: /data/harbor/cert/google.com.key
    pydiff
        8
    pydiff  
    OP
       2021-12-22 16:06:58 +08:00 via iPhone
    @Illusionary 我之前这样配置也是不行的
    pydiff
        9
    pydiff  
    OP
       2021-12-22 16:18:43 +08:00
    @Illusionary 再问下,就是 harbor 能不能跟 nexus 一样,我代理 dockerhub 仓库的镜像不用加多一个仓库名,比如 nexus 就可以
    ` docker pull xxx.domain.com/redis:latest`,但是我目前用 harbor 就必须要加多一个项目名,比如:
    ` docker pull xxx.domain.com/proxy/library/redis:latest`,其中 proxy 就是我必须在 harbor 中必须要建的项目,还可以省略多一个个 library
    liuhan907
        10
    liuhan907  
       2021-12-22 20:55:27 +08:00 via Android
    @pydiff 我记得 harbor 不能直接代理,必须得前缀。所以我们后来换 Nexus 了
    stevenhawking
        11
    stevenhawking  
       2021-12-23 04:01:31 +08:00
    pydiff
        12
    pydiff  
    OP
       2021-12-23 08:27:47 +08:00 via iPhone
    @stevenhawking ok ,我试试,谢谢哈
    ljf
        13
    ljf  
       2021-12-26 20:17:49 +08:00
    云服务商的 harbor 里面配置的证书,是通过公共机构签发的可信的证书,所以 docker 登陆和拉取的时候会自动信任,因为 ca 是可信机构。如果是自签的 harbor 证书,那么 ca 是不可信的,因此需要把 ca 证书加到每台客户端的 /etc/docker/cert.d 目录下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5447 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:46 · PVG 16:46 · LAX 01:46 · JFK 04:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.