harbor是不附带任何证书的,因此默认情况下使用http来进行访问
K8S在使用harbor作为私有仓库时或生产环境下强烈建议使用https
生成证书
生产环境下,需要从CA获取证书,测试或者开发可以使用OpenSSL自己生成证书
生成私钥
# 创建证书的存储目录
mkdir /home/ssl
cd /home/sslopenssl 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 443port: 443# The path of cert and key files for nginx
# 指定crt证书文件和秘钥位置certificate: /data/cert/{{Your domain name}}.crtprivate_key: /data/cert/{{Your domain name}}.key
重新部署harbor
./install.sh
访问harbor,因为是自签证书会提示不安全