当前位置: 首页 > news >正文

使用 Docker 部署 Squid 为 Kubernetes 中的 Nexus3 提供公网代理访问

#作者:闫乾苓

文章目录

  • 背景
  • 网络架构
  • 部署 Squid(Docker 方式)
    • 1. 准备 Squid 配置文件
    • 2. 启动 Squid 容器
    • 3. 验证 Squid 出网功能
  • 总结

背景

在企业内部网络环境中,生产环境通常无法直接访问公网。
在 Kubernetes(K8s)中部署的 Nexus3 仓库,若需要从公网同步 Maven、npm 等依赖,就必须通过一个受控的出网代理。
本文介绍一种常见的解决方案:

  • 在 DMZ 区部署 Squid 作为 HTTP/HTTPS 代理
  • Squid 节点可直接访问公网
  • Nexus3 与 Squid 之间网络可通
  • Nexus3 配置全局 HTTP Proxy 指向 Squid,实现从公网下载构件并缓存到 Nexus3

网络架构

在这里插入图片描述

  • Squid:位于 DMZ,可访问公网
  • Nexus3:K8s 内部部署,无法直连公网,但能访问 Squid
  • 客户端:访问 Nexus3 的 Proxy 仓库,由 Nexus3 再通过 Squid 取数据

部署 Squid(Docker 方式)

1. 准备 Squid 配置文件

在 DMZ 节点创建目录 /opt/squid/conf 并创建配置文件 squid.conf:

# 监听端口
http_port 3128# 定义允许访问的客户端(Nexus3 IP)
acl nexus3_server src 192.168.61.21/32
# 如果你在 192.168.61.22 测试,也加上它
acl test_client src 192.168.61.22/32# 定义安全端口
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl Safe_ports port 1025-65535# 定义 CONNECT 方法
acl CONNECT method CONNECT# 先放行 Nexus3 和测试机的 CONNECT 请求到安全端口
http_access allow nexus3_server CONNECT SSL_ports
http_access allow test_client CONNECT SSL_ports# 放行 Nexus3 和测试机的普通 HTTP 请求
http_access allow nexus3_server
http_access allow test_client# 最后拒绝所有其他访问
http_access deny all# 日志位置
access_log stdio:/var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none# 禁用缓存
cache deny all

2. 启动 Squid 容器

docker run -d \--name squid \--restart unless-stopped \-p 3128:3128 \-v /opt/squid/conf/squid.conf:/etc/squid/squid.conf \ubuntu/squid:5.2-22.04_beta

这里没有挂载 /var/log/squid 和 /var/spool/squid,表示不做日志/缓存持久化,适合仅做转发的场景。

3. 验证 Squid 出网功能

在 允许的客户端 IP 上执行:

curl -x http://node2:3128 -I https://repo1.maven.org/maven2/

正常返回 HTTP/1.1 200 Connection established + 目标站响应,则说明 Squid 工作正常。

配置 Nexus3 全局代理

  1. 登录 Nexus3 Web 管理界面
  2. Administration → System → HTTP
  3. 填写:
  • HTTP Proxy Host: node2(或 Squid 节点的 IP)
  • Port: 3128
  1. 保存
    配置完成后,Nexus3 的所有 Proxy 仓库(Maven Central、npmjs 等)都会通过 Squid 出网。

Nexus3 创建 Proxy 仓库

  1. Repositories → Create repository → maven2 (proxy)
  2. 填写:
  • Name: maven-central-proxy
  • Remote Storage: https://repo.maven.apache.org/maven2/
  1. 保存
    客户端访问 maven-central-proxy 时,如果依赖不在 Nexus3 中,Nexus3 会:
  • 通过 Squid 请求公网
  • 下载依赖并存储到本地
  • 将结果返回给客户端

手动测试 Squid 下载文件
即使不经过 Nexus3,也可用 curl / wget 直接通过 Squid 下载公网文件。
curl 方式:

curl -x http://node2:3128 \-o HTTPClient-0.3-3.jar \https://repo.maven.apache.org/maven2/HTTPClient/HTTPClient/0.3-3/HTTPClient-0.3-3.jar

wget 方式:

wget -e use_proxy=yes \-e http_proxy=http://node2:3128 \-e https_proxy=http://node2:3128 \https://repo.maven.apache.org/maven2/HTTPClient/HTTPClient/0.3-3/HTTPClient-0.3-3.jar

下载完成后可验证文件完整性:
sha256sum HTTPClient-0.3-3.jar

注意事项

  • 安全控制:务必限制 Squid 只接受 Nexus3 节点的请求,避免成为开放代理
  • 缓存策略:本方案禁用 Squid 磁盘缓存,让 Nexus3 管理构件缓存
  • 日志审计:若需审计出网记录,可开启 /var/log/squid/access.log 持久化
  • 高可用:可在 DMZ 部署多个 Squid 节点,结合 K8s Service 或负载均衡

总结

通过在 DMZ 部署 Squid 代理,可以在不直接暴露 Kubernetes 内部服务到公网的情况下,让 Nexus3 安全地访问 Maven Central、npmjs 等外部仓库。
这种方案结构清晰、安全可控,适合大多数内网隔离环境下的制品仓库出网需求。

http://www.xdnf.cn/news/1395451.html

相关文章:

  • linux 条件变量与生产消费者模型
  • 玳瑁的嵌入式日记D29-0829(进程间通信)
  • Python OpenCV图像处理与深度学习:Python OpenCV开发环境搭建与入门
  • 基于能量方法的纳维-斯托克斯方程高阶范数有界性理论推导-陈墨仙
  • STM32CubeMX + HAL 库:基于 I²C 通信的 AHT20 高精度温湿度测量实验
  • 【系列03】端侧AI:构建与部署高效的本地化AI模型 第2章:端侧AI硬件入门
  • 134-细粒度多尺度符号熵和鲸鱼优化算法的滚动轴承故障诊断技术MSVM
  • Redis搭建哨兵模式一主两从三哨兵
  • 线程安全及死锁问题
  • 【好题推荐】运算符的构造运用
  • 光伏发多少电才够用?匹配家庭用电需求
  • #医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(五)
  • Linux内核进程管理子系统有什么第三十八回 —— 进程主结构详解(34)
  • JUC并发编程09 - 内存(01) - JMM/cache
  • 嵌入式Linux设备树驱动开发 - dtsof驱动
  • Unity DateTime 相关
  • 处理器(CPU/MPU)的双发射是什么?
  • 命令扩展与重定向
  • 可解释人工智能XAI
  • 【机器学习深度学习】Embedding 与 RAG:让 AI 更“聪明”的秘密
  • leetcode 191 位1的个数
  • 【0422】SMgrRelationData 中 md_num_open_segs 和 md_seg_fds 数组为什么是 4 个元素? 第四个元素表示什么?
  • Ubuntu磁盘分区重新挂载读写指南
  • 不一样的发票管理模式-发票识别+发票查验接口
  • ContextMenuManager for Win:优化右键菜单,解决用户痛点
  • lxml库如何使用
  • ElasticSearch对比Solr
  • C语言————操作符详解
  • TypeScript的Type
  • MySQL 中如果发生死锁应该如何解决?