如何将不安全的 Docker 注册表证书添加到 kubeadm 配置中



我对 Kubernetes 很陌生,我设法使用 minikube 在本地部署了一个 Angular 应用程序。但是现在我正在开发Bitnami Kubernetes Sandbox EC2实例,并且在另一个EC2实例上从Docker注册表中提取时遇到了问题。

每当我尝试应用部署时,pods 都会记录以下错误

Failed to pull image "registry-url.net:5000/app": no available registry endpoint:
failed to do request: Head https://registry-url.net/v2/app/manifests/latest:
x509: certificate signed by unknown authority

docker 注册表证书由CA (Comodo RSA( 签名,但我不得不将注册表的.crt.key文件添加到我的本地 minikube 和 docker 副本/etc/docker/certs.d/registry-url.net:5000/

但是,Bitnami 实例没有/etc/docker/目录,也没有daemon.json文件来添加不安全的注册表异常,我不确定 kubeadm 的证书文件应该在哪里。

那么是否有类似的位置来放置 kubeadm 的.crt.key文件,或者是否有我可以运行的命令将我的 docker 注册表添加到异常列表中?

或者更好的是,有没有办法让 Kubernetes/docker 识别注册表 SSL 证书的 CA?

谢谢

编辑:我在下面包含了我的部署和秘密文件:

app-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: registry-url.net:5000/app
ports:
- containerPort: 80
env:
...
imagePullSecrets:
- name: registry-pull-secret

registry-secret.yaml

apiVersion: v1
kind: Secret
metadata:
name: registry-pull-secret
data:
.dockerconfigjson: <base-64 JSON>
type: kubernetes.io/dockerconfigjson

您需要创建一个包含存储库详细信息的secret

这可能是将映像上传到 docker 存储库的示例:

docker login _my-registry-url_:5000  
Username (admin):  
Password:  
Login Succeeded  
docker tag _user_/_my-cool-image_  _my-registry-url_:5000/_my-cool-image_:0.1  
docker push _my-registry-url_:5000/_my-cool-image_:0.1

从该主机,您应该像这样创建~/.docker/config.json的base64cat ~/.docker/config.json | base64然后,您将能够将其添加到机密中,因此请创建一个可能如下所示的yaml

apiVersion: v1
kind: Secret
metadata:
name: registrypullsecret
data:
.dockerconfigjson: <base-64-encoded-json-here>
type: kubernetes.io/dockerconfigjson

完成后,您可以使用kubectl create -f my-secret.yaml && kubectl get secrets应用密钥。

至于你的pod它应该看起来像这样:

apiVersion: v1
kind: Pod
metadata:
name: jss
spec:
imagePullSecrets:
— name: registrypullsecret
containers:
— name: jss
image: my-registry-url:5000/my-cool-image:0.1

所以我最终通过以下命令手动安装 docker 解决了我的问题:

sudo add-apt-repository 
"deb [arch=amd64] https://download.docker.com/linux/ubuntu 
$(lsb_release -cs) 
stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io

然后,我必须创建目录结构/etc/docker/certs.d/registry-url:5000/并将注册表的.crt.key文件复制到目录中。

但是,这仍然不起作用;但是在停止EC2实例并重新启动它之后,它似乎从远程注册表中提取,没有问题。

当我最初运行service kubelet restart时,更改似乎没有生效,但重新启动确实起到了作用。我不确定是否有解决我的问题的方法,但这是唯一对我有用的解决方案。

最新更新