如何将Nexus配置为GKE集群可用的私有镜像注册表
将Nexus配置为GKE私有镜像注册表的可行方案
完全可以实现,核心要保障网络连通、认证配置正确、证书信任配置符合要求,具体操作步骤如下:
1. 打通GKE到Nexus的网络通路
- 如果部署Nexus的GCP主机和GKE集群在同一VPC下,直接在GCP防火墙规则中放行GKE集群节点、Pod的IP段访问Nexus的镜像仓库端口(默认Docker私有仓库端口一般为5000,以你实际配置的端口为准)、WEB服务端口(80/443)的入站规则即可,优先走内网避免公网传输风险
- 如果两者跨VPC,可配置VPC对等连接实现内网互通;如果要走公网访问,给Nexus绑定公网IP后,放行GKE节点的公网出口IP段的访问请求即可
- Nexus侧配置需要提前启用
Docker Bearer Token Realm,否则后续镜像拉取的认证会失败
2. 配置HTTPS证书信任
GKE默认只允许拉取受信任CA签发证书的HTTPS镜像仓库的镜像,两种配置方案可选:
- 给Nexus服务配置公网可信的SSL证书,无需额外修改GKE节点配置
- 如果使用自签证书,需要将自签根证书批量注入所有GKE节点的系统根证书信任存储中,使用Container-Optimized OS的节点可通过DaemonSet实现批量配置
注意:非生产环境如果临时使用HTTP协议的Nexus仓库,需要根据GKE节点的容器运行时(Docker/Containerd)对应修改配置,将Nexus地址加入不安全镜像仓库列表,生产环境强烈建议使用HTTPS。
3. 配置GKE镜像拉取凭证
首先在kubectl上下文连接到目标GKE集群后,执行以下命令创建镜像拉取Secret:
kubectl create secret docker-registry nexus-regcred \ --docker-server=<你的Nexus镜像仓库地址,例:nexus.internal:5000> \ --docker-username=<Nexus中具有镜像拉取权限的账号> \ --docker-password=<对应账号的密码> \ --docker-email=<可选,填写任意有效邮箱即可>
使用凭证有两种方式:
- 在工作负载的YAML配置中指定
imagePullSecrets字段,示例如下:spec: containers: - name: my-app image: nexus.internal:5000/my-app:v1 imagePullSecrets: - name: nexus-regcred - 如果需要某个命名空间下所有工作负载默认都可以使用该凭证,将该Secret绑定到对应命名空间的default ServiceAccount即可
4. 验证配置正确性
提交一个使用Nexus私有镜像的测试Deployment,查看Pod是否能正常拉取镜像启动,如果拉取失败,可通过kubectl describe pod <对应Pod名称>查看事件日志,排查是连通性、证书、还是认证配置错误。
内容的提问来源于stack exchange,提问作者Sugatur Deekshith S N
相关产品推荐
相关产品推荐

