《Kubernetes部署篇:Containerd配置Harbor基于https协议私有镜像仓库》

一、背景

操作系统K8S版本Harbor版本containerd版本nerdctl版本
Ubuntu 20.04.5 LTSv1.24.12v2.5.61.6.121.2.1

一般来说某个主机安装了k8s后,命令行才会有crictl命令。而ctr是跟k8s无关的,主机安装了containerd 服务后就可以操作ctr命令。ctr -v​​​输出的是containerd​​​的版本,​​crictl -v​​​输出的是当前k8s的版本,从结果显而易见可以认为​​crictl​​​是用于k8s​​的。​​

root@k8s-master-62:~# crictl -v
crictl version v1.26.0
root@k8s-master-62:~# ctr -v
ctr github.com/containerd/containerd 1.6.12-0ubuntu1~20.04.1

​​ctr​​​客户端主要区分了2个命名空间分别是​​k8s.io​​​和​​default​​​,使用​​ctr​​​查看镜像列表需要加上-n参数。而crictl 是只有一个​​k8s.io​​命名空间​,使用crictl查看镜像列表不需要加上-n参数。

root@k8s-master-62:~# ctr namespace ls
NAME    LABELS 
default        
k8s.io         
root@k8s-master-62:~# crictl namespace ls
No help topic for 'namespace'

crictl没有tag命令,只能使用nerdctl和ctr,必须指定命名空间,要不然kubelet无法使用。推荐使用nerdctl,使用效果与docker命令的语法一致。


二、部署harbor镜像仓库

1、安装cfssl工具集

curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64 -o /usr/local/bin/cfssl
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64  -o /usr/local/bin/cfssljson
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl-certinfo_1.6.3_linux_amd64  -o /usr/local/bin/cfssl-certinfo
curl -L https://dl.k8s.io/release/v1.24.12/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl
chmod +x /usr/local/bin/cfssl* && chmod +x /usr/local/bin/kubectl

2、准备CA证书配置文件

vim harbor-ca-config.json
{
    "signing": {
        "default": {
            "expiry": "87600h"
        },
        "profiles": {
            "harbor": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}

3、准备harbor server证书请求文件

vim harbor-server-csr.json
{
    "CN": "muli.harbor.json",
    "hosts": [
        "192.168.1.64",
        "my.harbor.com",
        "127.0.0.1"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing"
        }
    ]
}

4、生成harbor CA证书和私钥

cfssl gencert -initca harbor-ca-csr.json | cfssljson -bare harbor-ca

5、生成harbor server证书和私钥

cfssl gencert \
-ca=harbor-ca.pem \
-ca-key=harbor-ca-key.pem \
-config=harbor-ca-config.json \
-profile=harbor \
-loglevel=1 \
harbor-server-csr.json | cfssljson -bare harbor-server

7、为了在Docker中使用CA证书访问Harbor镜像仓库,您需要将CA证书添加到Docker守护程序的TLS信任存储中。按照以下步骤进行操作

# 1、创建/etc/docker/certs.d/my.harbor.com:8443目录,将harbor-ca.pem证书复制到此目录
# 2、重启docker服务(systemctl restart docker)

7、其它部署操作,这里就不一一写出来

8、现在,您可以直接使用docker login命令进行登录,而无需指定–tlscacert标志,命令示例如下:

root@k8s-harbor-64:~# echo NEoCN0YjdGr | docker login -u admin --password-stdin https://my.harbor.com:8443

docker login会在当前用户家目录下生成~/.docker/config.json,可以根据该文件制作镜像拉取凭证如下所示:

root@k8s-harbor-64:~# cat   /root/.docker/config.json 
{
        "auths": {
                "my.harbor.com:8443": {
                        "auth": "YWRtaW46TkVvQ04wWWpkR3I="
                }
        }
}

三、修改Containerd配置文件

1、编辑配置文件/etc/containerd/config.toml

    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = ""
      [plugins."io.containerd.grpc.v1.cri".registry.auths]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."my.harbor.com:8443".tls]
          insecure_skip_verify = true
        [plugins."io.containerd.grpc.v1.cri".registry.configs."my.harbor.com:8443".auth]
          username = "admin"
          password = "NEoCN0YjdGr"
      [plugins."io.containerd.grpc.v1.cri".registry.headers]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."my.harbor.com:8443"]
          endpoint = ["https://my.harbor.com:8443"]

2、重启containerd服务

systemctl daemon-reload && systemctl restart containerd.service  

四、推送和拉取私有镜像

4.1、推送镜像到harbor

方法一:

ctr image pull --all-platforms docker.io/library/nginx:1.23.1
ctr image tag docker.io/library/nginx:1.23.1 my.harbor.com:8443/library/nginx:1.23.1
ctr image push --user "admin:NEoCN0YjdGr" --skip-verify my.harbor.com:8443/library/nginx:1.23.1

或者你可以使用doker push上传镜像

docker pull docker.io/library/nginx:1.23.1
docker tag docker.io/library/nginx:1.23.1 my.harbor.com:8443/library/nginx:1.23.1
docker push my.harbor.com:8443/library/nginx:1.23.1

4.2、拉取harbor私有镜像

ctr image pull --user "admin:NEoCN0YjdGr" --skip-verify my.harbor.com:8443/lolaage/nginx:1.23.1 

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值