wm harbor 默认密码_Harbor配置https

之前安装的harbor都是基于http,需要修改docker的/etc/docker/daemon.json文件,新增insecure-registries配置,这样又需要重启下docker服务了。为了减少对正在运行的容器服务影响,我们可以配置harbor支持https来解决。

52d39bac23cdd9384e6ce69dc25a2fb3.png

以下内容大部分来自harbor的官方文档的参考。Harbor https证书可以使用由受信任的第三方CA签名的证书,也可以使用自签名证书。

https://goharbor.io/docs/2.0.0/install-config/configure-https/

本文我们参考官方文档,采用openssl生成自签名证书

准备工作

1.harbor离线包下载

wget https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz

2.安装docker和docker-compose

略。。。

f935a2b580dd149374fa260495c06fce.png

3.检查下主机hosts添加下主机名的解析,harbor域名本机ip解析(或者你加入dns)

证书生成

1.生成CA证书私钥

openssl genrsa -out ca.key 4096

2.生成CA证书

openssl req -x509 -new -nodes -sha512 -days 3650  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com"  -key ca.key  -out ca.crt

3.生成服务器证书私钥

openssl genrsa -out yourdomain.com.key 4096

4.生成服务器证书签名请求(CSR)

openssl req -sha512 -new     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com"     -key yourdomain.com.key     -out yourdomain.com.csr

5.生成一个x509 v3扩展文件

cat > v3.ext <

6.使用该v3.ext文件为您的Harbor主机生成证书

openssl x509 -req -sha512 -days 3650     -extfile v3.ext     -CA ca.crt -CAkey ca.key -CAcreateserial     -in yourdomain.com.csr     -out yourdomain.com.crt

7.分发证书给harbor使用

cp yourdomain.com.crt /data/cert/  cp yourdomain.com.key /data/cert/

8.转换yourdomain.com.crt为yourdomain.com.cert,供Docker使用

Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书。

openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

9.将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中

cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/cp ca.crt /etc/docker/certs.d/yourdomain.com/

10.需要在操作系统级别信任证书(重要)

红帽系列(centos)

cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crtupdate-ca-trust

Ubuntu:

cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt update-ca-certificates

11.重启docker服务

systemctl restart docker.service

步骤比较繁多,写了一个简单的自签名证书生成脚本

以下脚本以reg.koudai.com为例生成证书,并分发到harbor和docker

#!/bin/bash# 直接在该目录下操作生成证书,正好供harbor.yml使用mkdir -p /data/certcd /data/certopenssl genrsa -out ca.key 4096openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=example/OU=Personal/CN=reg.koudai.com" -key ca.key -out ca.crtopenssl genrsa -out reg.koudai.com.key 4096openssl req -sha512 -new -subj "/C=CN/ST=Shanghai/L=Shanghai/O=example/OU=Personal/CN=reg.koudai.com" -key reg.koudai.com.key -out reg.koudai.com.csrcat > v3.ext <

配置harbor.yml

1.解压harbor离线安装包到/usr/local下

tar xvf harbor-offline-installer-v2.1.0.tgz -C /usr/local/

2.修改harbor.yml文件

[root@gfs harbor]# cat harbor.yml# Configuration file of Harbor# The IP address or hostname to access admin UI and registry service.# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.hostname: reg.koudai.com# http related confighttp:  # port for http, default is 80. If https enabled, this port will redirect to https port  port: 80# https related confighttps:  # https port for harbor, default is 443  port: 443  # The path of cert and key files for nginx  certificate: /data/cert/reg.koudai.com.crt  private_key: /data/cert/reg.koudai.com.key

改这几行就行了。

然后执行docker-compose文件生成脚本,直接在当前目录下执行

./prepare # 生成docker-compose文件docker-compose up -d # 启动docker-compose

验证

自己电脑加下hosts解析,然后在浏览器打开https://reg.koudai.com,由于是自签名的忽略下告警,继续就可以打开harbor

