如何为 Nexus 实例配置外部 LB
术语
| 术语 | 说明 |
|---|---|
| LB | 负载均衡器 |
| 外部 LB | 集群外部的负载均衡器,如 f5 |
| 集群 LB | 集群内的负载均衡器 |
场景说明
通常情况下,通过域名部署 Nexus 实例时,会将域名证书配置在集群 LB 上。然而,如果希望将域名证书配置在外部 LB(如 f5)上,则需要进行一些额外配置。
常见场景:
- 通过 NodePort 方式部署 nexus,然后通过外部 LB 将流量转发到 NodePort 上。
- 通过域名方式(HTTP)部署 nexus,然后通过外部 LB 将流量转发给集群 LB,最后由集群 LB 转发到 Nexus 服务。
配置方法
负载均衡器有多种类型,但其原理和配置方法相似。只需在负载均衡器转发流量时设置好 HTTP Header 即可。需要设置的 HTTP Header 如下表所示:
| HTTP Header | 说明 | 示例值 |
|---|---|---|
| Host | 原始请求的域名 | nexus.example.cn |
| X-Forwarded-Proto | 原始请求的协议 | https |
| X-Forwarded-Host | 原始请求的域名+端口 | nexus.example.cn:443 |
| X-Forwarded-Port | 原始请求的端口号 | 443 |
| X-Forwarded-Ssl | 原始请求是否使用 SSL | on |
下面通过实际案例介绍配置过程,例如希望通过 https://nexus.example.cn 这个域名访问 Nexus 工具 UI 页面,并可以正常下载依赖包。
场景一:配置外部 LB 转发到 Nexus 服务对应的 NodePort Service 上
前置条件
- 已通过 NodePort 方式部署 Nexus。
- 可以通过
http://<node-ip>:<node-port>(如:http://192.168.1.100:30000)访问 Nexus 服务
修改 Nexus 实例的访问地址
- 在左侧导航栏中,单击 工具链管理 > 实例管理。
- 编辑对应的 Nexus 实例,将 服务访问地址 改为
https://nexus.example.cn。
配置外部 LB
以 Nginx 配置为例,将转发地址设置为 Nexus 服务对应的 NodePort 地址:
server {
listen 443 ssl;
server_name https://nexus.example.cn;
# SSL 配置
ssl_certificate /etc/nginx/certs/domain.pem;
ssl_certificate_key /etc/nginx/certs/domain.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# 转发地址写 Nexus 服务对应的 NodePort 地址
proxy_pass http://192.168.1.100:30000;
proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name:$server_port;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
}
}测试验证
浏览器访问 https://nexus.example.cn ,应能正常访问 Nexus 服务 UI 页面,并可以下载依赖包。
场景二:配置外部 LB 转发到集群 LB 上
前置条件
- 已通过 Ingress 方式部署 Nexus,且协议是 HTTP。
- Nexus 所在集群已经配置好了集群 LB,集群外可以通过集群 LB 绑定的 IP 正常访问(如:http://192.168.100.10:80)。
修改 Nexus 实例的访问地址
- 在左侧导航栏中,单击 工具链管理 > 实例管理。
- 编辑对应的 Nexus 实例。
- 将 域名 改为
nexus.example.cn。 - 将 协议 改为
HTTP。 - 将 服务访问地址 改为
https://nexus.example.cn。
- 将 域名 改为
配置外部 LB
以 Nginx 配置为例,将转发地址设置为集群 LB 对应的 IP 地址:
server {
listen 443 ssl;
server_name https://nexus.example.cn;
# SSL 配置
ssl_certificate /etc/nginx/certs/domain.pem;
ssl_certificate_key /etc/nginx/certs/domain.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# 转发地址写集群 LB 绑定的 IP 地址
proxy_pass http://192.168.100.10;
proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name:$server_port;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
}
}测试验证
浏览器访问 https://nexus.example.cn ,应能正常访问 Nexus 服务 UI 页面,并可以正常下载依赖包。