总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战
一、环境信息
K8S版本 | 操作系统 | CPU架构 | 服务版本 |
---|---|---|---|
1.26.15 | Kylin Linux Advanced Server V10 | ARM64 | harbor v2.4.0 |
二、部署操作
2.1、资源包下载
说明:如果你从别处找来的镜像,redis提示报错ignore-warnings ARM64-COW-BUG,可以重新编译redis镜像。当前资源已经是重新编译过了,可以正常使用的镜像。
2.2、生成https证书
1、配置hosts
bash
192.168.1.188 server.harbor.com
2、生成CA证书私钥和CA证书
bash
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=server.harbor.com" \
-key ca.key \
-out ca.crt
说明:通过 ca.key 文件生成一个 crt 文件,CA 证书后面用来签署服务器证书。
3、生成服务器证书私钥
bash
openssl genrsa -out server.harbor.com.key 4096
4、生成签名请求文件
bash
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=server.harbor.com" \
-key server.harbor.com.key \
-out server.harbor.com.csr
说明:通过 server.harbor.com生成签名请求文件 CSR。
5、生成x509 v3扩展文件
bash
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=server.harbor.com
DNS.2=192.168.1.188
EOF
6、生成服务器证书
bash
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.harbor.com.csr \
-out server.harbor.com.crt
2.3、配置Docker证书
说明:配置Docker客户端以便它能够安全地与使用了自签名证书的Harbor仓库进行通信。默认情况下,Docker客户端在尝试与仓库通信时,会检查仓库的SSL证书是否由一个受信任的证书颁发机构(CA)签发。如果证书是自签名的(如Harbor的默认设置),Docker客户端将拒绝连接,因为它不信任该证书。
1、将server.harbor.com.crt转换为server.harbor.com.cert,供 Docker 使用
说明:Docker守护程序将 .crt 文件解释为CA证书,并将 .cert 文件解释为客户端证书。
bash
openssl x509 -inform PEM -in server.harbor.com.crt -out server.harbor.com.cert
2、复制证书到指定位置
说明:将服务器证书、服务器私钥和CA文件复制到Harbor主机上的Docker证书文件夹中。必须首先创建适当的文件夹。
bash
# 创建目录
mkdir -p /etc/docker/certs.d/server.harbor.com
# 如果不是使用443端口,则需要在后面指定使用的具体端口,例如8001
mkdir -p /etc/docker/certs.d/server.harbor.com:9443
cp server.harbor.com.cert /etc/docker/certs.d/server.harbor.com:9443/
cp server.harbor.com.key /etc/docker/certs.d/server.harbor.com:9443
cp ca.crt /etc/docker/certs.d/server.harbor.com:9443
如下图所示:
3、重启docker
bash
systemctl restart docker
2.4、部署harbor
1、解压harbor安装包
bash
tar axf harbor-offline-installer-v2.4.0-arm64.tgz
cd harbor
2、导入镜像
bash
docker load -i harbor.v2.4.0.tar.gz
3、编辑harbor.yml文件
bash
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
如下所示:
bash
hostname: server.harbor.com
http:
port: 9800
https:
port: 9443
certificate: /data/pkgs/harbor/server.harbor.com.crt
private_key: /data/pkgs/harbor/server.harbor.com.key
harbor_admin_password: Harbor12345
database:
password: n714aSP3RT
data_volume: /data/basic-data/harbor/harbor-data
log:
local:
location:/data/basic-data/harbor/harbor-log
4、执行安装脚本
bash
./install.sh
执行完成后,如下所示:
浏览器登陆https://192.168.1.188:9443,如下所示:
2.5、containerd接入harbor
说明:以下操作在所有containerd主机上执行。
1、配置hosts
bash
192.168.1.188 server.harbor.com
2、编辑配置文件/etc/containerd/config.toml
bash
[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."server.harbor.com:9443".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."server.harbor.com:9443".auth]
username = "admin"
password = "Harbor12345"
[plugins."io.containerd.grpc.v1.cri".registry.headers]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."server.harbor.com:9443"]
endpoint = ["https://server.harbor.com:9443"]
[plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]
tls_cert_file = ""
tls_key_file = ""
如下图所示:
3、重启containerd服务
bash
systemctl daemon-reload && systemctl restart containerd.service
2.6、推送和拉取私有镜像
2.6.1、推送私有镜像
1、使用docker login命令进行登录
bash
echo Harbor12345 | docker login -u admin --password-stdin https://server.harbor.com:9443
docker login会在当前用户家目录下生成~/.docker/config.json,可以根据该文件制作镜像拉取凭证如下所示:
bash
[root@arm-2 ~]# cat ~/.docker/config.json
{
"auths": {
"server.harbor.com:9443": {
"auth": "YWRtaW46SGFyYm9yMTIzNDU="
}
}
2、使用docker服务的doker push命令上传镜像
bash
docker pull docker.io/library/nginx:1.25.4
docker tag docker.io/library/nginx:1.25.4 server.harbor.com:9443/library/nginx:1.25.4
docker push server.harbor.com:9443/library/nginx:1.25.4
如下图所示,则表示push成功
2.6.2、拉取私有镜像
bash
ctr image pull --user "admin:Harbor12345" --skip-verify server.harbor.com:9443/library/nginx:1.25.4
如下图所示:
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战