Linux版本:
Linux node3 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
1、关闭防火墙和selinux
2、安装docker-ce
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
systemctl enable docker; systemctl start docker
3、安装docker-compose
harbor对docker-compose版本有要求,尽量安装较高版本
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
aarch64版本安装:
yum install python3-pip
pip3 install docker-compose
4、安装harbor
4.1 下载harbor
使用离线安装包安装
curl -OL https://github.com/goharbor/harbor/releases/download/v2.2.2/harbor-offline-installer-v2.2.2.tgz
4.2 解压
tar -xf harbor-offline-installer-v2.2.2.tgz
4.3 harbor配置
进入harbor目录,拷贝一份模板配置文件进行修改:
cd harbor
cp harbor.yml.tmpl harbor.yml
参数说明:
//node3为本机主机名,需要事先在/etc/hosts配好
hostname: node3
//使用oidc
auth_mode: oidc_auth
//修改登录密码
harbor_admin_password: 123
//如果使用http则把以下行注释:
‘’’
https:
# https port for harbor, default is 443
port: 445
# The path of cert and key files for nginx
certificate: /etc/harbor/node3.crt
private_key: /etc/harbor/node3.key
‘’’
//如果使用https则把以下行注释,同时需要生成https所需文件:
‘’’
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
‘’’
使用该脚本即可,并将node3.key和node3.crt拷贝到harbor.yml配置文件中配置的路径,注意将以下脚本中的node3改为自己的域名或主机名:
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=node3" -key ca.key -out ca.crt
openssl genrsa -out node3.key 4096
openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=node3" -key node3.key -out node3.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=node3
DNS.2=node3.com
DNS.3=node3
EOF
openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in node3.csr -out node3.crt
openssl x509 -inform PEM -in node3.crt -out node3.cert
cp node3.crt /etc/pki/ca-trust/source/anchors/node3.crt
update-ca-trust
4.4 开始安装
如果使用http执行执行install.sh
如果使用https需要执行prepare脚本,经测试,只执行install.sh即可
./prepare
详见Harbor docs | Configure HTTPS Access to Harbor
问题:第一次配置即使用https,此时本地会提示本地没有prepare镜像,会从远端拉取,此时的做法应该是先执行install.sh脚本,再执行./prepare,然后再执行install.sh
5、登录harbor页面
注意:此时登录没有通过OIDC登录选项,需等到配置oidc且测试连接通过后才有该选项,此时暂不考虑,继续往下走
注意使用浏览器打开harbor页面时使用域名,不要使用ip,否则在对接OIDC时会出现如下问题
https://github.com/goharbor/harbor/issues/12982
6、keycloak安装
docker run -p 172.20.42.54:8443:8443 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:13.0.1
注:8443即使用https,8080使用http,公网ip或harbor对接时必须使用https:
Keycloak Docker HTTPS required - Stack Overflow
keycloak默认使用H2数据库,keycloak容器重启数据会丢失,以下使用外部postgres数据库做持久化
6.1 docker network create keycloak-network
6.2 docker run -d --name postgres --net keycloak-network -v /data/keycloak/postgres:/var/lib/postgresql/data -e POSTGRES_DB=keycloak -e POSTGRES_USER=keycloak -e POSTGRES_PASSWORD=password postgres
6.3 docker run -d -p 172.20.42.183:8443:8443 --name keycloak --net keycloak-network -e ADDR=postgres -e DB_USER=keycloak -e DB_PASSWORD=password -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=Kylincloud@123. -e DB_VENDOR=postgres quay.io/keycloak/keycloak:13.0.1
参考: https://github.com/keycloak/keycloak-containers/blob/13.0.1/server/README.md
7、登录keyclock页面
点击Administration Console登录管理员用户,密码admin/admin,docker run时可修改,也可进管理页面修改
8、创建realm域
域之间相互隔离,点击左上角`Select realm`然后点击add realm添加域
输入自定义名称,此处为harbor,点击create创建
9、创建Clients
填入Client ID,harbor连接时需要;
Root URL为harbor根路由,最好使用域名,不使用ip
10、配置Client
Harbor中Valid Redirect URLs必须为c/oidc/callback/,如果端口为443则不要在此添加端口号
Secret在harbor连接时会用到,如果界面没有此选项则不用改
添加mapper,类型为Group Membership,Token Claim Name名称在harbor连接时会用到,添加此mapper才能与harbor间保持组同步
11、创建组
12、创建用户
加入到group1,firstName和LastName必填
13、设置用户密码
14、harbor配置
进入harbor页面进行配置
系统管理->配置管理->认证管理
注意:非*可不填,除组名称
OIDC Endpoint:keyclock地址,harbor为在keyclock添加的域名称,harbor前面的保持固定
OIDC客户端标识:keyclock创建的Client ID名称
OIDC客户端密码:keyclock中的Secret,上文有截图
组名称:与keyclock mapper中Token Claim Name一致
OIDC scope: 必须包含openid
自动登录:勾选表示直接使用keyclock中的用户名
详见Harbor docs | Configure OIDC Provider Authentication
测试通过后保存,然后退出登录
15、通过OIDC登录
会跳转到如下界面:
输入用户名密码后会跳转到harbor
此时再使用admin用户登录harbor,能看到用户管理中多了一个test的用户,组管理中多了一个/group1的组,这是从keyclock同步而来
问题:
[ERROR] [/core/controllers/oidc.go:76]: State mismatch, in session: %!s(<nil>), in url: 2pG0sDHtGx32UgFPRlDCag8CVdR17Qkf
解决方法:
使用域名在浏览器登录,不使用ip,如果使用ip登录harbor的话跳转到/c/oidc/login时也会使用ip,但是/c/oidc/callback/强制使用域名
详见:
https://github.com/goharbor/harbor/issues/12982
What you browser are you using? Is it Chrome?
Could you use the developer tools to check the requests to /c/oidc/login and /c/oidc/callback, has the cookie sid changed?
Are you using the same hostname to access the login page and in redirect URL of the OIDC provider?
参考链接
Harbor docs | Configure OIDC Provider Authentication
Harbor docs | Configure HTTPS Access to Harbor
Harbor docs | Configure the Harbor YML File
Harbor docs | Configure Harbor User Settings at the Command Line
Keycloak - Guide - Keycloak on Docker
Keycloak Docker HTTPS required - Stack Overflow
https://github.com/goharbor/harbor/issues/12982
Keycloak快速上手指南,只需10分钟即可接入Spring Boot/Vue前后端分离应用实现S【附源码】_Java_老男孩_51CTO博客