Docker_Harbor 野性酷女 2021-07-26 17:37 394阅读 0赞 ### Harbor ### * 一.Harbor * * * 1.概述 * 2.Harbor特性 * 3.Harbor简易架构 * * 4.Harbor配置文件参数 * * * 1)所需参数: * 2)可选参数: * 二.Harbor构建docker私有仓库 * * * * 部署环境 * 实验需求 * 实验准备 * 1.下载 Harbor 安装程序 * 2.配置 Harbor 参数文件 * 3.启动 Harbor * 4.查看 Harbor 启动镜像和容器 * * 1)查看镜像 * 2)查看容器 * 3)检查服务容器是否开启 * 5.此时可真机访问serverIP * * 1)添加项目并填写项目名称 * 6.在本地测试仓库功能 * * 1)登录 * 2)下载镜像进行测试 * 3)镜像打标签 * 4)上传镜像到Harbor * * 5)验证是否上传成功 * 7.在客户端上传镜像 * * 解决方法 * 三.维护管理Harbor * * * 1.停止现有的 Harbor 实例 * 2.修改配置文件 Harbor.cfg * 3.运行 prepare 脚本来填充配置 * 4.重启服务 * 5.创建 Harbor 用户 * 客户端操作 * * 1.删除之前打标签的镜像 * 2.测试创建的新用户能否使用 * 3.移除 Harbor 服务容器以及全部数据 # 一.Harbor # ### 1.概述 ### Harbor 是VMware公司开源的云本地 registry 仓库, 有可视化的Web管理界面,可以方便的管理和储存 Docker 镜像。 Harbor 支持在多个仓库直接进行复制镜像,提供用户管理和访问控制和活动审计。 ### 2.Harbor特性 ### 基于角色控制 基于镜像的复制策略 支持LDAP/AD域,通过VPN连接域使用 图像删除和垃圾收集 图像UI,方便 审计,此功能使用较少,一般企业中用ELK收集、分析日志 RESTful API ### 3.Harbor简易架构 ### harbor主要有6大模块,默认的每个harbor的组件都被封装成一个docker container,所以可以通过compose来部署harbor,总共分为8个容器运行,通过docker-compose ps来查看 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70] **组件解释**: **Proxy**:通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务 **Registry**:负责存储Docker镜像,并处理docker push/pull命令 **Core services**:Harbor的核心功能,包括UI、webhook、token服务 **Database**:为core services提供数据库服务 **Log collector**:·负责收集其他组件的log,供日后进行分析 所有的请求都经过proxy代理,proxy代理转发给Core services和Registry,其中Core services包括UI界面、token令牌和webhook网页服务功能,Registry主要提供镜像存储功能。如果要进行下载上传镜像,要经过token令牌验证然后从Registry获取或上传镜像,每一次下载或上传都会生成日志记录,会记入Log collector,而用户身份权限及一些镜像语言信息会被存储在Database中。 #### 4.Harbor配置文件参数 #### vim /usr/local/harbor/harbor.cfg,关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数 ###### 1)所需参数: ###### 这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh脚本重新安装 Harbour,参数将生效。具体参数如下: **hostname**:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名(FQDN),例如 192.168.195.128 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名。 **ui\_url\_protocol**:(http 或 https,默认为 http)用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https **max\_job\_workers**:镜像复制作业线程。 **db\_password**:用于db\_auth 的MySQL数据库root 用户的密码。 **customize\_crt**:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。 当由外部来源提供密钥和根证书时,将此属性设置为 off。 **ssl\_cert**:SSL 证书的路径,仅当协议设置为 https 时才应用。 **secretkey\_path**:用于在复制策略中加密或解密远程 register 密码的密钥路径。 ##### 2)可选参数: ##### 这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数 的更新,Harbor.cfg 将被忽略。 注意:如果选择通过UI设置这些参数,请确保在启动Harbour后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户),auth_mode 不能被修改。具体参数如下: Email:Harbor需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。 请注意,在默认情况下SSL连接时没有启用。如果SMTP服务器需要SSL,但不支持STARTTLS,那么应该通过设置启用SSL email\_ssl = TRUE。 harbour_admin_password:管理员的初始密码,只在Harbour第一次启动时生效。之后,此设置将被忽略,并且应 UI中设置管理员的密码。 请注意,默认的用户名/密码是 admin/Harbor12345。 auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为 ldap_auth。 self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbour中创建新用户。 注意:当 auth\_mode 设置为 ldap\_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。 Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。 project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下, 每个人都可以创建一个项目。 如果将其值设置为“adminonly”,那么只有 admin 可以创建项目。 verify_remote_cert:打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。 将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。 另外,默认情况下,Harbour 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统, 如 S3、Openstack Swif、Ceph 等。但需要更新 common/templates/registry/config.yml 文件。 ## 二.Harbor构建docker私有仓库 ## ##### 部署环境 ##### <table> <thead> <tr> <th>主机</th> <th>操作系统</th> <th>主机名/IP地址</th> <th>主要软件和版本</th> </tr> </thead> <tbody> <tr> <td>Harbor(服务端)</td> <td>Centos 7</td> <td>192.168.133.10</td> <td>docker docker-compose harbor-offline-v1.1.2</td> </tr> <tr> <td>client(客户端)</td> <td>Centos 7</td> <td>192.168.133.20</td> <td>docker</td> </tr> </tbody> </table> ##### 实验需求 ##### 通过Harbor创建Docker私有仓库 使用图形化管理Docker私有仓库镜像 ##### 实验准备 ##### 在服务端安装docker和docker-compose 客户端上安装docker 关闭防火墙 修改主机名 #### 1.下载 Harbor 安装程序 #### Harbor:192.168.133.10 //在线下载 wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz //如果在先下载慢,可以使用上面的链接下载,在拖入 tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/ ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 1] #### 2.配置 Harbor 参数文件 #### Harbor:192.168.133.10 vim /usr/local/harbor/harbor.cfg //第5行 hostname = 192.168.133.10 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 2] #### 3.启动 Harbor #### Harbor:192.168.133.10 sh /usr/local/harbor/install.sh ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 3] #### 4.查看 Harbor 启动镜像和容器 #### Harbor:192.168.133.10 ##### 1)查看镜像 ##### docker images ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 4] ##### 2)查看容器 ##### docker ps -a ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 5] #### 3)检查服务容器是否开启 #### cd /usr/local/harbor/ docker-compose ps ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 6] #### 5.此时可真机访问serverIP #### * 上图检查一切正常,此时可以打开浏览器访问 http://192.168.133.10 的管理页面,默认的管理员用户名和密码是 admin/Harbor12345 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 7] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 8] ##### 1)添加项目并填写项目名称 ##### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 9] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 10] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 11] #### 6.在本地测试仓库功能 #### Harbor:192.168.133.10 * 此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下, Register 服务器在端口 80 上侦听。 ##### 1)登录 ##### docker login -u admin -p Harbor12345 http://127.0.0.1 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 12] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 13] ##### 2)下载镜像进行测试 ##### docker pull nginx ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 14] ##### 3)镜像打标签 ##### docker tag nginx 127.0.0.1/testproject/nginx:v1 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 15] #### 4)上传镜像到Harbor #### docker push 127.0.0.1/testproject/nginx:v1 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 16] ##### 5)验证是否上传成功 ##### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 17] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 18] #### 7.在客户端上传镜像 #### client:192.168.133.20 上述操作都是在 Harbor 服务器本地操作。如果其他客户端上传镜像到 Harbor,就会报 如下错误。出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜 像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。 docker login -u admin -p Harbor12345 http://192.168.133.10 \#-------------------输出内容------------------------------------------ WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error response from daemon: Get https://192.168.133.10/v2/: dial tcp 192.168.133.10:443: connect: connection refused ##### 解决方法 ##### vim /usr/lib/systemd/system/docker.service #--------------------修改内容----------------------------------- ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.133.10 --containerd=/run/containerd/containerd.sock #--------------------------------------------------------------- //重启服务 systemctl daemon-reload systemctl restart docker //再次登录 docker login -u admin -p Harbor12345 http://192.168.133.10 #----------------------输出内容-------------------------------------------- WARNING! Using --password via the CLI is insecure. Use --password-stdin. 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 #-------------------------------------------------------------------- ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 19] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 20] docker pull tomcat docker images docker tag tomcat 192.168.133.10/testproject/tomcat:v2 docker push 192.168.133.10/testproject/tomcat:v2 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 21] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 22] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 23] ### 三.维护管理Harbor ### 可以使用 docker-compose 来管理 Harbor。一些有用的命令如下所示,必须在与docker-compose.yml 相同的目录中运行。 修改 Harbor.cfg 配置文件所需选项的步骤 要更改 Harbour 的配置文件时,请先停止现有的 Harbor 实例并更新 Harbor.cfg;然后运行 prepare 脚本来填充配置;最后重新创建并启动 Harbour 的实例。 ##### 1.停止现有的 Harbor 实例 ##### docker-compose down -v ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 24] ##### 2.修改配置文件 Harbor.cfg ##### vim harbor.cfg ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 25] ##### 3.运行 prepare 脚本来填充配置 ##### ./prepare ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 26] ##### 4.重启服务 ##### docker-compose up -d ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 27] ##### 5.创建 Harbor 用户 ##### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 28] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 29] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 30] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 31] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 32] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 33] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 34] #### 客户端操作 #### ##### 1.删除之前打标签的镜像 ##### docker rmi 192.168.133.10/testproject/tomcat:v2 ![在这里插入图片描述][20210607010507585.png] ##### 2.测试创建的新用户能否使用 ##### docker logout 192.168.133.10 docker login 192.168.133.10 docker pull 192.168.133.10/testproject/nginx:v1 docker images ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 35] ##### 3.移除 Harbor 服务容器以及全部数据 ##### 移除 Harbor 服务容器同时保留镜像数据/数据库 //在Harbor服务器上操作 docker-compose down -v 如需重新部署,需要移除 Harbor 服务容器全部数据 持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的 /var/log/Harbor/目录下。 rm -rf /data/database/ rm -rf /data/registry/ ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 36] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70]: /images/20210726/7830cd76648f4835941fa81de51f986f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 1]: /images/20210726/7f2aab9c00d9482e9f3a7870339210fc.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 2]: /images/20210726/22e547dedb16425ca566edc7f7d9a345.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 3]: /images/20210726/15b2948131f14a49a48a9c4e41d03480.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 4]: /images/20210726/95b572a06b3d4e6eac993bc346311e8d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 5]: /images/20210726/959f96c6143842e2bf40dbc94a93a97d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 6]: /images/20210726/ff2f7c4f7e994bdea40e8c7ab91a54f8.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 7]: /images/20210726/a2b0ae337e4646ff942740b3f396859c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 8]: /images/20210726/a67e0c19e5a6450584e5b97188cc8633.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 9]: /images/20210726/2bb7770b71d441d98c199cccc4c6284e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 10]: /images/20210726/3af7c90d592a493996f4de84572cc2fa.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 11]: /images/20210726/c36638b799cf4d28be56134796a97519.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 12]: /images/20210726/2eee1395942347a79c0f9bcf281a7b8e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 13]: /images/20210726/f3c43a8008364673997badce6e03aed2.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 14]: /images/20210726/10624c5bb3c54351b1c672623c8b9a36.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 15]: /images/20210726/510263587033472fbf89590d808851b8.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 16]: /images/20210726/e54561479024450c9db09a5f6033af7b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 17]: /images/20210726/39dee741526b43f0976ffb70a455ddd1.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 18]: /images/20210726/f833ed65fbe0417e984c915a7d5e36eb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 19]: /images/20210726/9e8e0d8a078b4b23b73479ab272b4a42.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 20]: /images/20210726/9398e8cd1e75404986127627a8787566.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 21]: /images/20210726/bd72e3487504492c9a892f0409e4c85c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 22]: /images/20210726/8c7983810c2b414ea17ad044c65f325e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 23]: /images/20210726/8125749cb5f642308f578e644de54373.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 24]: /images/20210726/385c7fd4d9ea48888fb8290afe37fc7b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 25]: /images/20210726/4c0e956db06d4be7a55802677936e6ca.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 26]: /images/20210726/f24744688ad74a748c66f0fbea53d85e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 27]: /images/20210726/887fa968e6894abcb5b4fd148fdb1098.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 28]: /images/20210726/ea682e0e92c141db8540e869b253f6a0.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 29]: /images/20210726/767ece0f4a0847b0aae1cc490fcbed90.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 30]: /images/20210726/8d089e020cde4b71894b0806fc16ee1b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 31]: /images/20210726/3b5f2ff09ca744678590f0d88bccd924.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 32]: /images/20210726/85f291aa71d748cb84955e5a1cf7b28a.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 33]: /images/20210726/67a163eea04b4fd381a6e926aab18766.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 34]: /images/20210726/6d104cb00ffc477888c387f221b1e94a.png [20210607010507585.png]: /images/20210726/ff08c9c559224b03aadd584a333637f8.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 35]: /images/20210726/f00744b2cbc14edf84f4ff94812ab2c9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70 36]: /images/20210726/806537581b03453ea919b710c46cb0a0.png
还没有评论,来说两句吧...