Harbor配置https
harbor是不附带任何证书的,因此默认情况下使用http来进行访问
K8S在使用harbor作为私有仓库时或生产环境下强烈建议使用https
生成证书
生产环境下,需要从CA获取证书,测试或者开发可以使用OpenSSL自己生成证书
生成私钥
# 创建证书的存储目录
mkdir /home/ssl
cd /home/ssl
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={{Your domain name}}" \
-key ca.key \
-out ca.crt
如果只使用ip访问,在执行上面的命令之前执行以下操作
openssl rand -writerand .rnd
生成服务器证书
生成私钥
openssl genrsa -out {{Your domain name}}.key 4096
生成证书签名请求
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN={{Your domain name}}" \
-key {{Your domain name}}.key \
-out {{Your domain name}}.csr
生成扩展文件
无论是使用域名还是IP地址连接到Harbor主机,都必须创建此文件,以便可以为Harbor主机生成符合主题备用名称(SAN)和x509 v3的证书扩展要求
替换DNS条目
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1={{Your domain name}}
EOF
如果使用ip进行访问,则需要使用如下方式进行创建:
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.xx.xx
EOF
使用扩展文件为harbor主机生成证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in {{Your domain name}}.csr \
-out {{Your domain name}}.crt
颁发证书给harbor以及docker
将服务器证书和秘钥复制到harbor主机的证书文件夹中
mkdir -p /data/cert
cp {{Your domain name}}.crt /data/cert/
cp {{Your domain name}}.key /data/cert/
转换crt为cert提供给docker
openssl x509 -inform PEM -in {{Your domain name}}.crt -out {{Your domain name}}.cert
复制证书以及秘钥到harbor主机上的docker证书文件夹中
mkdir -p /etc/docker/certs.d/{{Your domain name}}/
cp /home/ssl/{{Your domain name}}.cert /etc/docker/certs.d/{{Your domain name}}/
cp /home/ssl/{{Your domain name}}.key /etc/docker/certs.d/{{Your domain name}}/
cp /home/ssl/ca.crt /etc/docker/certs.d/{{Your domain name}}/
重启docker
systemctl restart docker
修改harbor配置文件
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
# 指定crt证书文件和秘钥位置
certificate: /data/cert/{{Your domain name}}.crt
private_key: /data/cert/{{Your domain name}}.key
重新部署harbor
./install.sh
访问harbor,因为是自签证书会提示不安全