背景:在使用VMware Tanzu的环境中,因为vCenter7.0上的DataCenter自带的Harbor没有集成chart包功能,所以需要自行搭建一个Harbor服务器,通过VMware TCA Controller对接,然后给Tanzu K8s 集群使用
VMware大环境版本:
ESXi | 7.0.2 |
vCenter | 7.0.2 |
NSX-T | 3.1.1 |
TCA | 1.9.5 |
Tanzu_k8s | v1.19.1 |
TKG_k8s | v1.20.2 |
一、基础环境准备
操作系统版本: Linux (open SUSE 15.2)
Harbor版本: v2.3.2
①上传并解压软件包
#cd /opt;mkdir harbor
#cd harbor
#tar -zxf harbor-offline-installer-v2.3.2.tgz
#ll
②配置主机名、DNS、域名
说明:这里的dyk01.com是我本地搭建的域名服务器的域名,172.32.73.206是我域名服务器的IP。因为VMware vCenter7.0版本开始要求使用域名服务器。
③安装docker/docker-compose/openssl
说明:需要先配置公网zypper源(SUSE linux使用zypper管理软件源,类似于yum管理配置软件源)
#zypper install docker
#zypper install docker-compose
#zypper install openssl
④提前更改NTP和openssl配置,防止x509报错
说明:这里我第一次部署Harbor之后,发现docker login方式登录不了,报错x509证书错误。实际原因是我客户端的时间早于Harbor服务器的时间,客户端登录时间早于证书发布时间,这里需要把环境上的所有时间保持一致。202.112.10.36是我环境的NTP服务器
NTP
#zypper install ntp
#ntpdate 202.112.10.36
还有下面这个报错,需要更改openssl配置
x509: cannot validate certificate because of not containing any IP SANs
在openssl.cnf配置文件里的v3_ca下添加subjectAltName属性,ip为本机地址
subjectAltName = IP:172.32.73.203
二、生成证书文件
❶执行以下七个命令生成证书文件
具体这七个证书文件是干啥的可以看文末的官方解释说明
#cd /opt/harbor/harbor;mkdir certs
#cd certs
①
#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=linux03.dyk01.com" \
-key ca.key \
-out ca.crt
③
#openssl genrsa -out linux03.dyk01.com.key 4096
④
#openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=linux03.dyk01.com" \
-key linux03.dyk01.com.key \
-out linux03.dyk01.com.csr
⑤
#cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=linux03.dyk01.com
DNS.2=linux03.dyk01
DNS.3=linux03
EOF
⑥
#openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in linux03.dyk01.com.csr \
-out linux03.dyk01.com.crt
⑦
#openssl x509 -inform PEM -in linux03.dyk01.com.crt -out linux03.dyk01.com.cert
❷结果如下:
❸复制下面两个文件到docker目录下
三、安装Harbor
①更改配置文件
#cd /opt/harbor/harbor
#cp harbor.yml.tmpl harbor.yml
#vi harbor.yml
更改如下标红部分
以及启用chart包功能,在这个配置文件的105行附近
②准备
③安装
#./install.sh --with-chartmuseum
这里完成之后就可以使用浏览器就行登录访问了,域名或者IP都可以,一般搞到这里就可以了
https://computer01.dyk01.com
https://172.32.73.200
!!!但是TCA的Taznu集群使用Harbor是需要使用docker login方式登录才行!!!
使用docker login登录刚开始会出现很多报错,在步骤四解决后才可以正常使用docker login登录了
四、docker login报错处理
①报错Error response from daemon: Get "https://172.32.73.200/v2/": x509: cannot validate certificate for 172.32.73.200 because it doesn't contain any IP SANs
步骤一第④步中解决,更改openssl配置文件
②报错Error response from daemon: Get "https://linux03.dyk01.com/v2/": x509: certificate signed by unknown authority
步骤一第④步中解决,保持环境中设备时间一致
③使用docker login命令登录报错连接拒绝
Error reponse from daemon: Get "htttps://computer01.dyk01.com/v2/": dial tcp 172.32.73.200:443: connect: connection refuesd
在步骤五解决(后来发现通过拷贝证书的方式也能解决,但是Vmware Tanzu集群里那么多集群,不知道考给谁,所以还是通过更改Harbor服务端配置的方式)
五、添加docker对私有仓库的支持
①在docker server启动的时候,增加启动参数
#vi /usr/lib/systemd/system/docker.service
--insecure-registry linux03.dyk01.com
②更改docker配置
#vi /etc/docker/daemon.json
{
"insecure-registries":["linux03.dyk01.com"]
}
③重启docker 服务
#systemctl daemon-reload
#systemctl restart docker
#docker restart $(docker ps -aq)
至此:docker login就可以登录成功了,通过TCA controller对接后,Tanzu k8s集群就可以使用这个这个Harbor上的镜像和chart包了!
参考:
Harbor官方文档:Harbor docs | Configure HTTPS Access to Harbor
Harbor软件包下载地址:https://github.com/goharbor/harbor/releaseshttps://github.com/goharbor/harbor/releases
openSUSE镜像官网:The makers' choice for sysadmins, developers and desktop users.https://www.opensuse.org/
CSDN老哥:他的Linux和我的Linux不一样,遇到的问题和处理方法也不一样