Harbor与Kubernetes的部署示范

Kubernetes的部署

Kubernetes部署 – Yiiong’s blog

Harbor的部署

Harbor官方文档

Harbor Github仓库

Harbor 入门指南-腾讯云开发者社区-腾讯云 (tencent.com)

配置

  • 服务器:腾讯云
  • 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 Github Releases

解压后的目录如下

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

harbor

# 重启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为没有占用的端口即可,然后记得放行端口

为没有占用的端口即可,然后记得放行端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值