部署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 //修改版本號