Kubernetes的部署
Harbor的部署
配置
- 服务器:腾讯云
- Linux版本:
Linux VM-4-12-centos 3.10.0-1160.90.1.el7.x86_64
- Docker:
Docker version 24.0.5, build ced0996
- Docker-Comose:
docker-compose version 1.24.1, build 4667896b
下载Harbor离线安装包
解压后的目录如下
harbor
├── common.sh # 通用命令,使用install.sh驱动
├── harbor.v2.7.3.tar.gz
├── harbor.yml.tmpl # 配置模板
├── install.sh # 安装脚本
├── LICENSE
└── prepare
OpenSSL自签证书
为了保证Harbor的安全性,我们需要为Harbor配置一个SSL证书以保证安全,防止黑客篡改
使用可信证书颁发机构(CA)签发的证书,要么1年需要换一次,要么3个月需要续签名一次。可是我们的Harbor启动后,除非有安全漏洞,否则启动后,可能几年都不会做一次变更。这个时候,怎么办呢?
我们使用OpenSSL自签名证书,不过浏览器不信任这种证书,用户在首次访问时会收到安全警告
创建目录
存放生成的证书
mkdir /root/cert
cd /root/cert/
生成CA证书
生成CA证书和密钥
openssl genrsa -out ca.key 4096
生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Chongqing/L=Chongqing/O=Redrock/OU=Personal/CN=reg.yiiong.top" \
-key ca.key \
-out ca.crt
生成Server证书
生成 Server 证书私钥
# 生成密钥
openssl genrsa -out server.key 4096
生成Server证书签名请求(CSR)
openssl req -sha512 -new \
-subj "/C=CN/ST=Chongqing/L=Chongqing/O=Redrock/OU=Personal/CN=reg.yiiong.top" \
-key server.key \
-out server.csr
- -x509: 指定生成自签名X.509证书
- -nodes: 指定生成的私钥不加密
- -sha512: 指定使用SHA-512哈希算法进行签名
- -days 3650: 指定证书的有效期为3650天(约10年)
- -subj “/C=CN/ST=Beijing/L=Beijing/O=mintimate/OU=Personal/CN=yourdomain.com”: 指定证书的主题信息。"C"表示国家代码(Country),"ST"表示省/州(State),"L"表示城市(Locality),"O"表示组织(Organization),"OU"表示组织单位(Organizational Unit),"CN"表示通用名称(Common Name)
- -subj “/C=CN/ST=Beijing/L=Beijing/O=mintimate/OU=Personal/CN=yourdomain.com”: 指定证书的主题信息。"C"表示国家代码(Country),"ST"表示省/州(State),"L"表示城市(Locality),"O"表示组织(Organization),"OU"表示组织单位(Organizational Unit),"CN"表示通用名称(Common Name)
- -out yourdomain.com.crt: 指定生成的证书文件的输出路径和文件名。
生成 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=reg.yiiong.top
DNS.2=hostname
EOF
使用 CA 证书签发 Server 证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.csr \
-out server.crt
一共有如下这些
[root@VM-4-12-centos harbor]# cd /root/cert
[root@VM-4-12-centos cert]# ll
总用量 28
-rw-r--r-- 1 root root 2045 12月 30 23:32 ca.crt
-rw-r--r-- 1 root root 3247 12月 30 23:32 ca.key
-rw-r--r-- 1 root root 17 12月 30 23:39 ca.srl
-rw-r--r-- 1 root root 2094 12月 30 23:39 server.crt
-rw-r--r-- 1 root root 1712 12月 30 23:38 server.csr
-rw-r--r-- 1 root root 3243 12月 30 23:32 server.key
-rw-r--r-- 1 root root 248 12月 30 23:35 v3.ext
为 Harbor 和 Docker 配置证书
将 server 证书和密钥复制到 Harbor 主机上的 /data/cert 目录中
mkdir -p /data/cert
cp server.crt /data/cert/
cp server.key /data/cert/
转换 server.crt 为 server.cert
openssl x509 -inform PEM -in server.crt -out server.cert
将 server 证书,密钥和 CA 证书复制到 Harbor 主机上的 Docker 证书目录中
mkdir -p /etc/docker/certs.d/reg.yiiong.top:8443
cp server.key /etc/docker/certs.d/reg.yiiong.top:8443
cp server.cert /etc/docker/certs.d/reg.yiiong.top:8443
cp ca.crt /etc/docker/certs.d/reg.yiiong.top:8443
查看 Docker 证书目录文件
[root@VM-4-12-centos reg.yiiong.top:8443]# ll
总用量 12
-rw-r--r-- 1 root root 2045 12月 30 23:42 ca.crt
-rw-r--r-- 1 root root 2094 12月 30 23:41 server.cert
-rw-r--r-- 1 root root 3243 12月 30 23:41 server.key
重启Docker
systemctl restart docker
初始化Harbor
将模板复制一份
cp harbor.yml.tmpl harbor.yml
在harbor.yml
中修改如下的参数
- hostname:Harbor的访问地址,最好写ip
- https/port:对外暴露8443端口,记得放行8443端口
- https/certificate: 使用宿主机的SSL证书文件。也就是.crt的位置
- https/certificate: 使用宿主机的SSL证书文件,是.key的位置
安装
./install.sh
访问
https访问,并且加上8443端口号
更改配置的操作
使用 prepare 脚本生成 HTTPS 配置
./prepare
删除原有 Harbor 容器
docker-compose down -v
重新启动 Harbor
docker-compose up -d
问题与解决
1.出现Error response from daemon: failed to create task for container: failed to initialize logging driver: dial tcp [::1]:1514: connect: connection refused
取消rsyslog.conf文件第19,20行注释,并将514改为1514
vim /etc/rsyslog.conf
# 取消注释并修改
$ModLoad imtcp
$InputTCPServerRun 1514
# 重启rsyslog
systemctl restart rsyslog.service
2.出现Error response from daemon: driver failed programming external connectivity on endpoint nginx (191f6b9a13a1d60e6f9656c7f8030be35bcd96395c524f8fc4af5c83e2b45f26): Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use
修改harbor.yml
中的http/port为没有占用的端口即可,然后记得放行端口
为没有占用的端口即可,然后记得放行端口