Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何将自签名证书放入GKE集群的每个节点?_Docker_Kubernetes_Google Cloud Platform_Google Kubernetes Engine - Fatal编程技术网

Docker 如何将自签名证书放入GKE集群的每个节点?

Docker 如何将自签名证书放入GKE集群的每个节点?,docker,kubernetes,google-cloud-platform,google-kubernetes-engine,Docker,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,我在GKE有一个kubernetes星系团。集群内部有一个私有docker注册表服务。此服务的证书通过运行以下命令在docker映像中生成: openssl-req-x509-newkey rsa:4096-days 365-nodes-sha256-keyout/certs/tls.key-out/certs/tls.crt-subc”/CN=registry proxy 当任何使用此私有注册表中的图像的pod尝试提取图像时,我会收到一个错误: x509: certificate signe

我在GKE有一个kubernetes星系团。集群内部有一个私有docker注册表服务。此服务的证书通过运行以下命令在docker映像中生成:

openssl-req-x509-newkey rsa:4096-days 365-nodes-sha256-keyout/certs/tls.key-out/certs/tls.crt-subc”/CN=registry proxy
当任何使用此私有注册表中的图像的pod尝试提取图像时,我会收到一个错误:

x509: certificate signed by unknown authority
有没有办法将自签名证书放在集群中的所有GKE节点上以解决此问题

更新


我按照@ArmandoCuevas在其评论中的建议,将CA证书放在每个GKE节点上,但这没有帮助,仍然得到错误
x509:由未知机构签署的证书
。是什么引起的?如何将docker图像拉入吊舱?

TL;DR:您需要对GKE中的节点执行的几乎所有修改,如向服务器添加受信任的根证书,都可以使用守护程序完成

用户创建了一个关于如何执行您希望执行的操作的惊人指南。可以找到链接

作为总结,Sam建议如何执行此更改的方法是使用守护程序在每个节点中分发证书。由于守护程序保证每个节点上始终有一个pod,pod将负责将您的证书添加到节点,以便您可以从私有注册表中提取映像

通常情况下,您自己添加节点将不起作用,因为如果GKE需要重新创建节点,您更改的节点将丢失。使用DS的这种方法可以保证,即使重新创建了节点,由于守护程序将在节点中安排一个“检修吊舱”,因此您将始终拥有证书

Sam提出的步骤非常简单:

  • 使用分发证书所需的命令创建一个映像。如果您使用的是Ubuntu节点或COS节点,则此步骤可能会有所不同。如果您使用的是COS节点,SAM将完美地概述如果您使用COS,pod需要运行的命令:
  • 如果您正在运行Ubuntu节点,这些命令将在Ask Ubuntu like中的几篇文章中列出

  • 将映像移动到节点当前具有类似访问权限的容器注册表中

  • 使用将证书添加为具有NET_管理功能(执行此操作所需)的特权的映像部署DS,并在POD中装载主机的“/etc”文件夹。Sam添加了一个这样做的示例,可能会有所帮助,但您可以使用自己的定义。 如果您在尝试部署特权pod时遇到问题,可能值得一看GKE文档


  • 非常感谢您的回答,该解决方案很好,但不知何故,将
    myCA.pem
    复制到/mnt/etc/ssl/certs并运行
    update ca certificates&&systemctl restart docker
    并没有帮助。我仍然收到错误
    x509:由未知权限签署的证书
    。我所做的您可以在一个单独的问题中找到,可能将CA证书置于
    /etc/ssl/certs
    并运行
    更新CA证书
    无法正常工作。当我试图从此目录中删除证书并重新启动
    更新ca证书
    时,我收到一条消息
    0已添加,0已删除;完成。
    我找到了另一个解决方案如何应用CA证书,但仍然收到错误
    x509:由未知机构签署的证书
    Hi Max。我认为一个可能的解决方案是将svc名称用作证书的CN。如果创建证书,则可以使用服务fqdn as CN创建自签名证书。例如,您可以在NS“docker”中创建服务“registry”,因此服务fqdn应该类似于
    registry.docker.svc.cluster.local
    。您可以将该FQDN用于CNI,因为我发现了问题。它与
    containerd
    连接,而不是
    Docker
    。你可以在这里查看我的答案
    cp /myCA.pem /mnt/etc/ssl/certs
    nsenter --target 1 --mount update-ca-certificates
    nsenter --target 1 --mount systemctl restart docker