Bootstrap

案例9.Harbor 安全 Https 配置

Harbor 安全 Https 配置

1. 安装 docker

下载地址 docker-ce 安装教程阿里巴巴开源镜像站:

https://developer.aliyun.com/mirror/docker-ce

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Step 3: 写入软件源信息
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
# Step 4: 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

docker 镜像加速配置

[root@Ubuntu2204 ~]#vim /etc/docker/daemon.json 

{
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.m.daocloud.io"
        ]
}

[root@Ubuntu2204 ~]#systemctl daemon-reload 

[root@Ubuntu2204 ~]#systemctl restart docker

2. 安装 docker compose

离线安装,直接从 github 或国内镜像站下载安装对应版本,如果下载速度慢的话可以使用迅雷,或者用魔法。

下载地址: https://github.com/docker/compose/releases

​ https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-linux-x86_64

# 下载好系统对应的版本 以 Ubuntu 为例 docker-compose-linux-x86_64 并上传到 /root 目录
[root@Ubuntu2204 ~]#pwd
/root
[root@Ubuntu2204 ~]#ls
docker-compose-linux-x86_64
[root@Ubuntu2204 ~]#mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
[root@Ubuntu2204 ~]#chmod +x /usr/local/bin/docker-compose

3. 安装 harbor

下载地址: https://github.com/goharbor/harbor/releases

**注意:**docker compose 必须先于 harbor 安装,否则会报错误

先查看一下 docker 、docker compose 版本,确保符合 harbor 要求,查看 harbor 版本的 readme 文档可以知道需要的 docker 、docker compose 版本

# 下载离线完整安装包,推荐使用,下载好上传到 /root 目录
[root@Ubuntu2204 ~]#pwd
/root
[root@Ubuntu2204 ~]#ls
harbor-offline-installer-v2.12.2.tgz

# 解压缩离线包
[root@Ubuntu2204 ~]#mkdir /apps
[root@Ubuntu2204 ~]#tar -xvf harbor-offline-installer-v2.12.2.tgz -C /apps/
[root@Ubuntu2204 ~]#mv /apps/harbor/harbor.yml.tmpl /apps/harbor/harbor.yml

[root@Ubuntu2204 ~]#vim /apps/harbor/harbor.yml

hostname: harbor.munan.com			# 修改此行,指向当前主机 IP 或 FQDN
harbor_admin_password: 123456	    # 修改此行指定 harbor 登录用户 admin 的密码

4. harbor 安全 https 配置

基于安全考虑,生产建议采用 https 代替 http

官方文档:https://goharbor.io/docs/2.12.0/install-config/configure-https/

4.1 生成 Harbor 服务器证书

# 创建证书相关数据的目录
[root@Ubuntu2204 ~]#mkdir -p /data/harbor/certs
[root@Ubuntu2204 ~]#cd /data/harbor/certs/

# 生成 ca 的私钥
[root@Ubuntu2204 certs]#openssl genrsa -out ca.key 4096

# 生成 ca 的自签名证书
[root@Ubuntu2204 certs]#openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=NanJing/L=NanJing/O=example/OU=Personal/CN=ca.munan.com" -key ca.key -out ca.crt

# 生成 harbor 主机的私钥
[root@Ubuntu2204 certs]#openssl genrsa -out harbor.munan.com.key 4096

# 生成 harbor 主机的证书申请
[root@Ubuntu2204 certs]#openssl req -sha512 -new -subj "/C=CN/ST=NanJing/L=NanJing/O=example/OU=Personal/CN=harbor.munan.com" -key harbor.munan.com.key -out harbor.munan.com.csr

# 创建 x509 v3 扩展文件(新版新增加的要求)
[root@Ubuntu2204 certs]#cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=harbor.munan.com	# 此处必须和 harbor 的网站名称一致
DNS.2=munan      		# 可选
DNS.3=munan.com			# 可选
EOF

# 给 harbor 主机颁发证书
[root@Ubuntu2204 certs]#openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in harbor.munan.com.csr -out harbor.munan.com.crt


# 生成的文件
[root@Ubuntu2204 certs]#ls
ca.crt  ca.key  harbor.munan.com.crt  harbor.munan.com.csr  harbor.munan.com.key  v3.ext

4.2 配置 Harbor 服务器使用证书

[root@Ubuntu2204 ~]#vim /apps/harbor/harbor.yml

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/harbor/certs/harbor.munan.com.crt
  private_key: /data/harbor/certs/harbor.munan.com.key
  # enable strong ssl ciphers (default: false)
  # strong_ssl_ciphers: false


# 运行 harbor 安装脚本
[root@Ubuntu2204 ~]#/apps/harbor/install.sh

注意: 如果配置文件更改需要执行下面操作
[root@Ubuntu2204 ~]#cd /apps/harbor/
[root@Ubuntu2204 harbor]#./prepare
[root@Ubuntu2204 harbor]#docker-compose down -v
[root@Ubuntu2204 harbor]#docker-compose up -d

注意hostname: harbor.anan.com 此行必须是网站的域名,而且 harbor 主机的 /etc/hosts可以不解析此域名,不能是 IP 地址,否则登录时会报如下错误

5. 用 https 方式访问 harbor 网站

修改 Windows 电脑 /etc/hosts 文件

10.0.0.88 harbor.munan.com

打开浏览器,访问 https://harbor.munan.com/ ,可以看到 Web 界面

在这里插入图片描述

在这里插入图片描述

输入用户:admin 密码:123456 登录

在这里插入图片描述

在 harbor 网站新建项目

Web界面 – 项目 – 新建项目

在这里插入图片描述

6. 实现开机自动启动 harbor

[root@Ubuntu2204 ~]#vim /lib/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/docker-compose -f  /apps/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /apps/harbor/docker-compose.yml down

[Install]
WantedBy=multi-user.target

[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl enable harbor
[root@Ubuntu2204 ~]#systemctl restart harbor.service

7. 客户端配置

重新找一台装有 docker 的虚拟机当作客户端

7.1 在客户端下载 CA 的证书

先做一下本地名称解析

[root@Ubuntu2204 ~]#vim /etc/hosts
10.0.0.88 harbor.munan.com

没有证书验证,直接登录失败

[root@Ubuntu2204 ~]#docker login harbor.munan.com
Username: admin
Password: 
Error response from daemon: Get "https://harbor.munan.com/v2/": x509: certificate signed by unknown authority

在客户端下载 ca 的证书

[root@Ubuntu2204 ~]#mkdir -p /etc/docker/certs.d/harbor.munan.com/
[root@Ubuntu2204 ~]#scp -r harbor.munan.com:/data/harbor/certs/ca.crt /etc/docker/certs.d/harbor.munan.com/

验证可以登录成功,可以上传和下载镜像了

上传镜像一台机器测试,下载镜像一台机器测试,下载镜像的机器也需要下载 ca 证书

[root@Ubuntu2204 ~]#docker login harbor.munan.com
docker login harbor.munan.com
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

gin harbor.munan.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


;