热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kubernetes实战篇之nexusoss服务器部署及基于nexus的docker镜像仓库搭建

"系列目录"Nexusoss仓库管理平台搭建Nexus是一款仓库管理工具,支持Npm,bower,maven,nuget,apt,yum甚至do

系列目录

Nexus oss仓库管理平台搭建

Nexus是一款仓库管理工具,支持Npm,bower,maven,nuget,apt,yum甚至docker,helm等各种仓库,说的通俗以下,就是私服镜像仓库.并且有免费版,OSS版即为免费版,下载的时候请注意版本的选择.

下载地址

往下面滚动页面,可以看到Choose your Nexus,有osx,windows和unix版本可供选择.这里我选择的是windows版本.

下载的内容是一个压缩包,下载完成后把压缩包解压.解压后有两个文件夹,我们进入nexus-3.x.x文件夹下的bin目录,我们在当前目录下打开cmd或者从任意位置打开cmd,然后cd到上述目录.执行nexus.exe /run来安装nexus

注册服务

安装完成以后,执行nexus.exe /install Nexus Service来注册服务

启动服务

执行命令nexus.exe /start Nexus Service来启动服务

通过以上操作,实际上是往windows服务里面添加了一个名字叫作nexus service的服务,我们可以通过powerhsell命令Get-Service "nexus service"来找到这个服务,通过Restart-Service "nexus service"来重启它.

以上执行完成以后,就可以通过打开浏览器,输入localhost:8081来访问它,也可以通过其它局域网主机使用IP:8081方式来访问它.

img

通过首页,我们可以看到Nexus罗列出来的支持的仓库类型,非常丰富.

注意,大家可能看到我访问的端口号并不是8081而是8443,这是因为我设置的http自动跳转到https,并且指定的https端口为8443,这里之所以要启用https是因为下面即将讲到的docker镜像上传需要使用https.这部分内容将在下一节讲解.

登陆

注意,如果没有登陆,Nexus并不是以显著的方式提示你登陆,但是非登陆用户功能受限.要想实现一些管理功能,必须登陆.登陆需要点击右上角sign in按钮.默认登陆用户名为admin密码为admin123.

Nexus搭建docker镜像仓库

上一节我们讲了如何在windows下安装nexus,本节我们讲解如何来搭建nexus来搭建docker镜像仓库.

我们进入web管理界面,点击齿轮图标,然后点击Repositories.如下图示

img

注意,以上操作需要登陆.登陆方式为点击右上角sign in,然后用默认admin,admin123登陆.详细请见上一节内容

然后点击create repository按钮.如下图操作

img

页面出来了非常多的仓库类型供选择,由于我们要创建的是docker仓库,这里选择的是docker hosted

img

点击后出现如下界面

img

配置上面填写的内容,填写完成后我们点击左下角create repository来创建仓库

nexus服务器支持https配置

由于我们使用的是https方式通讯,因此我们需要对nexus服务器进行配置,以支持https.由于我们的证书是自己生成的,因此docker客户端也需添加对自己生成key的信任.

服务端开启监听ssl协议端口

进到nexus-xxx-xxx目录下(前面一节提到的从官网下载的nexus压缩包解压后的一个目录),进到ect目录下,里面有一个nexus-default.properties文件,用文本编辑器打开它

# Jetty section注释下面添加一行,内容为application-port-ssl=8443

nexus-args一行尾部添加,${jetty.etc}/jetty-http-redirect-to-https.xml,以指示服务器自动将http跳转到https

生成证书秘钥

网上有很多生成密码证书的博客文章,使用的工具也不尽相同.这里,我们使用java jkd自带的keytool.exe来生成ssl证书.

进入到nexus-xxx-xxx目录下的ect/ssl目录下,执行以下命令:

keytool -genkeypair -keystore keystore.jks -storepass nexus3 -keypass nexus3 -alias jetty -keyalg RSA -keysize 2048 -validity 5000 -dname "CN=${NEXUS_DOMAIN}, OU=Example, O=Sonatype, L=Unspecified, ST=Unspecified, C=US" -ext "SAN=DNS:${NEXUS_DOMAIN},IP:${NEXUS_IP_ADDRESS}" -ext "BC=ca:true"

其中${NEXUS_IP_ADDRESS}替换为你的实际ip地址,${NEXUS_DOMAIN}如果没有域名可以随便填写

需要注意的是,如果由于环境变量配置问题导致keytool命令找不到,则需要显式指定keytool.exe完整路径,然后后面带上要执行的命令.

修改jetty-https.xml

进入到nexus-xxx-xxx目录下的etc/jetty目录下,用文本编辑器打开jetty-https.xml文件

把里面对应的内容修改为如下配置:

    /ssl/keystore.jks
    nexus3
    nexus3
    /ssl/keystore.jks
    nexus3

注意以上内容全是修改,而不是新增,修改的时候找到相同key的修改即可.

重启nexus服务器

可以通过上一节介绍的powershell命令Restart-Service "nexus service来重启服务,以使配置生效.

需要注意的是,执行以上命令需要以管理员身份启动powershell.除了使用命令以外,也可以进入到服务管理里面找到名为nexus service的服务,然后手动重启它.

执行完以上配置以后,我们再打开浏览器访问https://..localhost:8443或者http://localhost:8081

注意,重启服务以后,如果以上内容不能马上响应,可以等一会时间再观察看看.

配置客户端信任ca证书

我的docker服务器安装在192.168.122.65上面.下面介绍centos和ubuntu下如何添加证书信任

centos下添加证书信任

