如何在 Minikube 中安装 CA 以信任镜像拉取
How to install a CA in Minikube so image pulls are trusted
我想使用Minikube进行本地开发。它需要访问我的公司内部 docker 注册表,该注册表已使用第 3 方证书签名。
在本地,我会根据 OS 复制证书和 运行 update-ca-trust extract
或 update-ca-certificates
。
对于 Minikube 虚拟机,如何安装、注册证书并重新启动 docker 守护程序,以便 docker pull
信任服务器?
你检查过了吗ImagePullSecrets
.
您可以使用您的证书创建一个秘密并让您的 pod 使用它。
据我所知,没有办法做到这一点。下一个最佳选择是在启动时使用不安全注册表选项。
minikube --insecure-registry=foo.com:5000
通过使用以下命令启动 minikube:
minikube start --insecure-registry=internal-site.dev:5244
它将使用 --insecure-registry
选项启动 docker 守护程序:
/usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// -H tcp://0.0.0.0:2376 --label provider=virtualbox --insecure-registry internal-site.dev:5244 --tlsverify --tlscacert=/var/lib/boot2docker/ca.pem --tlscert=/var/lib/boot2docker/server.pem --tlskey=/var/lib/boot2docker/server-key.pem -s aufs
但这需要 HTTP 连接。不同于 Docker registry documentation Basic auth does work, but it needs to be placed in a imagePullSecret
from the Kubernetes docs.
我还建议阅读 "Adding imagePulSecrets to service account"(上页的 link),以便在部署时将秘密添加到所有 pods。请注意,这不会影响已部署的 pods.
我最近不得不做类似的事情。您应该可以使用 minikube ssh 跳上机器,然后按照此处的说明进行操作
https://docs.docker.com/engine/security/certificates/#understanding-the-configuration
将 CA 放在适当的目录中 (/etc/docker/certs.d/[registry hostname]/)。您不需要重新启动守护进程就可以工作。
Shell 进入 Minikube。
将您的证书复制到:
/etc/docker/certs.d/<docker registry host>:<docker registry port>
确保您对证书的权限是正确的,它们必须至少是可读的。
重启Docker(systemctl重启docker)
如果您的 Docker 注册表使用基本身份验证,请不要忘记创建一个秘密:
kubectl create secret docker-registry service-registry --docker-server=<docker registry host>:<docker registry port> --docker-username=<name> --docker-password=<pwd> --docker-email=<email>
好吧,minikube 具有将 ~/.minikube/files
目录的所有内容复制到其 VM 文件系统的功能。所以你可以把你的证书放在
~/.minikube/files/etc/docker/certs.d/<docker registry host>:<docker registry port> path
并且这些文件将在 minikube 启动时自动复制到正确的目的地。
一个对我有用的选项是 运行 一个 k8s 作业来将证书复制到 minikube 主机...
这就是我过去信任部署到我的 minikube 中的 harbor 注册表
cat > update-docker-registry-trust.yaml << END
apiVersion: batch/v1
kind: Job
metadata:
name: update-docker-registry-trust
namespace: harbor
spec:
template:
spec:
containers:
- name: update
image: centos:7
command: ["/bin/sh", "-c"]
args: ["find /etc/harbor-certs; find /minikube; mkdir -p /minikube/etc/docker/certs.d/core.harbor-${MINIKUBE_IP//./-}.nip.io; cp /etc/harbor-certs/ca.crt /minikube/etc/docker/certs.d/core.harbor-${MINIKUBE_IP//./-}.nip.io/ca.crt; find /minikube"]
volumeMounts:
- name: harbor-harbor-ingress
mountPath: "/etc/harbor-certs"
readOnly: true
- name: docker-certsd-volume
mountPath: "/minikube/etc/docker/"
readOnly: false
restartPolicy: Never
volumes:
- name: harbor-harbor-ingress
secret:
secretName: harbor-harbor-ingress
- name: docker-certsd-volume
hostPath:
# directory location on host
path: /etc/docker/
# this field is optional
type: Directory
backoffLimit: 4
END
kubectl apply -f update-docker-registry-trust.yaml
您应该将根证书复制到 $HOME/.minikube/certs
并使用 --embed-certs
标志重新启动 minikube。
更多细节请参考minikube手册:https://minikube.sigs.k8s.io/docs/handbook/untrusted_certs/
我想使用Minikube进行本地开发。它需要访问我的公司内部 docker 注册表,该注册表已使用第 3 方证书签名。
在本地,我会根据 OS 复制证书和 运行 update-ca-trust extract
或 update-ca-certificates
。
对于 Minikube 虚拟机,如何安装、注册证书并重新启动 docker 守护程序,以便 docker pull
信任服务器?
你检查过了吗ImagePullSecrets
.
您可以使用您的证书创建一个秘密并让您的 pod 使用它。
据我所知,没有办法做到这一点。下一个最佳选择是在启动时使用不安全注册表选项。
minikube --insecure-registry=foo.com:5000
通过使用以下命令启动 minikube:
minikube start --insecure-registry=internal-site.dev:5244
它将使用 --insecure-registry
选项启动 docker 守护程序:
/usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// -H tcp://0.0.0.0:2376 --label provider=virtualbox --insecure-registry internal-site.dev:5244 --tlsverify --tlscacert=/var/lib/boot2docker/ca.pem --tlscert=/var/lib/boot2docker/server.pem --tlskey=/var/lib/boot2docker/server-key.pem -s aufs
但这需要 HTTP 连接。不同于 Docker registry documentation Basic auth does work, but it needs to be placed in a imagePullSecret
from the Kubernetes docs.
我还建议阅读 "Adding imagePulSecrets to service account"(上页的 link),以便在部署时将秘密添加到所有 pods。请注意,这不会影响已部署的 pods.
我最近不得不做类似的事情。您应该可以使用 minikube ssh 跳上机器,然后按照此处的说明进行操作
https://docs.docker.com/engine/security/certificates/#understanding-the-configuration
将 CA 放在适当的目录中 (/etc/docker/certs.d/[registry hostname]/)。您不需要重新启动守护进程就可以工作。
Shell 进入 Minikube。
将您的证书复制到:
/etc/docker/certs.d/<docker registry host>:<docker registry port>
确保您对证书的权限是正确的,它们必须至少是可读的。
重启Docker(systemctl重启docker)
如果您的 Docker 注册表使用基本身份验证,请不要忘记创建一个秘密:
kubectl create secret docker-registry service-registry --docker-server=<docker registry host>:<docker registry port> --docker-username=<name> --docker-password=<pwd> --docker-email=<email>
好吧,minikube 具有将 ~/.minikube/files
目录的所有内容复制到其 VM 文件系统的功能。所以你可以把你的证书放在
~/.minikube/files/etc/docker/certs.d/<docker registry host>:<docker registry port> path
并且这些文件将在 minikube 启动时自动复制到正确的目的地。
一个对我有用的选项是 运行 一个 k8s 作业来将证书复制到 minikube 主机...
这就是我过去信任部署到我的 minikube 中的 harbor 注册表
cat > update-docker-registry-trust.yaml << END
apiVersion: batch/v1
kind: Job
metadata:
name: update-docker-registry-trust
namespace: harbor
spec:
template:
spec:
containers:
- name: update
image: centos:7
command: ["/bin/sh", "-c"]
args: ["find /etc/harbor-certs; find /minikube; mkdir -p /minikube/etc/docker/certs.d/core.harbor-${MINIKUBE_IP//./-}.nip.io; cp /etc/harbor-certs/ca.crt /minikube/etc/docker/certs.d/core.harbor-${MINIKUBE_IP//./-}.nip.io/ca.crt; find /minikube"]
volumeMounts:
- name: harbor-harbor-ingress
mountPath: "/etc/harbor-certs"
readOnly: true
- name: docker-certsd-volume
mountPath: "/minikube/etc/docker/"
readOnly: false
restartPolicy: Never
volumes:
- name: harbor-harbor-ingress
secret:
secretName: harbor-harbor-ingress
- name: docker-certsd-volume
hostPath:
# directory location on host
path: /etc/docker/
# this field is optional
type: Directory
backoffLimit: 4
END
kubectl apply -f update-docker-registry-trust.yaml
您应该将根证书复制到 $HOME/.minikube/certs
并使用 --embed-certs
标志重新启动 minikube。
更多细节请参考minikube手册:https://minikube.sigs.k8s.io/docs/handbook/untrusted_certs/