k8s集群与gitlab registry连接
在之前的几篇部署文章中,我实现了gitlab部署配置、gitlab runner配置,registry仓库配置,kubectl与k8s集群联通。
链接: 中标麒麟7.4部署Gitlab
链接: 中标麒麟7.4为gitlab添加Registry
链接: 中标麒麟7.4部署gitlab-runner
链接: gitlab流水线与k8s集群的联通
目前整条流水线的自动化部署实现了
IDE->gitlab代码仓库->gitlab CICD->gitlab runner->本机 shell-> 本机docker->gitlab registry制品仓库->本级kubectl->K8S集群
目前发现集群无法正常从gitlab registry制品仓库中拉取docker打包好的制品。尝试解决这个问题。
1. k8s集群拉取镜像的策略开通
网络受限环境,首先需要保证对端口的访问是通畅的。并且,要保证k8s集群的每一台从节点都是通畅的。
可以使用telnet命令实现测试:
# ip 和 端口替换为你自己的gitlab部署IP,registry仓库端口
telnet 100.100.100.100 5050
但是中标麒麟7.4上默认没有telnet。考虑通过docker测试连通性。
docker login 我的ip:5050 -u root -p <your_gitlab_root_password>
在无法联通5050端口的情况下,你会看到如下内容
针对我的gitlab registry部署情况,这里面有两个问题,一是使用了https协议,二是连不上5050端口。
这种情况需要开通5050端口的策略。
2 修改为http协议
需要在所有k8s节点添加配置文件信息daemon.json
sudo vi /etc/docker/daemon.json
在内部添加"insecure-registries": [“100.100.100.100:5050”],既在这个ip和端口使用http协议
{// 如果已有内容请保留,注意在原先内容后添加英文逗号"insecure-registries": ["100.100.100.100:5050"]
}
注意,这需要你在所有k8s节点执行一遍,包括主节点和所有从节点。后续的认证信息只需要在可以控制k8s的集群操作。
3 添加认证信息
在你的kubectl主机上,使用 kubectl create secret docker-registry 命令来创建一个类型为 docker-registry 的Secret,将你的仓库认证信息存入K8s集群:
kubectl create secret docker-registry gitlab-registry-secret \--docker-server=100.100.100.100:5050 \ # 你的GitLab Registry地址和端口--docker-username=your_username \ # 你的GitLab用户名--docker-password=your_password_or_token \ # 你的GitLab密码或个人访问令牌--docker-email=your_email@example.com \ # 你的邮箱地址--namespace=default # 指定Secret创建的命名空间,按需修改
在部署时,在deployment.yaml文件中添加对gitlab-registry-secret的饮用
imagePullSecrets:- name: gitlab-registry-secret # 此处的名字必须与你创建的Secret名称一致