部署harbornode
在kubernetes中使用harborlinux
harbor是一个离线的镜像,最终会造成一个容器,跑起来。而咱们把这个容器做为咱们的仓库。只不过部署的时候使用docker-composenginx
cs架构,须要搭建一个服务器git
咱们要在k8s中使用这个harbor,好比我要建立一个pod,那这个pod引用的images就是从harbor这下载的。github
(第9步骤开始)那此时你要在k8s中使用这个harbor,要在k8s中建立一个安全机制,让这些node节点知道这个harbor是谁,而且要知道harbor的用户及密码是谁web
Habor是由VMWare中国团队开源的容器镜像仓库。支持web浏览。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而得到了更加普遍的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,水平扩展,同步,AD/LDAP集成以及docker
审计日志等。vim
一. 手动部署harborapi
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 #执行此步骤就能够将镜像推上去了
扩展: 镜像复制,参考 https://blog.csdn.net/aixiaoyang168/article/details/73549898
问题: 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 //修改版本号