如何将不安全 Docker 注册表证书添加到 kubeadm 配置
How to add insecure Docker registry certificate to kubeadm config
我是 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
文件到 /etc/docker/certs.d/registry-url.net:5000/
我的本地 minikube 副本和 docker.
但是,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
注册表-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
的 base64
cat ~/.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
时,更改似乎没有生效,但重新启动就成功了。我不确定是否有更好的方法来解决我的问题,但这是唯一对我有用的解决方案。
我是 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
文件到 /etc/docker/certs.d/registry-url.net:5000/
我的本地 minikube 副本和 docker.
但是,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
注册表-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
的 base64
cat ~/.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
时,更改似乎没有生效,但重新启动就成功了。我不确定是否有更好的方法来解决我的问题,但这是唯一对我有用的解决方案。