Kubernetes和不安全的注册表

问题描述 投票:2回答:2

我很奇怪,它是否可行..

我们有服务FOO和BAR,它们与Docker Registry运行相同的集群。让我们假设这个集群用于生产,而不是用于开发

我们有CI / CD系统,负责构建图像并将其推送到docker注册表。

Docker注册表仅用于kubernetes专用网络,我们不会在集群外推或拉图像,因为......为什么要这样做?

+-----------------------------------------------+
|                                               |
|                           KUBERNETES          |
|    +-------+                                  |
|    | VCS   |          +----------+            |
|    |       <----------+          |            |
|    |       |          | CI/CD    |            |
|    +-------+  +-------+          |            |
|               |       +----------+            |
|               |                               |
|               |             +-----+           |
|      +--------v-----+ <-----+FOO  |           |
|      | INSECURE     |       +-----+           |
|      | DOCKER       |           +-------+     |
|      | REGISTRY     | <---------+BAR    |     |
|      +--------------+           +-------+     |
+-----------------------------------------------+
                                      ^
                                      |
                                      |
                                      +
                                  USERS

是否可以使用自签名证书创建docker注册表,并设置kubernetes以信任此注册表?

或者这是开销,最好只使用好的证书并通过公共网络?

您在哪里存储生产准备好的码头图像以及在哪里进行分段?

kubernetes docker-registry
2个回答
2
投票

嗯,这看起来像一个非常理论化的问题。可以毫不含糊地回答的唯一问题是:

是否可以使用自签名证书创建docker注册表,并设置kubernetes以信任此注册表?

当然,您可以部署自己的Docker注册表,例如Artifactory或其他。您绝对可以创建自签名证书并使用它,并且您可以使用其中一个证书颁发机构颁发的证书。 (请注意,它可以是免费的,例如通过Let's Encrypt)前进,信任注册表或不 - 这不是Kubernetes的任务。这是运行时的任务,例如DockerRkt。因此,如果您想使用私有注册表,则必须配置运行时的客户端以使用您的注册表,无论安全与否。

其他一切都不像我们想象的那么明确。我唯一想说的是:练习表明,如果你要做某事,你必须按照自己的方式去做


1
投票

您在哪里存储生产准备好的码头图像以及在哪里进行分段?

通常,图像应该与分段和生产相同。没有理由将它们分开存放。

或者这是开销,最好只使用好的证书并通过公共网络?

从使用角度来看,内部PKI证书或Verisign,Symantec等公共服务之间没有太大区别。主要区别在于发布服务的安全性和可靠性。

是否可以使用自签名证书创建docker注册表,并设置kubernetes以信任此注册表?

Kubernetes documentation说:

Kubernetes集群使用docker-registry类型的Secret来对容器注册表进行身份验证以提取私有映像。

创建这个秘密,命名为regcred:

kubectl create secret docker-registry regcred --docker-server=your-registry-server --docker-username=your-name --docker-password=your-pword --docker-email=your-email

哪里:

  • your-registry-server是您的私有Docker Registry FQDN。 (用于DockerHub的https://index.docker.io/v1/
  • 你的名字是你的Docker用户名。
  • 你的pword是你的Docker密码。
  • 你的电子邮件是你的Docker电子邮件。

您已成功将群集中的Docker凭据设置为名为regcred的密钥。

要了解刚刚创建的regcred Secret的内容,首先要查看YAML格式的Secret:

kubectl get secret regcred --output=yaml

要了解.dockerconfigjson字段中的内容,请将机密数据转换为可读格式:

kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

创建一个使用你的秘密的Pod:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: regcred

有用的文章:

以下文章中描述了一种不同的方法。它保护Ingress而不是注册表本身。

© www.soinside.com 2019 - 2024. All rights reserved.