Minikube - x509:证书由未知机构签名

4

我正在使用minikubekubectl创建一个mongoRC。同时,我正在使用公司的VPN。

通过kubectl create -f ./rc/mongo-rc.yaml命令创建了RC

当使用kubectl describe pod mongo-5zttk命令时,获得了下面的kubernetes事件:

...
Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  7m18s                  default-scheduler  Successfully assigned default/mongo-5zttk to minikube
  Normal   Pulling    5m42s (x4 over 7m17s)  kubelet, minikube  Pulling image "mongo"
  Warning  Failed     5m40s (x4 over 7m15s)  kubelet, minikube  Failed to pull image "mongo": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/library/mongo/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fmongo%3Apull&service=registry.docker.io: x509: certificate signed by unknown authority
  Warning  Failed     5m40s (x4 over 7m15s)  kubelet, minikube  Error: ErrImagePull
  Normal   BackOff    5m29s (x6 over 7m15s)  kubelet, minikube  Back-off pulling image "mongo"
  Warning  Failed     2m8s (x21 over 7m15s)  kubelet, minikube  Error: ImagePullBackOff

使用curl访问URL时:
⚡  curl https://registry-1.docker.io/v2/library/mongo/manifests/latest
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"library/mongo","Action":"pull"}]}]}

我能够成功从Docker Hub注册表中拉取mongo:latest镜像。
⚡  docker pull mongo:latest
latest: Pulling from library/mongo
Digest: sha256:efc408845bc917d0b7fd97a8590e9c8d3c314f58cee651bd3030c9cf2ce9032d
Status: Image is up to date for mongo:latest
docker.io/library/mongo:latest

环境信息:

  • minikube 版本: v1.14.1
  • kubectl
    • 客户端版本:v1.18.8
    • 服务器版本:v1.19.2
  • 操作系统:macOS 10.13.6

我已阅读文档:vpn_and_proxy/#x509-certificate-signed-by-unknown-authority。解决方案是向 IT 部门请求适当的 PEM 文件。如果我无法获得 PEM 文件,是否有其他解决方案?例如使用一些命令标志:--skip-verify-cert

更新:

mongo-rc.yaml:

apiVersion: v1
kind: ReplicationController
metadata: 
  name: mongo
spec: 
  replicas: 1
  selector: 
    app: mongo
  template: 
    metadata: 
      labels:
        app: mongo
    spec: 
      containers: 
      - name: mongo
        image: mongo
        ports: 
        - containerPort: 27017
        env: 
        - name: MONGO_ROOT_PASSWORD
          value: "123456"

你可以提供一下容器规范部分,其中提到了需要使用的镜像详情吗? - confused genius
@confusedgenius完成。我已包含k8s RC资源的YAML文件。 - Lin Du
我在我的设置上尝试了相同的yaml,它可以正常工作。我查看了https://registry-1.docker.io的TLS证书,它们被正确签名,这可能是为什么docker pull也可以正常工作的原因。所以我认为错误信息是误导性的,可能是关于你的kubernetes证书的问题。你能否确认是否还有其他镜像出现了这种错误消息? - confused genius
4个回答

3

您应该能够使用--insecure-registry标志,但您可能需要重新创建您的minikube集群才能使其工作。

minikube start --insecure-registry="registry-1.docker.io"

2
我使用 minikube delete --all --purge 命令删除了我的集群。之后,我使用你提供的命令重新创建了我的 minikube 集群。但仍然遇到了相同的问题。 - Lin Du
将端口添加到命令中:❌ 由于MK_USAGE而退出:抱歉,使用--insecure-registry标志提供的地址无效:registry-1.docker.io。预期格式为:<ip>:<port>、<hostname>:<port>或<network>/<netmask>例如:minikube start --insecure-registry="registry-1.docker.io:443" - Frank N Stein
参数 --insecure-registry 是未知的(MK v1.27.1),也不在 minikube -v 的选项中。 - Saad Benbouzid
--insecure-registry=[]: 不安全的Docker注册表,可传递给Docker守护程序。 默认服务CIDR范围将自动添加。此内容可在 minikube start --help 中找到。 - Bjorn 'Bjeaurn' S

0

尝试了很多方法,唯一适用于我的是:

  1. 在shell中进入MK容器,创建一个文件(例如/root/docker.sh),内容如下:
update-ca-certificates --fresh
openssl s_client -showcerts -verify 5 -connect k8s.gcr.io:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/k8s.gcr.io.crt
openssl s_client -showcerts -verify 5 -connect registry-1.docker.io:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/registry-1.docker.io.crt
openssl s_client -showcerts -verify 5 -connect auth.docker.io:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/auth.docker.io.crt
cp ~/k8s.gcr.io.crt /usr/local/share/ca-certificates/
cp ~/registry-1.docker.io.crt /usr/local/share/ca-certificates/
cp ~/auth.docker.io.crt /usr/local/share/ca-certificates/
update-ca-certificates
# service docker restart

执行一次,或者安全地将其与docker start (/etc/init.d/docker)一起添加执行。
...
case "$1" in
        start)
                # <add-following-line>
                /root/./docker.sh
                # </add-following-line>
                check_init
                fail_unless_root
                cgroupfs_mount
                ..

0
对我来说,问题出在从Docker注册表中拉取"hello-world"镜像时,出现了以下错误:
response from daemon: Get "https://registry-1.docker.io/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

使用openssl获取证书。
openssl s_client -showcerts -verify 5 -connect registry-1.docker.io:443

将openssl输出的所有证书保存在单独的.crt文件中。
将所有证书复制到~/.minikube/certs目录下。
复制完成后:
- 执行minikube delete命令 - 重启docker - 重启minikube 更多详细信息请参阅article

0
对于 Helm 版本 3.13.1,你可以使用以下命令启动你的 Minikube。
 minikube start --insecure-registry="registry.k8s.io"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接