• 从harbor部署到在k8s中使用


    一、概述

      harbor是什么呢?英文单词的意思是:港湾。港湾用来存放集装箱(货物的),而docker的由来正是借鉴了集装箱的原理,所以harbor是用于存放docker的镜像,作为镜像仓库使用。官方的说法是:Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。

      harbor镜像仓库是由VMware开源的一款企业级镜像仓库,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制等诸多功能。

    二、harbor安装部署

    1.安装需求

    资源 要求
    CPU minimal 2 CPU
    Mem minimal 4GB
    Disk minimal 40GB
    Python >=2.7 
    Docker engine >=1.10
    Docker Compose >=1.6.0

      

     

     

    2.安装Docker、Docker-Compose

    docker安装

    #软件包安装
    yum install -y yum-utils  device-mapper-persistent-data lvm2
    #添加yum源
    yum-config-manager 
    --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo
    #查看可安装版本
    yum list docker-ce --showduplicates | sort -r
    #安装最新稳定版本docker-ce
    yum install docker-ce -y
    #启动docker
    systemctl start docker
    #查看docker版本
    docker version 

    安装docker-compose

    #安装pip
    
    CentOS:
    yum install epel-release -y
    yum install python-pip -y
    
    Ubuntu:
    apt-get install python-pip -y
    
    #安装docker-compose
    pip install docker-compose 

    3.harbor离线安装

      harbor提供在线安装和离线安装两种方式,官方提供的安装包地址在https://github.com/goharbor/harbor/releases,在线安装包下载Harbor online installer,离线安装下载Harbor offline installer,本教程使用离线方式安装,这里我使用最新版本v1.7.1。

    解压

    tar zxvf harbor-offline-installer-v1.7.1.tgz

    默认情况下解压的目录下会提供harbor.cfg配置文件,修改地方:

    hostname = 10.1.210.33   # 仓库地址,主机IP或者域名
    harbor_admin_password = Harbor12345   # 默认管理员密码

    一些其他常用参数:

    #访问协议,默认是http,也可以设置https,如果设置https
    ui_url_protocol = http
    
    #证书相关配置
    customize_crt = on
    ssl_cert = /data/cert/server.crt
    ssl_cert_key = /data/cert/server.key
    secretkey_path = /data
    admiral_url = NA
    
    # 邮件配置,发送重置密码邮件时使用
    email_identity = 
    email_server = smtp.mydomain.com
    email_server_port = 25
    email_username = sample_admin@mydomain.com
    email_password = abc
    email_from = admin <sample_admin@mydomain.com>
    email_ssl = false
    
    
    # 认证方式,这里支持多种认证方式,如LADP、数据库认证,也可以在web控制台修改
    auth_mode = db_auth
    
    # LDAP认证时配置
    #ldap_url = ldaps://ldap.mydomain.com
    #ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
    #ldap_search_pwd = password
    #ldap_basedn = ou=people,dc=mydomain,dc=com
    #ldap_filter = (objectClass=person)
    #ldap_uid = uid 
    #ldap_scope = 3 
    #ldap_timeout = 5
    
    # 是否开启自注册
    self_registration = on
    
    # Token有效时间,默认30分钟
    token_expiration = 30
    
    # 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
    project_creation_restriction = everyone
    
    #更多参考:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

    安装:

    [root@master harbor]# ./install.sh 
    
    [Step 0]: checking installation environment ...
    
    Note: docker version: 18.09.1
    /usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.24.1) or chardet (2.2.1) doesn't match a supported version!
      RequestsDependencyWarning)
    
    Note: docker-compose version: 1.23.2

    查看其安装组件

    [root@master harbor]# docker-compose ps
    
           Name                     Command                  State                                    Ports                              
    -------------------------------------------------------------------------------------------------------------------------------------
    harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
    harbor-core          /harbor/start.sh                 Up (healthy)                                                                   
    harbor-db            /entrypoint.sh postgres          Up (healthy)   5432/tcp                                                        
    harbor-jobservice    /harbor/start.sh                 Up                                                                             
    harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
    harbor-portal        nginx -g daemon off;             Up (healthy)   80/tcp                                                          
    nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
    redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
    registry             /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp                                                        
    registryctl          /harbor/start.sh                 Up (healthy)               

    登陆hostname中修改的地址,即可登陆到harbor,如果你配置的是域名,请修改host文件,默认登陆用户名密码是:admin/Harbor12345

    4.Harbor的架构

      从安装组件我们可以看出harbor主要依靠以下几个组件:

    • Nginx(Proxy):用于代理Harbor的registry,UI, token等服务。
    • db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
    • UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
    • jobsevice:负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
    • Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
    • Registry:原生的docker镜像仓库,负责存储镜像文件。
    • Log:为了帮助监控Harbor运行,负责收集其他组件的log,记录到syslog中。

    三、上传镜像

    配置docker信任仓库地址

      docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的都会报错。

     vi /etc/docker/daemon.json 
    
    #修改为
    {"registry-mirrors": ["http://a58c8480.m.daocloud.io"],
    "insecure-registries": ["10.1.210.33"]}
    
    
    #重启docker
    systemctl restart docker

    新建项目

      默认harbor只有一个公共的library项目,该项目的权限和docker hub一样不需要认证就可以拉取镜像,所以在实际的使用需要有权限认证的,这里新建立项目project1:

    上传镜像 

    上传镜像之前需要登陆认证,使用docker login

    查看本地镜像:

    docker images

    给要推送的镜像打tag(这里一nginx镜像为例子),可以使用docker tag --help查看使用方式

    docker tag nginx:latest 10.1.210.33/project1/nginx:latest

    推送镜像

    docker push 10.1.210.33/project1/nginx:latest

    到project1下会看到该镜像,并且下载次数是0

    四、在k8s中使用harbor仓库 

    修改每个node上的docker认证仓库

      将每个node节点上的docker同样需要配置可信任仓库

    vi /etc/docker/daemon.json 
    
    #修改为
    {"registry-mirrors": ["http://a58c8480.m.daocloud.io"],
    "insecure-registries": ["10.1.210.33"]}
    
    
    #重启docker
    systemctl restart docker

    创建认证secret

      由于harbor采用了用户名密码认证,所以在镜像下载时需要配置sercet

    #创建
    kubectl create secret docker-registry registry-secret --namespace=default  
    --docker-server=10.1.210.33 
    --docker-username=admin 
    --docker-password=Harbor12345 
    
    
    #查看secret
    [root@master demo]# kubectl get secret
    NAME                  TYPE                                  DATA   AGE
    default-token-gdwgn   kubernetes.io/service-account-token   3      2d18h
    registry-secret       kubernetes.io/dockerconfigjson        1      116s
    
    #删除
    kubectl delete secret registry-secret

    部署示例

    以一个部署一个nginx为例子,其中需要把containers中的images镜像指定为harbor仓库镜像地址,并且使用创建的的secret。

    # kubectl create -f nginx.yml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels: 
        appname: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
            appname: nginx
      template:
        metadata:
          labels:
            appname: nginx
        spec:
          containers:
          - name: nginx
            image: 10.1.210.33/project1/nginx:latest  #镜像地址
            ports:
              - containerPort: 80
          imagePullSecrets:        #使用的secret
           - name: registry-secret 

    查看pod

    查看pod镜像拉去日志,可发现使用的是harbor仓库。

    ref:

    https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

    https://blog.csdn.net/u010278923/article/details/77941995 

    https://kubernetes.io/docs/concepts/containers/images/

  • 相关阅读:
    小编见过的验证方式汇总
    Burp Suite Professional 针对APP抓包篡改数据提交【安全】
    关于Chrome 67 以后版本无法离线安装扩展的解决方法
    Postman 中上传图片的接口怎么做参数化呢?
    字符串-不同的编码格式下所占用的字节数【转】
    Java RandomAccessFile用法 【转】
    URI和URL的区别 【转】
    Java多线程-线程的同步与锁【转】
    浅谈Java多线程的同步问题 【转】
    Java中浮点数的精度问题 【转】
  • 原文地址:https://www.cnblogs.com/wdliu/p/10250385.html
Copyright © 2020-2023  润新知