服务器上docker login验证。直接在服务器执行docker login reg.koudai.com ,输入你配置的用户名和密码即可,或者直接使用harbor默认的用户名和密码(这里仅仅是测试,harbor默认的密码,配置文件里未修改)用户名:admin 密码:Harbor12345

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
全志A80的以太网使用固定MAC地址.txt 2015/12/3 16:09 开发板:美睿的商业开发板 OS:android4.4.2(美睿提供) linux:3.4.39 发现全志平台的A80的以太网的MAC地址是变化的,由于需要做MAC地址和IP绑定的问题。 问了一些人,可以通过外挂EEPROM。外挂器件硬件不同意。(改版或者面积占用的问题) 当然在其它平台:比如freescale平台可以将eMMC分一个私有分区保存数据,在 恢复出厂设置 的时候,不会被擦除,感觉全志平台也应该有(只找到A80的,A80的没有找到)。 http://bbs.elecfans.com/jishu_427503_1_1.html [Android问答] 关于全志A20的分区问题(sys_partition.fex) ; keydata = 1 ; //私有数据分区,重新量产数据将不丢失 http://blog.csdn.net/memechashang/article/details/23999857 http://yobin.sinaapp.com/topic/2780/android%E7%9A%84deviceid%E7%9A%84%E6%B7%BB%E5%8A%A0 Android的DeviceID的添加 找了好久,可以看见文件:/proc/cpuinfo中的CPU的ID号是唯一的。 测试:先刷美睿的系统,然后再刷原生的系统(支持4K录像,但是美睿没有移植驱动的系统),发现序列号没变。 序列号查看的方法:设置→关于平板电脑→状态信息→序列号:38608c0010503dd3d65c 中看到。 shell@kylin-merrii:/ $ cat /proc/cpuinfo Processor : ARMv7 Processor rev 5 (v7l) processor : 0 BogoMIPS : 4800.00 Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc07 CPU revision : 5 Hardware : sun9i Revision : 0000 Serial : 38608c0010503dd3d65c shell@kylin-merrii:/ $ 换了一台机器,序列号:38608 c0010 501dd 3560e 感觉序列号应该是唯一的!^_这里不做担保。 思路:于是想办法读取序列号,取后12位作为MAC地址! MAC地址的有效性: http://blog.csdn.net/skyflying2012/article/details/40322563 MAC地址格式小结 在IPv4的环境中,区分单播和组播地址就是校检最低位的二进制数字,0代表单播地址,1代表组播地址。 也就是说第二个数字一定是0、2、4、6、8、A、C、E其中的一个。 全志A80的BSP中的有效性验证: Z:\wyb\finish_a80_4k_bsp\meirrii_merrii_a80_merrii\lichee\linux-3.4\include\linux\etherdevice.h Z:\wyb\finish_a80_4k_bsp\meirrii_merrii_a80_merrii\lichee\linux-3.4\drivers\net\ethernet\sunxi\eth\sunxi_geth.c addr [0] &= 0xfe; /* clear multicast bit */ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ 感觉要么就是全志的BUG,要么就是全志的设置更加严格,这样下来第二个数字一定是2、6、A、E(不能是0、4、8、C)其中的一个。 实现原理: 曾经研究过内核中如何生成随机的MAC地址,android层中的setting如何获取序列号,然后准备在framework中拦截,走不通了。 http://bbs.csdn.net/topics/360240853 android 获取平板电脑序列号 http://blog.csdn.net/zhanghao_hulk/article/details/8286916 [置顶] android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法 http://www.cnblogs.com/Amandaliu/archive/2012/12/04/2802322.html 【Android】获取Mac地址【2】 后来想起来,调试 以太网卡驱动的时候,曾经出现过手工加载 insmod /system/vendor/modules/sunxi_gmac.ko 就可以获取MAC地址上网。 既然这样,就在init.rc的服务中启动一个C程序来获取序列号,然后配置在模块 sunxi_gmac.ko 中。 Z:\wyb\finish_a80_4k_bsp\meirrii_merrii_a80_merrii\android4.4\device\softwinner\kylin-merrii\init.sun9i.rc 关闭init.rc中的以太网卡驱动的加载, # insmod network insmod /system/vendor/modules/bcmdhd.ko insmod /system/vendor/modules/bcm_btlpm.ko insmod /system/vendor/modules/usbnet.ko insmod /system/vendor/modules/asix.ko insmod /system/vendor/modules/qf9700.ko insmod /system/vendor/modules/mcs7830.ko insmod /system/vendor/modules/rtl8150.ko insmod /system/vendor/modules/cdc_ether.ko # insmod /system/vendor/modules/sunxi_gmac.ko 然后在 init.rc 的最后面做一个服务,在系统启动的时候, #2015/12/3 11:49 edit the ethernet's MAC address!!!! service wenyuanbo /system/bin/chip_id_as_mac class main user root group root oneshot 文件名:Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE = chip_id_as_mac # LOCAL_SRC_FILES := $(call all-subdir-c-files) LOCAL_SRC_FILES := chip_id_as_mac.c include $(BUILD_EXECUTABLE) 文件名:chip_id_as_mac.c // http://blog.csdn.net/21cnbao/article/details/7919055 // Z:\wyb\finish_a80_4k_bsp\meirrii_merrii_a80_merrii\android4.4\system\core\init #include #include #include #include #include #include #include #include #include #include #include #include static int get_chip_id(char *buf, size_t size) { char *path = "/proc/cpuinfo"; FILE *fd; char data[128]; char *key, *value, *end; int len = -1; fd = fopen(path, "r"); if (fd == NULL) { printf("****wyb %s:%d/%s()! ERROR !!!! cannot open %s\n", __FILE__, __LINE__, __func__, path); return -1; } while (fgets(data, sizeof(data), fd)) { key = data; value = strchr(key, ':'); if (value == 0) continue; *value++ = 0; if (strncmp(key, "Serial", 6)) continue; while (isspace(*value)) value++; end = strchr(value, '\n'); *end = 0; len = snprintf(buf, size, "%s", value); // printf("****wyb %s:%d/%s()! buf=%s len=%d\n", __FILE__, __LINE__, __func__, buf, len); break; } fclose(fd); return 0; } int main(int argc, char **argv) { int ret; char buf[32] = {0}; char buf2[32] = {0}; int i = 0; // unsigned char ucTemp = 0; char ucTemp = 0; char path[200] = "insmod /system/vendor/modules/sunxi_gmac.ko mac_str=\""; if (get_chip_id(buf, sizeof(buf)) < 0) { printf("****wyb %s:%d/%s()! ERROR!!!!\n", __FILE__, __LINE__, __func__); } else { printf("****wyb %s:%d/%s()! 2015/12/2 16:51 get_chip_id=%s sizeof(buf)=%d\n", __FILE__, __LINE__, __func__, buf, sizeof(buf)); // for(i=0; i<6; i++) for(i=0; iadb push chip_id_as_mac /system/bin/ C:\Users\wenyb>adb remount remount succeeded C:\Users\wenyb>adb shell root@kylin-merrii:/ # cd /system/bin cd /system/bin root@kylin-merrii:/system/bin # chmod 777 chip_id_as_mac chmod 777 chip_id_as_mac root@kylin-merrii:/system/bin # ll chip* ll chip* -rwxrwxrwx root root 5368 2015-12-03 15:23 chip_id_as_mac root@kylin-merrii:/system/bin # sync sync root@kylin-merrii:/system/bin # reboot 困惑,下面这个程序的执行之后,MAC地址就成为了:1F:50:3d:d3:d6:5c。找了好久也找不到原因。 // http://blog.csdn.net/21cnbao/article/details/7919055 // Z:\wyb\finish_a80_4k_bsp\meirrii_merrii_a80_merrii\android4.4\system\core\init #include #include #include #include #include #include #include #include #include #include #include #include static int get_chip_id(char *buf, size_t size) { char *path = "/proc/cpuinfo"; FILE *fd; char data[128]; char *key, *value, *end; int len = -1; fd = fopen(path, "r"); if (fd == NULL) { printf("****wyb %s:%d/%s()! ERROR !!!! cannot open %s\n", __FILE__, __LINE__, __func__, path); return -1; } while (fgets(data, sizeof(data), fd)) { key = data; value = strchr(key, ':'); if (value == 0) continue; *value++ = 0; if (strncmp(key, "Serial", 6)) continue; while (isspace(*value)) value++; end = strchr(value, '\n'); *end = 0; len = snprintf(buf, size, "%s", value); // printf("****wyb %s:%d/%s()! buf=%s len=%d\n", __FILE__, __LINE__, __func__, buf, len); break; } fclose(fd); return 0; } int main(int argc, char **argv) { int ret; char buf[32] = {0}; char buf2[32] = {0}; int i = 0; // unsigned char ucTemp = 0; char ucTemp = 0; char path[200] = "insmod /system/vendor/modules/sunxi_gmac.ko mac_str=\""; if (get_chip_id(buf, sizeof(buf)) < 0) { printf("****wyb %s:%d/%s()! ERROR!!!!\n", __FILE__, __LINE__, __func__); } else { printf("****wyb %s:%d/%s()! 2015/12/2 16:51 get_chip_id=%s sizeof(buf)=%d\n", __FILE__, __LINE__, __func__, buf, sizeof(buf)); // for(i=0; i<6; i++) for(i=0; i='a') && (ucTemp='A') && (ucTemp='0') && (ucTemp9) { ucTemp = (ucTemp-10) + 'A'; } else { ucTemp += '0'; } buf2[1] = ucTemp; printf("****wyb %s:%d/%s()! 2015/12/2 17:13 get_chip_id/buf2=%s sizeof(buf2)=%d\n", __FILE__, __LINE__, __func__, buf2, sizeof(buf2)); // strcat(d,s); // strcat(path, buf2); strncat(path, buf2, 17); strcat(path, "\""); printf("****wyb %s:%d/%s()! 2015/12/3 15:11 get_chip_id/buf2=%s sizeof(buf2)=%d path=%s\n", __FILE__, __LINE__, __func__, buf2, sizeof(buf2), path); system(path); } return 0; }
Harbor 是一个企业级的 Docker 镜像仓库,提供了管理和控制 Docker 镜像的安全、认证和访问控制等功能。在安装和配置 Harbor 镜像仓库之前,需要进行登录验证的操作。 1. 安装 Docker 和 Docker Compose 首先,需要在安装 Harbor 之前安装 Docker 和 Docker Compose。可以参考 Docker 的官方文档进行安装。 2. 下载并解压 Harbor 安装包 从 Harbor 的官方网站下载最新版本的安装包,解压到指定的目录中。 3. 创建 Harbor配置文件 在解压后的 Harbor 目录中,将 harbor.cfg.tmpl 文件复制一份,并将其重命名为 harbor.cfg。该文件是 Harbor 的主要配置文件,需要根据实际情况进行修改。其中,需要注意的是,在配置文件中需要设置 admin_initial_password,它是 Harbor 的管理员密码。 4. 启动 HarborHarbor 目录中,执行以下命令启动 Harbor: ``` docker-compose up -d ``` 该命令会启动 Harbor 的各个服务,并将其作为 Docker 容器运行。在启动过程中,可以通过 docker logs 命令查看 Harbor 的启动日志。 5. 登录验证 启动 Harbor 之后,可以通过浏览器访问 Harbor 的 Web 界面,进行登录验证。在浏览器中输入 http://<Harbor_IP>/,其中,<Harbor_IP> 是 Harbor 所在的主机的 IP 地址。如果成功进入 Harbor 的 Web 界面,则说明登录验证成功。 以上就是 Harbor 镜像仓库的安装与配置过程中的登录验证操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值