搭建企业级私有仓库Harbor

安装需求

python版本 >= 2.7

Docker引擎版本 >= 1.10

docker-compose版本 >= 1.6.0

安装环境

一、Python安装

  1. yum -y install python3

二、Docker上章节中已经安装,不再赘述

三、docker-compose安装

  1. curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose

四、Harbor安装

  1. ## 因为docker 默认不允许http 方式推送镜像,所以要修改docker配置文件,添加以下行,每个k8s节点都要做
  2. vim /etc/docker/daemon.json
  3. ...
    {
  4.   "insecure-registries": ["https://hub.vfancloud.com"]
  5. }
    ...
  6.  
  7. ## 每个节点的hosts文件也必须添加此解析,包括你将要访问的windows主机
  8. vim /etc/hosts
  9. ...
  10. 192.168.152.252 hub.vfancloud.com
  11. ...
  12.  
  13. ## 下载harbor,curl和wget都太慢,直接迅雷下的,然后上传到服务器
  14. curl -L https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-offline-installer-v1.10.2.tgz -o /usr/local/harbor-offline-installer-v1.10.2.tgz
  15.  
  16. ## 解压,编辑配置文件
  17. tar xvf harbor-offline-installer-v1.10.2.tgz
  18. cd harbor/
  19. vim harbor.yml
  20. ...
  21. hostname: hub.vfancloud.com #域名
  22. http: #协议及端口,若开启了https,则将http自动转发至https
  23. port:
  24.  
  25. https:
  26. port:
  27. # The path of cert and key files for nginx
  28. certificate: /data/cert/server.crt #证书位置
  29. private_key: /data/cert/server.key #私钥位置
  30.  
  31. database: #数据库密码,可以修改
  32. password: root123
  33.  
  34. harbor_admin_password: Harbor12345 #harbor的admin密码
  35. ...
  36.  
  37. —————————————— 生成局域网证书 —————————————————
  38. [root@kubenode2 ~]# mkdir -p /data/cert
  39. [root@kubenode2 ~]# cd /data/cert/
  40. # 生成私钥
  41. [root@kubenode2 cert]# openssl genrsa -des3 -out server.key
  42. Generating RSA private key, bit long modulus ( primes)
  43. .....................................+++++
  44. ...........................+++++
  45. e is (0x010001)
  46. Enter pass phrase for server.key: 填写密码
  47. Verifying - Enter pass phrase for server.key: 确认密码
  48.  
  49. # 创建csr证书请求
  50. [root@kubenode2 cert]# openssl req -new -key server.key -out server.csr
  51. Enter pass phrase for server.key:
  52. You are about to be asked to enter information that will be incorporated
  53. into your certificate request.
  54. What you are about to enter is what is called a Distinguished Name or a DN.
  55. There are quite a few fields but you can leave some blank
  56. For some fields there will be a default value,
  57. If you enter '.', the field will be left blank.
  58. -----
  59. Country Name ( letter code) [XX]:CN
  60. State or Province Name (full name) []:BJ
  61. Locality Name (eg, city) [Default City]:BJ
  62. Organization Name (eg, company) [Default Company Ltd]:vfancloud
  63. Organizational Unit Name (eg, section) []:vfancloud
  64. Common Name (eg, your name or your server's hostname) []:hub.vfancloud.com
  65. Email Address []:vfan8991@.com
  66. Please enter the following 'extra' attributes
  67. to be sent with your certificate request
  68. A challenge password []:
  69. An optional company name []:
  70.  
  71. # 去除私钥的连接密码,harbor是以Nginx当前端,若不去掉密码,则会请求https失败
  72. [root@kubenode2 cert]# cp server.key server.key.org
  73. [root@kubenode2 cert]# openssl rsa -in server.key.org -out server.key
  74. Enter pass phrase for server.key.org: 输入私钥密码
  75. writing RSA key 去除成功
  76.  
  77. # 证书签名
  78. [root@kubenode2 cert]# openssl x509 -req -days -in server.csr -signkey server.key -out server.crt
  79. Signature ok
  80. subject=C = CN, ST = BJ, L = BJ, O = vfancloud, OU = vfancloud, CN = hub.vfancloud.com, emailAddress = vfan8991@.com
  81. Getting Private key 签名成功
  82.  
  83. # 赋予执行权限
  84. [root@kubenode2 cert]# chmod +x ./*
  85. ————————————————— 证书生成完毕 —————————————————
  86.  
  87. [root@kubenode2 harbor]# ./install.sh
  88. ----Harbor has been installed and started successfully.----
  89.  
  90. [root@kubenode2 harbor]# docker ps
  91. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  92. 1dcd38feb29d goharbor/nginx-photon:v1.10.2 "nginx -g 'daemon of" 34 seconds ago Up 32 seconds (healthy) 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp nginx
  93. 063509e49573 goharbor/harbor-jobservice:v1.10.2 "/harbor/harbor_jobs" 34 seconds ago Up 32 seconds (healthy) harbor-jobservice
  94. 1c37e61f9479 goharbor/harbor-core:v1.10.2 "/harbor/harbor_core" 35 seconds ago Up 28 seconds (health: starting) harbor-core
  95. cf7e7bd46982 goharbor/registry-photon:v1.10.2 "/home/harbor/entryp" 39 seconds ago Up 35 seconds (healthy) 5000/tcp registry
  96. 977f5ca9214a goharbor/redis-photon:v1.10.2 "redis-server /etc/r" 39 seconds ago Up 35 seconds (healthy) 6379/tcp redis
  97. 86fdcb7b988b goharbor/harbor-registryctl:v1.10.2 "/home/harbor/start.…" 39 seconds ago Up 35 seconds (healthy) registryctl
  98. 8fc55f981c54 goharbor/harbor-db:v1.10.2 "/docker-entrypoint.…" 39 seconds ago Up 35 seconds (healthy) 5432/tcp harbor-db
  99. 10057d8629a0 goharbor/harbor-portal:v1.10.2 "nginx -g 'daemon of…" 39 seconds ago Up 35 seconds (healthy) 8080/tcp harbor-portal
  100. 8485731461d8 goharbor/harbor-log:v1.10.2 "/bin/sh -c /usr/loc…" 40 seconds ago Up 38 seconds (healthy) 127.0.0.1:1514->10514/tcp harbor-log

测试访问Harbor

1、浏览器输入:https://hub.vfancloud.com/

2、登录,账号为admin,密码为harbor.yml中的 harbor_admin_password 的值

3、可以自己创建一些用户,或者上传一些镜像等

新建Pod测试

  1. ## 首先docker login登录仓库

[root@Centos8 rbac]# docker login hub.vfancloud.com
  Username: admin
  Password:

  1. ## 启动一个deployment
  2. [root@Centos8 ~]# kubectl run nginx-deployment --image=hub.vfancloud.com/test/myapp:v1 --port= --replicas=
  3. kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
  4. deployment.apps/nginx-deployment created
  5.  
  6. ## 查看deployment
  7. [root@Centos8 ~]# kubectl get deployment
  8. NAME READY UP-TO-DATE AVAILABLE AGE
  9. nginx-deployment / 8s
  10.  
  11. ## 新建一个deployment会自动创建一个rs
  12. [root@Centos8 ~]# kubectl get rs
  13. NAME DESIRED CURRENT READY AGE
  14. nginx-deployment-5bc446d899 74s
  15.  
  16. ## 再来查看pod
  17. [root@Centos8 ~]# kubectl get pod -o wide
  18. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  19. nginx-deployment-5bc446d899-ndd57 / Running 81s 10.244.3.6 testcentos7 <none> <none>
  20.  
  21. ## 测试访问
  22. [root@Centos8 ~]# curl 10.244.3.6
  23. Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
  24. [root@Centos8 ~]# curl 10.244.3.6/hostname.html
  25. nginx-deployment-5bc446d899-ndd57
  26.  
  27. ## 添加副本数
  28. [root@Centos8 ~]# kubectl scale --replicas= deployment/nginx-deployment
  29. deployment.extensions/nginx-deployment scaled
  30. [root@Centos8 ~]# kubectl get pod -o wide
  31. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  32. nginx-deployment-5bc446d899-jsgvf / Running 37s 10.244.3.7 testcentos7 <none> <none>
  33. nginx-deployment-5bc446d899-lbsfp / ContainerCreating 7m32s <none> kubenode2 <none> <none>
  34. nginx-deployment-5bc446d899-v2lrx / ContainerCreating 37s <none> kubenode2 <none> <none>
  35.  
  36. ## 创建svc,实现自动的负载均衡
  37. [root@Centos8 ~]# kubectl expose deployment nginx-deployment --port= --target-port=
  38. service/nginx-deployment exposed
  39.  
  40. [root@Centos8 ~]# kubectl get svc
  41. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  42. kubernetes ClusterIP 10.96.0.1 <none> /TCP 4d17h
  43. nginx-deployment ClusterIP 10.96.14.172 <none> /TCP 7s
  44.  
  45. [root@Centos8 ~]# curl 10.96.14.172:/hostname.html
  46. nginx-deployment-78d674b868-mqkqf
  47. [root@Centos8 ~]# curl 10.96.14.172:/hostname.html
  48. nginx-deployment-78d674b868-8jdhl
  49. [root@Centos8 ~]# curl 10.96.14.172:/hostname.html
  50. nginx-deployment-78d674b868-jcd42
  51.  
  52. ## 可以使用ipvsadm -Ln来查看当前负载的ip地址
  53. [root@Centos8 ~]# ipvsadm -Ln
  54. TCP 10.96.14.172: rr
  55. -> 10.244.3.12: Masq
  56. -> 10.244.3.13: Masq
  57. -> 10.244.3.14: Masq

测试外网访问

  1. ##修改svc TYPE,实现可以外网访问
  2. [root@Centos8 ~]# kubectl edit svc nginx-deployment
  3. service/nginx-deployment edited
  4.  
  5. [root@Centos8 ~]# grep type /tmp/kubectl-edit-1h3zf.yaml
  6. type: NodePort #修改此行
  7.  
  8. ## 查看TYPE 已经修改为nodeport
  9. [root@Centos8 ~]# kubectl get svc
  10. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  11. kubernetes ClusterIP 10.96.0.1 <none> /TCP 3d17h
  12. nginx-deployment NodePort 10.97.134.6 <none> :/TCP 16m
  13.  
  14. ## 修改完毕后,进入外网进行测试访问,还是访问不到,后来得知为iptables规则问题
  15. ## 将 FORWARD 链放行即可
  16. [root@Centos8 ~]# iptables -P FORWARD ACCEPT
  17.  
  18. ## 测试访问
  19. [root@Centos8 ~]# curl 192.168.152.53:
  20. Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

Kubernetes-5:搭建企业级私有仓库Harbor的更多相关文章

  1. 使用docker搭建“企业级镜像仓库”Harbor

    一.前沿 docker的官方镜像仓库registry,功能比较单一,不太好用,特别是删除镜像操作,不够友好. Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一 ...

  2. Docker学习笔记六:Docker搭建企业级私有仓库

    前言 Docker不仅是一个强大的服务器部署工具,而且它还有一个官方的Docker Hub registry用于储存Docker镜像.上传镜像到Docker Hub是免费的,上传的镜像文件同时也对公共 ...

  3. Docker:企业级私有仓库harbor[十六]

    一.安装配置 1.下载安装包 链接:https://pan.baidu.com/s/1Z9I7zYXSt-8ve3lFT2YCeg 提取码:iuqj 2.安装docker和docker-compose ...

  4. 企业级镜像仓库harbor搭建

    企业级镜像仓库harbor搭建 一.    Harbor概述 VMware公司最近开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服 ...

  5. 菜鸟系列docker——搭建私有仓库harbor(6)

    docker 搭建私有仓库harbor 1. 准备条件 安装docker sudo yum update sudo yum install -y yum-utils device-mapper-per ...

  6. Kubernets二进制安装(5)之私有仓库harbor搭建

    在IP地址为192.168.80.50,机器名为mfyxw50上搭建私有仓库harbor harbor下载地址: harbor下载连接地址:https://github.com/goharbor/ha ...

  7. Docker: 企业级镜像仓库Harbor的使用

    上一节,演示了Harbor的安装部署 这次我们来讲解 Harbor的使用. 我们需要了解到: 1. 如何推镜像到镜像仓库 2. 如何从镜像仓库拉取镜像 3. 如何运行从私有仓库拉取的镜像 # 查看 h ...

  8. 一步步搭建docker私有仓库并从私有仓库中下载镜像

    一步步搭建docker私有仓库 #下载镜像 docker pull registry#查看镜像 docker images #运行私有仓库,指定端口和数据卷 docker run -d -p : -v ...

  9. 搭建docker私有仓库

    保存镜像的地方成为仓库(registry).目前有2种仓库:公共仓库和私有仓库. 最方便的是使用公共仓库上传和下载镜像,下载不需要注册,上传需要到公共仓库注册.公共仓库网站:https://hub.d ...

随机推荐

  1. JS学习第六天

    匿名函数: 定义:function(参数列表){ 要执行的语句块: } 定义名(): 创建日期对象:Date var date=new Date(); alert(date);  不输入则是默认月,日 ...

  2. 关于在Visual Studio 2019预览版中的用户体验和界面的变化

    原文地址:https://blogs.msdn.microsoft.com/visualstudio/2018/11/12/a-preview-of-ux-and-ui-changes-in-visu ...

  3. Scss 定义内层class的简单写法

    如果定义样式的时候,内层样式名称和外层保持一致的话可以简写如下 如果一个样式下有相关的其他样式可以使用 &-xxx 来简写, <template> <div class=&q ...

  4. Linux学习笔记 一 第一章 Linux 系统简介

    Linux简介 一.UNIX与Linux发展史

  5. pygame绘制背景

    import pygame pygame.init() screen = pygame.display.set_mode((640,480)) # ------- background ------- ...

  6. Python 函数为什么会默认返回 None?

    Python 有一项默认的做法,很多编程语言都没有--它的所有函数都会有一个返回值,不管你有没有写 return 语句. 本文出自"Python为什么"系列,在正式开始之前,我们就 ...

  7. 【ZJOI2007】棋盘制作 - 悬线法

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 \(8 \times 8\) 大小的黑白相间的方阵,对应八八六十四卦 ...

  8. Kubernetes 的层级命名空间介绍

    原文链接:https://fuckcloudnative.io/posts/introducing-hierarchical-namespaces/ 在单个 Kubernetes 集群上安全托管大量用 ...

  9. JavaScript 空间坐标

    基础知识 首先参考画布分为视口(窗口)与文档的含义 网页很多都是多屏,所以文档尺寸一般大于视口尺寸 视口尺寸不包括浏览器工具条.菜单.标签.状态栏等 当打开控制台后,视口尺寸相应变小 文档像posit ...

  10. (转)文件上传org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed

    文件上传时,tomcat报错org.springframework.web.multipart.MultipartException: Failed to parse multipart servle ...