温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

k8s使用harbor私有仓库

发布时间:2020-08-12 14:04:47 来源:网络 阅读:552 作者:羊皮裘老头 栏目:云计算

1、登录Docker

通过注册表进行身份验证才能提取私有映像:

docker login  registry.hello.com

出现提示时,输入您的Docker用户名和密码。登录过程将创建或更新config.json包含授权令牌的文件。

查看config.json文件:

cat ~/.docker/config.json

{

       "auths": {
                "registry.hello.com": {
                        "auth": "YWRtaW46YWRtaW4xMjM="
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.09.0 (linux)"
        }
}

2、根据现有Docker凭证创建密钥

Kubernetes集群使用Secret docker-registry类型的密钥通过容器注册表进行身份验证以提取私有映像。如果您已经运行过docker login,则可以将该凭证复制到Kubernetes中:

kubectl create secret generic harbor \    #命名为harbor

    --from-file=.dockerconfigjson=/root/.docker/config.json \

   --type=kubernetes.io/dockerconfigjson

如果您需要更多控制权(例如,在新密钥上设置名称空间或标签),则可以在存储密钥之前自定义密钥。

务必:

    将数据项的名称设置为 .dockerconfigjson

    base64对docker文件进行编码并粘贴该字符串,将其作为字段的值不间断 data[".dockerconfigjson"]

设置type为kubernetes.io/dockerconfigjson

apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyJyZWdpc3RyeS5jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20iOnsicGFzc3dvcmQiOiJFY29uYWdlQGs4cyIsInVzZXJuYW1lIjoiazhzQGVjb25hZ2UifX19
kind: Secret
metadata:
  name: harbor
  namespace: default
type: kubernetes.io/dockerconfigjson

如果收到错误消息 `error: no objects passed to create`,这可能意味着 base64 编码的字符串无效。如果您收到的错误类似 `Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...`,这意

味着数据已成功地编码为 un-base64,但无法解析为一个 `.docker/config.json` 文件。

3、在 pod 上引用 imagePullSecrets

imagePullSecrets:

name: harbor

k8s使用harbor私有仓库

4、使用 Docker 配置创建一个 Secret

kubectl create secret docker-registry myregistrykey \
--docker-server=registry.hello.com --docker-username=admin \
--docker-password=admin123

Pod 只能引用它们自己命名空间中的镜像拉取 secret,因此,每个命名空间都需要完成一次此过程

5、应用场景

有许多配置私有仓库的解决方案。以下是一些常见的用例和建议的解决方案。

    1.集群只运行非专有(例如,开放源码)镜像。不需要隐藏镜像。在 Docker hub 上使用公共镜像

             不需要配置。

            在 GCE 或 GKE 上,自动使用本地镜像来提高速度和可用性。

    2.集群运行一些私有镜像,这些镜像应该对公司以外用户进行隐藏,但对所有集群用户都是可见的。

             使用托管的 Docker 仓库。它可能托管在 Docker Hub 上,或其它地方。像上面描述的那样在每个节点上手动配置 .docker/config.json。

             或者,在防火墙后面运行内部私有仓库,并打开读取访问权限。不需要 Kubernetes 配置。

             或者,在 GCE 或 GKE 上,使用项目的 Google 容器仓库。与手动节点配置相比,集群自动伸缩会更好地工作。

             或者,在更改节点配置不方便的集群上,使用 imagePullSecrets。

    3.拥有专有镜像的集群,其中一些需要更严格的访问控制。

             确保 AlwaysPullImages 准入控制器 打开。否则,所有 pod 都可能访问所有的镜像。

             将敏感数据移动到 “Secret” 资源中,而不是将其打包到镜像中。

    4.多租户集群,每个租户都需要自己的私有仓库。

             确保 AlwaysPullImages 准入控制器 打开。否则,所有 pod 都可能访问所有的镜像。

             运行需要授权的私有仓库。为每个租户生成仓库凭证,将其转换为 secret,并将 secret 填充到每个租户命名空间。

             租户将该 secret 添加到每个命名空间的 imagePullSecrets 中。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI