编程技术分享平台

网站首页 > 技术教程 正文

Harbor配置https(harbor官网)

xnh888 2024-09-21 06:26:08 技术教程 29 ℃ 0 评论

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

以下内容大部分来自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

略。。。

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 <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

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.crtyourdomain.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.crt
update-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/cert
cd /data/cert

openssl genrsa -out ca.key 4096
openssl 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.crt
openssl genrsa -out reg.koudai.com.key 4096
openssl 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.csr

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

# 参考上文第5步的说明
[alt_names]
DNS.1=reg.koudai.com
DNS.2=koudai
DNS.3=gfs
EOF

openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in reg.koudai.com.csr -out reg.koudai.com.crt
    
openssl x509 -inform PEM -in reg.koudai.com.crt -out reg.koudai.com.cert

# trust the certificate at the OS level 
cp reg.koudai.com.crt /etc/pki/ca-trust/source/anchors/reg.koudai.com.crt 
update-ca-trust

# 复制证书到docker目录下
mkdir -p /etc/docker/certs.d/reg.koudai.com
cp /data/cert/reg.koudai.com.cert /etc/docker/certs.d/reg.koudai.com
cp /data/cert/reg.koudai.com.key  /etc/docker/certs.d/reg.koudai.com
cp /data/cert/ca.crt /etc/docker/certs.d/reg.koudai.com

# 重启docker服务
systemctl restart docker.service

配置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 config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
https:
  # 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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表