k8s+containerd 流水线镜像无法使用HTTP推送的问题
·
操作系统信息
虚拟机,Centos7.5
Kubernetes版本信息
将 v1.29.14
容器版本:
containerd v1.7.1
问题:
devops时,Jenifile agent 镜像构建时无法推送给私有仓库,始终以HTTPS推送,无法配置成HTTP。
尝试方法:
方法:
修改每台集群机器的/etc/containerd/config.toml文件,将私有仓库注册
结果导向:
宿主机上,通过ctr依然无法默认http方式推送,流水线agent poman 也不行,但是添加–plain-http参数可以推送
如:
sudo ctr images pull –plain-http 10.15.28.36/roadshow/roadshow-dev:v1.0.0
原因分析:
无法修改通过修改配置使ctr 与 Jenifile agent 默认使用HTTP
✅ 解决方案:使用 –authfile 和 –tls-verify=false 参数绕过全局配置
我们可以使用 Podman 的命令行参数来:
指定不验证 TLS(HTTP)
使用临时认证文件保存登录信息
避免依赖 /etc/containers 配置
🔧 步骤详解
📌 Step 1: 创建临时目录存放 auth 和镜像文件
TMPDIR=$(mktemp -d) cd $TMPDIR
📌 Step 2: 登录私有仓库并跳过 TLS 校验(重点)
使用 –tls-verify=false 来禁用 HTTPS 检查:
cat "$REGISTRY_PASSWORD" | podman login 10.15.28.36 \ --username sport \ --password-stdin \ --tls-verify=false \ --authfile $TMPDIR/auth.json
📌 Step 3: 打标签(Tag)
podman tag ruoyi-admin:latest 10.15.28.36/roadshow/port-xxj:SNAPSHOT-$BUILD_NUMBER
📌 Step 4: 推送镜像并跳过 TLS 校验
podman push 10.15.28.36/roadshow/port-xxj:SNAPSHOT-$BUILD_NUMBER \ --tls-verify=false \ --authfile $TMPDIR/auth.json
📝 完整 Jenkins Pipeline 示例片段
将如下内容放入你的 Jenkinsfile 或 shell 脚本中:
stage('推送镜像') {
agent none
environment {
REGISTRY = '10.15.28.36'
DOCKERHUB_NAMESPACE = 'roadshow' // 替换为你自己的项目名
IMAGE_NAME = 'port-xxj'
TMPDIR = '/tmp/podman-tmp'
}
steps {
container('maven') {
withCredentials([usernamePassword(
credentialsId: 'own-harbor',
usernameVariable: 'DOCKER_USER_VAR',
passwordVariable: 'DOCKER_PWD_VAR'
)]) {
script {
sh '''
set -eux
mkdir -p ${TMPDIR}
cd ${TMPDIR}
echo "$DOCKER_PWD_VAR" | podman login \
--username "$DOCKER_USER_VAR" \
--password-stdin \
--tls-verify=false \
--authfile=${TMPDIR}/auth.json \
${REGISTRY}
podman tag ruoyi-admin:latest ${REGISTRY}/${DOCKERHUB_NAMESPACE}/${IMAGE_NAME}:SNAPSHOT-${BUILD_NUMBER}
podman push \
--tls-verify=false \
--authfile=${TMPDIR}/auth.json \
${REGISTRY}/${DOCKERHUB_NAMESPACE}/${IMAGE_NAME}:SNAPSHOT-${BUILD_NUMBER}
'''
}
}
}
}
}
更多推荐


所有评论(0)