【问题标题】:How I can add root CA to minikube?如何将根 CA 添加到 minikube?
【发布时间】:2017-07-27 12:46:04
【问题描述】:

我的公司在我尝试提取图像时使用它自己的根 CA。即使来自私人注册表,我也会收到错误消息:

1h 3m 22 {kubelet minikube} 警告 FailedSync 同步错误 吊舱,跳过:使用 ErrImagePull 无法为“POD”“启动容器”: “gcr.io/google_containers/pause-amd64:3.0 的图像拉取失败,这 可能是因为此请求没有凭据。

详情: (来自守护进程的错误响应:Get https://gcr.io/v1/_ping: x509: 由未知机构签署的证书)” 1h 10s 387 {kubelet minikube} 警告 FailedSync 同步 pod 时出错,跳过:“POD”的“StartContainer”失败 ImagePullBackOff: "后退拉取图片 \"gcr.io/google_containers/pause-amd64:3.0\""

如何将根 CA 安装到 minkube 或避免此消息,即仅使用私有注册表,并且不要从 gcr.io 中提取任何内容?

【问题讨论】:

  • 嘿,您能否考虑更新您的问题,以便更容易重现您的问题?
  • 不幸的是这是不可能的,因为你需要使用特殊的软件来替换根 CA
  • @gerdi,您的编辑使问题无法阅读……请回复
  • @VincentDeSmet 嗨,感谢您的反馈,您能解释一下它是如何不可读的吗?
  • 请考虑编辑它以进行相应的更改。谢谢

标签: kubernetes minikube


【解决方案1】:

独立于 minikube 的直接方法是使用 imagePullSecrets 配置。如Pulling an Image from a Private Registry 指南中所述,您可以创建一个Secret 并将其与您的图像一起使用,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
    - name: private-container
      image: <your-private-image>
  imagePullSecrets:
    - name: the_secret

the_secret 的创建位置:

kubectl create secret docker-registry the_secret --docker-server=xxx --docker-username=xxx --docker-password=xxx --docker-email=xxx

或与:

kubectl create secret generic the_secret --from-file=.docker/config.json

或与kubectl create secret 相关的任何其他内容 - 请参阅documentation for details


编辑:即使在官方的minikube 文档中,您也会发现他们使用Secretsregistry-creds 插件。

您将找到通用文档 here 和插件文档 here

它烧毁为:

minikube addons enable registry-creds

但从技术上讲,它的作用与上述相同。

【讨论】:

  • 似乎问题与 ca 信任链更相关,在这种情况下,需要将 ca 证书添加到 minikube 主机操作系统的 ca-certificates 文件夹中......我假设类似于以下内容需要 - docker-saigon.github.io/post/Private-Registry-Setup/…
  • 是的。我的公司给了我一个文档,其中说将根 CA 放入 /usr/share/ca-certificates/,然后运行 ​​dpkg-reconfigure ca-certificates 或 update-ca-trust enable。问题是 minikube 没有这些命令之一,我不知道如何启用我公司的 root ca。把它放到 /etc/docker/certs.d/ 没有帮助。
  • @arykalin - 我不确定 minikube 的发行版是什么,您可以查看cat /etc/*release* 并告诉我吗?如果是高山,您可能需要apk install --no-cache ca-certificates &amp;&amp; update-ca-certificates
  • 我试过这个,但没有帮助。重新启动后,minikube 系统本身内部的更改也不会持续存在。
【解决方案2】:

到地址:

x509: certificate signed by unknown authority

您能试试 Minikube repo 的以下建议吗?

将证书复制到虚拟机中。位置应该是:

/etc/docker/certs.d/

从这里:https://docs.docker.com/engine/security/certificates/

ref

该线程还包括以下单行:

cat <certificatefile> \
  | minikube ssh "sudo mkdir -p /etc/docker/certs.d/<domain> && sudo tee /etc/docker/certs.d/<domain>/ca.crt"

这里的问题是需要更新的 Linux 主机的 CA 信任链。最简单的方法是在将证书复制到 VM 后重新启动 Linux 主机,如果无法重新启动 - 寻找update-ca-certificates 的方法。

仅重启 Docker 守护进程很可能无法解决此问题

注意:允许 Docker 守护进程使用不安全的注册表意味着证书未经过验证。虽然这可能会有所帮助,但并不能解决此处提出的问题

【讨论】:

  • 是的,创建 /etc/docker/certs.d/gcr.io 并将根 CA 放在那里会有所帮助。谢谢。
  • 嗯,不,抱歉,看起来没有。 docker pull gcr.io/google_containers/pause-amd64:3.0 3.0: Pulling from google_containers/pause-amd64 a3ed95caeb02: Downloading f11233434377: Downloading x509: certificate signed by unknown authority
  • 您尝试重启 minikube 了吗?可能是在引导过程中从 certs 文件夹加载了证书? - 我链接的博客文章确实提到需要重新启动。
  • 嗯,我尝试重新启动 docker daemon,如果我重新启动 minikube,它不会保留我的更改并且我找不到保留它们的方法。
  • docker daemon 不是信任这里的证书的...这是 minikube 使用的 linux 发行版,它需要将您复制到 certs 目录中的证书添加到其信任链中。我不确定 minikube 是否基于 alpine,但您可以尝试类似的方法:github.com/so0k/docker-efk/blob/master/log-generator/… (load certs from a dir)
【解决方案3】:

到目前为止,我发现的唯一解决方案是将 --insecure-registry gcr.io 选项添加到 minikube。

【讨论】:

  • --insecure-registry="gcr.io"?
  • 如果您需要添加多个不安全的注册表怎么办?
  • 或者可能是--insecure-registry k8s.gcr.io
  • A note 当我不可避免地忘记时:“如果机器已经存在(即使它已停止),--insecure-registry 标志将被忽略。如果你想要新的标志,你必须首先 minikube delete受到尊重”。
  • @DavidWest 这个选项值可能是一个数组。
猜你喜欢
  • 2021-07-17
  • 2014-07-10
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2022-10-03
  • 2023-02-10
  • 2019-01-20
  • 2020-09-30
相关资源
最近更新 更多