前言
今天遇到一个问题,那就是knative创建的revision报错,x509,不信任的证书,但是在主机上,docker pull是没有问题的。
现状
目前应用的创建过程:
- 用户上传含Dockerfile的源码
- 将源码上传到到三方存储
- 创建Tokton的TaskRun资源
- Tekton的Task模版应用TaskRun携带的参数,创建Pod执行任务
- Pod中使用step kaniko构建镜像
- 构建完成push镜像到私有registry仓库
- 创建knative的Revision资源(类似k8s中的deployment)
- revision创建Pod
由于使用了自建的dns,导致ssl的证书不能使用公有云的ssl证书,所以自己签发了一个https的证书,
已经在kaniko的insure-registry配置了私有仓地址,kaniko可以push镜像到私有仓库。但是使用knative创建revision,revision创建pod的时候,报错x509,不信任的证书,每一台node上已经加载了该https的证书,并且手动docker pull也是可以pull下来的。但是使用revision就是不行。
分析
可能的原因一:使用程序创建的Revision有问题
尝试将Revision的yaml保存起来
kubectl get revision revisionName -n namespaceName -o yaml > revision.yaml
删除其中无关的标签,然后手动创建revision,还是报错x509,说明不是调用revsion操作的锅
可能的原因二:是不是拉取不到镜像
尝试将revision.yaml的apiVersion和kind改为pod类型
kubectl apply -f revision.yaml
pod运行正常,说明镜像是好的。
得出结论
这就说明是revision这个类型,在创建这个实例的时候,对这个镜像做了什么检查或者操作,导致revision报错了。
但是就没有接着追下去了,请教了大佬,然后大佬,说让改个configmap配置看看可行吗?
apiVersion: v1
kind: ConfigMap
metadata:
name: config-deployment
namespace: knative-serving
data:
# List of repositories for which tag to digest resolving should be skipped
registriesSkippingTagResolving: registry.example.com,registry.naison.com
registriesSkippingTagResolving这个标签增加了自己的私有仓就好了。
knative官方的说明是这个标签指明了哪些registry仓库的数字摘要不用验证。
总结
还需要对整个knative有更加全面的认知,遇到问题可以先找google问下,就比如这个问题,后来通过google简单搜索了一下关键字,就有有人遇到过类似的问题,并且也给出了正确答案。链接