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,因为是自签证书会提示不安全

posted @ 2021-08-10 11:04  悠悠听风  阅读(348)  评论(0编辑  收藏  举报