#生成cert文件
[root@localhost ~]# keytool -printcert -sslserver 192.168.124.43:8443 -rfc >nexus.crt
[root@localhost ~]# yum install ca-certificates
[root@localhost ~]# update-ca-trust force-enable
# 还可以放在/etc/docker/certs.d/192.168.124.43:8443目录下
[root@localhost ~]# mv nexus.crt /etc/pki/ca-trust/source/anchors/nexus.crt
[root@localhost ~]# update-ca-trust
[root@localhost ~]# service docker restart
[root@localhost ~]# docker login -u admin -p admin123 192.168.124.43:8002
Login Succeeded

ubuntu下添加信任证书

对于Ubuntu系统来说certificate的存放路径是 /usr/local/share/ca-certificates


### 生成cert文件
[root@localhost ~]# keytool -printcert -sslserver 192.168.124.43:8443 -rfc >nexus.crt
# 还可以放在/etc/docker/certs.d/192.168.124.43:8443目录下
[root@localhost ~]# mv nexus.crt /usr/local/share/ca-certificates/nexus.crt
[root@localhost ~]# update-ca-certificates
[root@localhost ~]# service docker restart
[root@localhost ~]# docker login -u admin -p admin123 192.168.124.43:8002

在redhat系统中,如果报Unkonw authority错误,修改/etc/pki/tls/openssl.cnf。在其中的[ v3_ca]部分,添加subjectAltName选项

[ v3_ca ]  
subjectAltName = IP:192.168.124.43

然后再执行以下命令

[root@localhost ~]# service docker restart
[root@localhost ~]# docker login -u admin -p admin123 192.168.124.43:8002
Login Succeeded

注,网上有不少介绍使用http访问的方法,但是却没有执行成功,大家可以尝试一下

[root@localhost centos]# vi /etc/docker/daemon.json
{
  "insecure-registries": [
    "192.168.124.43:8003"
  ],
  "disable-legacy-registry": true

上传镜像到docker仓库

  • 为镜像打标签
docker tag 镜像名:tag名 192.168.124.43:8002/镜像名:tag名

我里,我没有自己创建镜像,而是随便找了一个已以存在的镜像,然后打上标签,如下

192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend

通过执行docker push命令把它推到远程私服仓库

[root@localhost ~]# docker push 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend
The push refers to a repository [192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend]
d62604d5d244: Pushed
1.4: digest: sha256:f63ced70bc85ca753e715c93b0adc3115510a6575129102383236c30112379e5 size: 528
[root@localhost ~]#

注意,推送前是需要先登陆的,登陆的方法上面也介绍过了

我们登陆nexus web管理界面,点击左侧Broswe,可以看到已经有内容push进来了

img

我们执行docker search命令

[root@localhost ~]# docker search 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend
NAME                                                                      DESCRIPTION   STARS     OFFICIAL   AUTOMATED
192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend:1.4                 0
[root@localhost ~]#

可以看到能够从远程服务器上搜索到它.

拉取上传的镜像

实际环境中,生成docker镜像和服务器和使用docker镜像的服务器往往不是同一台服务器.这里我们使用另一个服务器192.168.124.59来拉取刚刚上传的镜像

需要注意的是,这里基于的前提是用于拉取镜像的服务器已经安装了docker,docker的安装可以参考其它章节或者网络上的教程

  • 执行keytool -printcert -sslserver 192.168.59.1:8443 -rfc >nexus.crt

  • 执行yum install ca-certificates来安装

-紧接着执行update-ca-trust force-enable

  • 执行mv nexus.crt /etc/pki/ca-trust/source/anchors/nexus.crt

  • 执行update-ca-trust
  • service docker restart
  • 执行login docker login -u admin -p admin123 192.168.124.43:8002

[root@k8s-master ~]# docker login -u admin -p admin123 192.168.124.43:8002
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

然后我们执行docker pull


[root@k8s-master ~]# docker pull 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend:1.4
1.4: Pulling from rancher/nginx-ingress-controller-defaultbackend
5990baa43a5e: Pull complete
Digest: sha256:f63ced70bc85ca753e715c93b0adc3115510a6575129102383236c30112379e5
Status: Downloaded newer image for 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend:1.4
[root@k8s-master ~]#

注意pull的时候要带上版本的tag

以上,我们从一台服务器(192.168.122.65)推送镜像到私服,然后用另一台服务器拉取(192.168.124.59).需要注意的是,由于服务端使用了自已生成的https证书,因此docker镜像生产端和消费端都要添加ca证书信任

参考资料1

参考资料2


推荐阅读
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 持续集成概述与实践指南
    本文探讨了持续集成(CI)的基本概念、目的及其在现代软件开发中的应用。通过实例分析,帮助读者理解如何有效实施持续集成,提高软件开发效率。 ... [详细]
  • 混合云架构在本地与云服务间寻求平衡的有效性探讨
    随着云计算技术的发展,混合多云架构因其灵活性和高效性而备受关注。本文将深入探讨混合多云(简称混合云)如何通过结合本地基础设施与云端资源,为企业提供一个更为平衡且高效的IT解决方案。 ... [详细]
  • 深入探讨配置文件的管理与优化
    尽管配置文件的重要性不言而喻,但其管理和安全性问题却常被忽视。本文将详细讨论配置文件的不同管理策略及其优缺点。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 在拉斯维加斯举行的Interop 2011大会上,Bitcurrent的Alistair Croll发表了一场主题为“如何以云计算的视角进行思考”的演讲。该演讲深入探讨了传统IT思维与云计算思维之间的差异,并提出了在云计算环境下应具备的新思维方式。Croll强调了灵活性、可扩展性和成本效益等关键要素,以及如何通过这些要素来优化企业IT架构和运营。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文深入探讨了Kubernetes中Pod的基础概念及其分类,旨在帮助读者更好地理解和利用这一核心组件。通过详细的解析,我们将了解Pod如何作为最小的部署单元在Kubernetes集群中工作。 ... [详细]
author-avatar
范二小姐儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有