我很奇怪,它是否可行..
我们有服务FOO和BAR,它们与Docker Registry运行相同的集群。让我们假设这个集群用于生产,而不是用于开发
我们有CI / CD系统,负责构建图像并将其推送到docker注册表。
Docker注册表仅用于kubernetes专用网络,我们不会在集群外推或拉图像,因为......为什么要这样做?
+-----------------------------------------------+
| |
| KUBERNETES |
| +-------+ |
| | VCS | +----------+ |
| | <----------+ | |
| | | | CI/CD | |
| +-------+ +-------+ | |
| | +----------+ |
| | |
| | +-----+ |
| +--------v-----+ <-----+FOO | |
| | INSECURE | +-----+ |
| | DOCKER | +-------+ |
| | REGISTRY | <---------+BAR | |
| +--------------+ +-------+ |
+-----------------------------------------------+
^
|
|
+
USERS
是否可以使用自签名证书创建docker注册表,并设置kubernetes以信任此注册表?
或者这是开销,最好只使用好的证书并通过公共网络?
您在哪里存储生产准备好的码头图像以及在哪里进行分段?
嗯,这看起来像一个非常理论化的问题。可以毫不含糊地回答的唯一问题是:
是否可以使用自签名证书创建docker注册表,并设置kubernetes以信任此注册表?
当然,您可以部署自己的Docker注册表,例如Artifactory
或其他。您绝对可以创建自签名证书并使用它,并且您可以使用其中一个证书颁发机构颁发的证书。 (请注意,它可以是免费的,例如通过Let's Encrypt
)前进,信任注册表或不 - 这不是Kubernetes的任务。这是运行时的任务,例如Docker
或Rkt
。因此,如果您想使用私有注册表,则必须配置运行时的客户端以使用您的注册表,无论安全与否。
其他一切都不像我们想象的那么明确。我唯一想说的是:练习表明,如果你要做某事,你必须按照自己的方式去做
您在哪里存储生产准备好的码头图像以及在哪里进行分段?
通常,图像应该与分段和生产相同。没有理由将它们分开存放。
或者这是开销,最好只使用好的证书并通过公共网络?
从使用角度来看,内部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
哪里:
- 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而不是注册表本身。