部署harbor

在kubernetes中使用harbor

 

 

 

 

harbor是一个离线的镜像,最终会形成一个容器,跑起来。而我们把这个容器作为我们的仓库。只不过部署的时候使用docker-compose

cs架构,需要搭建一个服务器

我们要在k8s中使用这个harbor,比如我要创建一个pod,那这个pod引用的images就是从harbor这下载的。

(第9步骤开始)那此时你要在k8s中使用这个harbor,要在k8s中创建一个安全机制,让这些node节点知道这个harbor是谁,并且要知道harbor的用户及密码是谁

Habor是由VMWare中国团队开源的容器镜像仓库。支持web浏览。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,水平扩展,同步,AD/LDAP集成以及

审计日志等。

一. 手动部署harbor

1. 下载最新的docker-compose二进制文件

# curl -L https://github.com/docker/compose/releases/download/1.22.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose

# chmod +x /usr/bin/docker-compose

2. 下载harbor离线安装包

github地址 https://github.com/goharbor/harbor/releases #下载的是1.6的

# wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc3.tgz #linux上下载太慢了。去浏览器上下载1.6的

# tar zxvf harbor-offline-installer-v1.6.0-rc3.tgz

3. 准备ca证书(建议大家购买一个便宜的域名,并去申请一个免费的ssl证书)

如果不想购买域名,那就自己手动生成ca证书吧,可以参考这个文档

(https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/key.md )

免费ssl证书 https://freessl.org/

在安装他之前要准备一套ca证书。在这有提供一个harbor.yuankedeu.com这个域名的证书(链接:https://pan.baidu.com/s/1FWNWKaGmo9jUql9cgo-1PQ 提取码:e4oh),可以直接用,下载这个包,里面有key文件还有crt文件。如果想用自己的域名,就去购买一个便宜的域名,到 https://freessl.org/去申请一个免费的ca证书(可以用一年)。线上的话更定是要购买合格的证书

不想购买就手动生成去(参考上面那个链接文档手动生成ca证书),但是这种不合规,访问的时候需要让浏览器把它加入白名单,才可以正常访问

 

4. 安装harbor

# cd harbor

编辑配置文件

# vim harbor.cfg

1)定义hostname(如 harbor.yuankeedu.com)

2)定义ui_url_protocol为https

3)定义ssl_cert/ssl_key

4)定义harbor_admin_password

安装

# sh install.sh //自动安装完成

#docker-compose down 可以将全部的容器关闭

#docker-compose up -d 将全部的容器开启,-d后台启动

5. 访问

https://harbor.yuankeedu.com #要写host,后者访问ip

admin 默认密码为 Harbor12345 #实验中修改的密码为Harbor-abc1

6. 创建项目

会在这个项目了添加一个镜像,把这个镜像搞过来

7. 拉取公共镜像

docker pull tomcat

docker tag tomcat harbor.yuankeedu.com/aminglinux/tomcat:latest #axin实验的时候需要执行这一步才可以

8. 把tomcat镜像推送到harbor

# docker login https://harbor.yuankeedu.com

输入用户名和密码

# docker push harbor.yuankeedu.com/aminglinux/tomcat:latest #执行此步骤就可以将镜像推上去了

扩展: 镜像复制,参考

问题: x509: certificate signed by unknown authority

1) echo -n | openssl s_client -showcerts -connect harbor.yuankeedu.com:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> /etc/ssl/certs/ca-bundle.trust.crt

2)systemctl restart docker

3)docker-compose up -d

如果以上步骤无法解决该问题,尝试使用以下步骤:

# mkdir -p /etc/docker/certs.d/harbor.yuankeedu.com

# vim /etc/docker/certs.d/harbor.yuankeedu.com/ca.crt //内容如下(注意,这个只针对harbor.yuankedu.com域名的,这个其实就是免费的ca证书压缩包里的ca文件内容)

-----BEGIN CERTIFICATE-----

MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh

MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3

d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD

QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO

MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL

ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS

U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8

Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa

e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO

JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA

zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK

ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe

3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K

AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD

AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG

AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au

ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj

ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg

hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t

L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233

lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ

DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP

ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F

UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C

qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY

RmE=

# chmod 400 /etc/docker/certs.d/harbor.yuankeedu.com/ca.crt

# systemctl restart docker

 

 

二. 在kubernetes中使用harbor

9. 在kubernetes中使用harbor

以下操作在master上执行:

1)创建secret #可理解为存放密码的媒介,我们可以把harbor对应的用户名和密码存放在这个里面,之后我们所有的节点就都可以使用用户名和密码了

# kubectl create secret docker-registry my-secret --docker-server=harbor.yuankeedu.com --dockerusername=admin --docker-password=Harbor12345 #my-secret名字自定义

创建完成后,可以用以下命令查看:

# kubectl get secret

2)定义一个pod

首先,需要在harbo私有仓库里推送一个httpd的镜像,地址为harbor.yuankeedu.com/aminglinux/httpd:latest

# docker pull httpd #提前推到harbor上去,好下一步引用下载地址

# docker tag httpd harbor.yuankeedu.com/aminglinux/httpd:latest

# docker login https://harbor.yuankeedu.com

# docker push

然后再定义yaml文件

# vim httpd.yaml //内容如下

apiVersion: v1

kind: Pod

metadata:

name: httpd-pod

spec:

containers:

- image: harbor.yuankeedu.com/aminglinux/httpd:latest #此处的下载地址就是harbor

name: httpd-pod

imagePullSecrets: #在这就引用了secret,此处如果不引用。上面的images是没办法下载的

- name: my-secret

# kubectl create -f httpd.yaml

# kubectl describe pod httpd-pod //查看pod创建过程的信息,可能会存在问题

如果创建pod的时候依然出现509的错误,是因为在分配节点的时候,这个几点上并没有认证证书,就是第8步骤,ca文件要写入到哪个文件里去。所以要在所有的节点上,认证ca证书

总结:

首先要创建secret(登记harbor服务器地址、用户名、密码。可创建多个)

然后创建pod(或者创建rc或者deploy)的时候,指定这个参数(对应的用户的secret)

 

二. 利用kubeasz项目部署(1.6.0版本的harbor并未实验成功,大家可以尝试做一下)

1)下载docker-compose二进制文件,改名后把它放到项目/etc/ansible/bin/目录下

wget https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64

mv docker-compose-Linux-x86_64 /etc/ansible/bin/docker-compose

2)下载habor安装文件

github地址 https://github.com/goharbor/harbor/releases

wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc3.tgz

3)由于ansible解压的一些问题,需要将官方的tgz包,重新打包为zip包

tar zxf harbor-offline-installer-v1.6.0-rc3.tgz

zip -r harbor-offline-installer-v1.6.0-rc3.zip harbor

mv harbor-offline-installer-v1.6.0-rc3.zip /etc/ansible/down/harbor-offline-installer-v1.6.0.zip

4)在deploy节点编辑/etc/ansible/hosts文件

5)在deploy节点执行

vim /etc/ansible/roles/harbor/defaults/main.yml //修改版本号