我想知道它是否可以工作。
我们有服务FOO和BAR,它们使用Docker Registry在同一集群中运行。让我们想象一下这个集群是用于生产,而不是用于开发
我们有 CI / CD系统,该系统负责构建映像并将其推送到docker Registry。
Docker注册表仅用于kubernetes专用网络,我们不会将图像推送或拉出集群,因为...我为什么要这样做?
+-----------------------------------------------+
| |
| KUBERNETES |
| +-------+ |
| | VCS | +----------+ |
| | <----------+ | |
| | | | CI/CD | |
| +-------+ +-------+ | |
| | +----------+ |
| | |
| | +-----+ |
| +--------v-----+ <-----+FOO | |
| | INSECURE | +-----+ |
| | DOCKER | +-------+ |
| | REGISTRY | <---------+BAR | |
| +--------------+ +-------+ |
+-----------------------------------------------+
^
|
|
+
USERS
是否可以使用自签名证书创建docker注册表,并设置kubernetes信任此注册表?
或者这是开销,最好使用良好的证书并通过公共网络?
您将生产准备就绪的docker映像存储在哪里以及暂存的位置?
答案 0 :(得分:2)
嗯,这似乎是一个非常理论性的问题。唯一可以明确回答的问题是:
是否可以使用自签名证书创建Docker注册表, 并设置kubernetes信任此注册表?
当然,您可以部署自己的Docker注册表,例如Artifactory
或其他名称。您绝对可以使用它来创建自签名证书,也可以使用由证书颁发机构之一颁发的证书。 (请注意,它可能是免费的,例如通过Let's Encrypt
)
继续前进,是否信任注册表-这不是Kubernetes的任务。这是运行时的任务,例如Docker
或Rkt
。因此,如果要使用私有注册表,则无论是否安全,都必须配置运行时的客户端以与您的注册表一起使用。
所有其他事情都不像我们想象的那么清晰。我唯一要说的是:实践表明,如果您要做某事,则必须按照自己的方式做
答案 1 :(得分:1)
您将生产准备就绪的docker映像存储在哪里以及在何处进行登台?
通常,对于登台和制作,图像应相同。没有理由单独存储它们。
或者这是开销,最好使用良好的证书并通过公共网络?
从使用角度看,内部PKI证书或公共服务(如Verisign,Symantec等)之间没有太大区别。主要区别在于发布服务的安全性和可靠性。
是否可以使用自签名证书创建docker注册表,并设置kubernetes信任此注册表?
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
其中:
- 您的注册服务器是您的Private Docker Registry FQDN。 (https://index.docker.io/v1/用于DockerHub)
- 您的姓名是您的Docker用户名。
- 您的密码是您的Docker密码。
- 您的电子邮件是您的Docker电子邮件。
您已成功将集群中的Docker凭据设置为 秘密叫做 regcred 。
要了解您刚刚创建的regcred Secret的内容, 首先查看YAML格式的秘密:
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而不是注册表本身。