运维常用工具
Harbor
尽管Docker官方提供了公共的镜像仓库DockerHub,但从安全性和稳定性等方面考虑,部署私有镜像仓库是非常有必要的。Harbor是一个由VMware公司开源的企业级的Docker Registry管理项目,是我们搭建私有镜像仓库的不二之选。
整体架构
如上图所示是 Harbor 2.0 的架构图,从上到下可分为代理层、功能层和数据层。
- 代理层:代理层实质上是一个 Nginx 反向代理,负责接收不同类型的客户端请求,包括浏览器、用户脚本、Docker 等,并根据请求类型和 URI 转发给不同的后端服务进行处理。
- 功能层:
- Portal:是一个基于 Argular 的前端应用,提供 Harbor 用户访问的界面。
- Core:是 Harbor 中的核心组件,封装了 Harbor 绝大部分的业务逻辑。
- JobService:异步任务组件,负责 Harbor 中很多比较耗时的功能,比如 Artifact 复制、扫描、垃圾回收等。
- Docker Distribution:Harbor 通过 Distribution 实现 Artifact 的读写和存取等功能。
- RegistryCtl:Docker Distribution 的控制组件。
- Notary(可选):基于 TUF 提供镜像签名管理的功能。
- 扫描工具(可选):镜像的漏洞检测工具。
- ChartMuseum(可选):提供 API 管理非 OCI 规范的 Helm Chart,随着兼容 OCI 规范的 Helm Chart 在社区上被更广泛地接受,Helm Chart 能以 Artifact 的形式在 Harbor 中存储和管理,不再依赖 ChartMuseum,因此 Harbor 可能会在后续版本中移除对 ChartMuseum 的支持。
- 数据层:
- Redis:主要作为缓存服务存储一些生命周期较短的数据,同时对于 JobService 还提供了类似队列的功能。
- PostgreSQL:存储 Harbor 的应用数据,比如项目信息、用户与项目的关系、管理策略、配置信息、Artifact 的元数据等等。
- Artifact 存储:存储 Artifact 本身的内容,Artiact就是每次推送镜像、Helm Chart 时,数据最终存储的地方。默认情况下,Harbor 会把 Artifact 写入本地文件系统中。用户也可以修改配置,将 Artifact 存储在外部存储中,例如阿里云的对象存储 OSS 等等。
Harbor的安装
Harbor的使用
基本推送与拉取
先登录
docker login https://harbor.yiiong.top:8443 |
镜像推送(先打标签,再推送)
harbor地址/项目名/镜像名:版本
docker tag mysql harbor.yiiong.top:8443/library/mysql:latest |
镜像拉取
docker pull harbor.yiiong.top:8443/library/mysql:latest |
机器人账户
在一些情况下,为了提高 Harbor 仓库的安全性考虑,不建议直接在流水线任务(CI/CD)中直接使用个人账户。因为这种方式会导致权限管理和维护变得复杂,尤其是当项目是公开的时候。
为解决这个问题,可以考虑使用 Harbor 自带的机器人账户(Robot Account)。机器人账户是一种特殊类型的账户,允许非个人实体访问 Harbor 仓库并执行特定的操作,而无需提供实际的用户名和密码。通过机器人账户,可以实现自动化 CI/CD 流程中的推送和拉取镜像操作,确保安全同时减少人为处理。
内网穿透工具
frp
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,我们可以使用frp安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
在0.52.0版本开始支持toml格式的配置文件了,并将在后继某个版本开始取消对ini配置格式的支持。
通过SSH访问内网机器
利用frp将处于内网香橙派中的服务穿透至公网_proxy.go:204-CSDN博客
通过自定义域名访问内网的 Web 服务
利用frp将处于内网香橙派中的服务穿透至公网_proxy.go:204-CSDN博客
后台运行
一切都没有问题后,我们把它们制作成service,保证它们可以在后台稳定运行
服务端
vim /usr/lib/systemd/system/frps.service |
frps.service配置如下
[Unit] |
启动
systemctl start frps |
开机自启
systemctl enable frps |
查看日志
systemctl status frps |
客户端
与服务端同理,frpc.service的配置中ExecStart修改为frpc文件的绝对路径,下面操作相同
原理
frpc并不监听哪个端口,只是它在局域网主机中启动时会通过一个随机端口来与外网服务器的7010端口建立一个隧道连接,隧道建立后7010端口和那个frpc所用过的随机端口并不直接参与数据包的传输。frps会将发往外网服务器6010端口的数据直接插入隧道中传至frpc中,这是隧道技术的一个关键特性,允许数据在网络上高效、安全地传输。
ngrok
ngrok 通过在公共端点和本地运行的 Web 服务器之间建立一个免费且安全的通道,实现内网主机的服务可以暴露给外网。
你可以使用ngrok将你处于内网的服务暂时暴露在公网,方便测试服务。
先添加Authtoken |
Nginx
介绍
Nginx是一款轻量级的Web 服务器/反向代理服务器及 电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
正向代理与反向代理
正向代理
正向代理,指的是通过代理服务器
代理浏览器/客户端
去重定向请求访问到目标服务器
的一种代理服务。
正向代理服务的特点是代理服务器
代理的对象是浏览器/客户端
,也就是对于目标服务器
来说浏览器/客户端
是隐藏的。
正向代理有什么用途?
举个例子:我是一个用户,我访问不了某网站,但是能访问一个代理服务器,这个代理服务器能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去把数据包取回来,然后返回给我。
- 访问原来无法访问的资源,如google (通过正向代理实现科学上网)
- 可以做缓存,加速访问资源
- 对客户端访问授权,上网进行认证
- 代理可以记录用户访问记录(上网行为管理)
- 对外隐藏用户信息,保护隐私
反向代理
反向代理,指的是浏览器/客户端
并不知道自己要访问具体哪台目标服务器
,只知道去访问代理服务器
,代理服务器
再通过反向代理 +负载均衡
实现请求分发到应用服务器
的一种代理服务。
反向代理服务的特点是代理服务器
代理的对象是应用服务器
,也就是对于浏览器/客户端
来说应用服务器
是隐藏的。
大型网站,通常将反向代理作为公网访问地址,而Web应用服务器作为内网。
有了反向代理,用户永远不会与使用它的Web服务器进行直接通信。可以将它们看作web服务 器或服务器集群的某种包装器。通过负载平衡和缓存,它们可以保护web服务器免遭攻击,并提供更好 的web性能。
反向代理的用途:
- 反向代理服务器像一个大门一样保证内网的安全,我们可以使用反向代理提供WAF(Web Application Firewall)功能,阻止web攻击 。
- 负载均衡,通过反向代理服务器来优化网站的负载。
配置文件介绍
nginx.conf
为最主要的配置文件
nginx 文件结构
... #全局块 |
- 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入, 4定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server块:配置虚拟主机的相关参数,一个http中可以有多个server。
- location块:配置请求的路由,以及各种页面的处理情况。
应用
反向代理+负载均衡
实现效果:访问nginx.yiiong.top:8000
时,将请求平均分配到8881和8882端口。
nginx.yiiong.top
解析到172.20.14.31
docker启动两个nginx容器,分别映射到宿主机8881、8882端口
为了区分,我修改了主页内容(/usr/share/nginx/html/index.html
)
反向代理
http { |
反向代理+负载均衡
upstream可以提供负载均衡和高可用性。
weight:weight代表每个服务器的权重值,默认为1,权重越高,被分配的用户数就越多。这种分配方式主要用于后端服务器性能不均的情况。
此时,访问8882端口的次数会是8881端口的两倍。
http { |
文件服务器
server { |
有些类型的文件链接在浏览器里点击后并不会直接下载而是只预览,这是我们只需要在mime.types
中添加application/octet-stream <文件类型>
即可。
application/octet-stream
是一种 MIME 类型,用于指示未知类型的文件。
ddns
由于DHCP分配给用户设备的IP地址并不固定,为了将设备当前的IP及时映射到域名上,使用户在任何时候都可以通过固定的地址访问到设备,产生了动态域名解析DDNS技术。
ddns-go 是一个轻量级的动态域名解析服务更新器,由Go语言编写,其主要功能是监测你的公共IP地址变化,并自动将新IP同步到支持自定义脚本的DDNS服务商。
Softether VPN
VPN(Virtual Private Network,虚拟私人网络)
介绍
Softether VPN是一个能够虚拟网卡和集线器(HUB)的工具,只要可以访问互联网,都可以使用它来组建远程局域网。
VPN用途
- 安全远程访问:VPN允许远程用户通过公共网络安全地连接到公司内部网络。
- 绕过地理限制:通过连接到位于其他地区的VPN服务器,用户可以访问被地理限制的网站、内容和服务。这是因为连接到VPN后,我们的IP地址会被伪装为VPN服务器所在地的IP地址,使得我们看起来好像是从该地区访问网站。
前提
想要科学上网,我们就得有一台公网海外服务器。
将 VPN Server 安装到 Linux 操作系统需要以下软件和库。检查系统是否已安装并启用以下软件和库。(make和gcc一定要有)
- make
- GCC软件
- Binutils 软件
- tar、gzip 或其他用于提取软件包文件的软件
- chkconfig 系统实用程序
- cat、cp 或其他基本文件操作实用程序
- EUC-JP、UTF-8 或其他代码页表,用于日语环境
- libc (glibc) 库
- zlib 库
- OpenSSL 库
- Readline 库
- ncurses 库
- pthread 库
将压缩包解压,并将其移动至/usr/local/vpnserver
,然后执行make
进行编译,出现如下即成功。
启动服务
root@RainYun-SJkdAk4z:/usr/local/vpnserver# ./vpnserver start |
可以访问到我们的后台。
检查服务运行状态
root@RainYun-SJkdAk4z:/usr/local/vpnserver# ./vpncmd |
出现successfully后就可以开始搭建我们的vpnserver了。
安装vpnserver
root@RainYun-SJkdAk4z:/usr/local/vpnserver# ./vpncmd |
下载Softether VPN Server Manager
SecureNAT的作用
提供虚拟NAT和虚拟DHCP服务。
具体流程类似wifi路由器上网过程。
wifi路由器上网过程:客户端通过路由器DHCP到一个内网IP,然后通过路由器的NAT功能,将内网IP映射到路由器的公网IP,通过路由器的公网IP进行上网。
VPN:客户端连接到VPN Server,通过虚拟DHCP获得一个虚拟IP,通过SecureNAT,将这个虚拟IP映射到VPN Server的IP,通过VPN Server的IP上网。
通过Client使用VPN
PC端通过SoftEther VPN Client使用
移动端(需要支持L2TP-一种VPN协议)使用自带VPN直接连接即可
Proxmox VE
Proxmox虚拟环境(简称PVE)是用于操作来宾操作系统的基于Debian Linux和KVM的虚拟化平台。
你可以把它类比为VMware,只不过使用PVE的前提是你得有一个小迷你主机或闲置的电脑,因为PVE安装时是一个系统镜像。
区别:
- VMware基于自家开发的 ESXi 虚拟化技术,是一种完全虚拟化,敏感指令在操作系统和硬件之间被捕捉处理,客户操作系统无需修改,且所有软件都能在虚拟机中运行。
- PVE主要基于 KVM,是一种基于内核的虚拟机,可将Linux内核转化成虚拟机监视器。同时它还有裸机安装器、网页版远程管理界面、HA集群堆栈、统一存储、柔性网络及可选的商业支持。
局限性:
Proxmox群集的虚拟化和存储主机的最大数量为32台物理服务器。
安装
CPU类别:
- host:性能最佳但兼容性不好,如果想将虚拟机从一台宿主机迁移到另一台 CPU 型号或架构不同的宿主机时,可能会出现兼容性问题。
- kvm64:兼容性好但性能不是最佳,它可以让我们在不同的宿主机之间迁移虚拟机。
LVM(Logical Volume Manager)是一种在 Linux 操作系统上使用的逻辑卷管理器,它允许用户对存储设备进行灵活的管理。
- 动态调整逻辑卷的大小,而无需重新分区磁盘。
- 实现数据的快速备份和还原。
- 支持数据的快速迁移和快速扩展存储容量。
- 提高数据安全性和可靠性,包括数据冗余和快速恢复能力。