Harbor对接OIDC

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页面

https://IP:8443

点击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

@lz006 @Leo-ljr

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博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值