一、搭建信息简介

  • Centos 7.2.1511
  • 系统最小化安装
  • 使用online方式安装harbor
  • https 模式
  • 使用let's Encrypt Authority 注册免费的https证书
  • 配置kubernetes使用harbor私服
    二、申请https证书
    介绍:
    Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。
  • 操作步骤
    #创建文件夹,下载证书注册脚本
    #https://github.com/diafygi/acme-tiny
    cd /home
    git clone https://github.com/diafygi/acme-tiny.git
    cd acme-tiny
    #第一步:
    openssl genrsa 4096 > account.key
    #第二步(1或者2 选一个)
    #1、RSA密钥(兼容性好)
    openssl genrsa 4096 > domain.key
    #2、ECC密钥(部分老旧操作系统、浏览器不支持。优点是证书体积小,任选一个执行)
    #secp256r1
    openssl ecparam -genkey -name secp256r1 | openssl ec -out domain.key
    #secp384r1
    openssl ecparam -genkey -name secp384r1 | openssl ec -out domain.key
    #第三步(编写openssl.cnf文件)
    cat >openssl.cnf<< EOF

    [ req ]
    distinguished_name = req_distinguished_name
    [ req_distinguished_name ]
    [san]
    #输入需要绑定https证书的域名,在"subjectAltName="后输入相关信息,格式为"DNS:xxx.xxx.xxx(域名信息)",多个域名用 , 隔开
    subjectAltName=DNS:1xxx.xxx.xxx,DNS:2xxx.xxx.xxx,DNS:3xxx.xxx.xxx
    EOF
    #第四步
    openssl req -new -sha256 -key domain.key -subj "/" -reqexts san -config openssl.cnf > domain.csr
    #第五(配置域名解析和nginx转发)
    #nginx例子
    mkdir -p /var/×××w/challenges/
    server {
    listen 80;
    #此处可以将所有的域名都写在这里,方便一次性注册
    server_name yoursite.com ×××w.yoursite.com;

    location /.well-known/acme-challenge/ {
    alias /var/×××w/challenges/;
    try_files $uri =404;
    }

    ...the rest of your config
    }
    #确保所有的域名都可以访问到
    #第六步(申请证书)
    python acme_tiny.py --account-key account.key --csr domain.csr --acme-dir /var/×××w/challenges/ > signed.crt || exit
    #第七步(下载中间证书合并)
    wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
    cat signed.crt intermediate.pem > ssl_cert.pem
    #第八步(配置nginx的ssl)
    server {
    listen 443 ssl;
    server_name yoursite.com, ×××w.yoursite.com;

    ssl_certificate /path/to/signed_chain.crt;
    ssl_certificate_key /path/to/domain.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache shared:SSL:50m;
    ssl_dhparam /path/to/server.dhparam;
    ssl_prefer_server_ciphers on;

    ...the rest of your config
    }
    #第九步(配置自动续期)
    #依次执行第六步、第七步
    #编写脚本并加入定时任务即可
    #如果需要新增一个域名,则从第三步开始,把域名增加到openssl.cnf文件中,并在nginx中配置一个可以接收处理该域名的server,然后依次执行下面的步骤

三、配置安装Harbor
#更新系统组件
yum install epel-release -y
yum install lrzsz net-tools vim python python-pip wget ntp openssh yum-utils device-mapper-persistent-data lvm2 -y
#修改主机名
hostnamectl set-hostname harbor
#关闭firewall,安装Iptables
systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services iptables-devel.x86_64 iptables.x86_64
echo "net.ipv4.ip_forward=1">>/etc/sysctl.conf
sysctl -p
#关闭selinux
vim /etc/selinux/config
SELINUX=enforcing 改成 :SELINUX=disabled
#安装docker
#增加docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-stable
yum install docker-ce docker-compose -y
#安装Harbor-v1.5.2(online方式)
cd /home
wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.2.tgz
#ps:如果下载不成功,用电脑浏览器下载,然后上传到指定的目录下去

service docker start
#配置harbor
cd /home
tar -zxvf harbor-online-installer-v1.5.2.tgz
cd harbor
#创建证书文件夹
mkdir -p /data/cert
#使用let's Encrypt Authority 注册免费的https证书(有效期3个月)-步骤略
#使用的文件如下:
xxx.xxx.xxx.key
xxx.xxx.xxx..pem
#intermediate.pem
#将以上文件,拷贝到/data/cert
cp xxx.xxx.xxx* /data/cert
#修改harbor配置文件(只贴出修改部分)
vim harbor.cfg

ui_url_protocol = https
ssl_cert = /data/cert/xxx.xxx.xxx.pem
ssl_cert_key = /data/cert/xxx.xxx.xxx.key
#保存退出
#为Harbor生成配置文件
./prepare
#安装
sh install.sh --with-clair
#chair 是一个镜像扫描工具

docker login harbor.dev.creditwe.com
admin
Harbor12345

四、Kubernetes访问Harbor私服

  • 创建一个secret (加粗部分为自定义名称可以随便起,但是在配置的时候需要使用正确的名称)
  • --docker-server 填写对应的harbor的域名
  • --docker-username 填写harbor的用户名
  • --docker-passwod 填写harbor密码
  • --docker-email 填写mail地址
    kubectl create secret docker-registry regcred --docker-server=xxx.xxx.xxx --docker-username=admin --docker-password=Harbor12345 [email protected]

  • 创建pod的地方修改增加一个参数(贴出关键部分)
    containers:
    • image: harbor.xxx.xxx/application/tomcat:7.0.5


      ** imagePullSecrets:
      • name: regcred**

ps: 更新一下,创建的secret 是需要绑定namespace的,如果不指定,就回创建在默认的namespace里面去,所以,最好在创建的时候,指定一下namespace "-n namespace"
比如 上面的 secret 需要创建在Kube-system的namespace中
kubectl create secret docker-registry regcred --docker-server=xxx.xxx.xxx --docker-username=admin --docker-password=Harbor12345 [email protected] -n kube-system
以上