本文主要记录在k8s中如果想从harbor拉取镜像如何操作,介绍k8s中Secret是什么1.什么是Secret1.1Secret概述Secret是一种An包含少量敏感信息(如密码、令牌或密钥)的对象。这些信息可能放在Pod规范或图像中。使用Secret意味着您不需要在应用程序代码中包含秘密数据。由于Secrets可以独立于使用它们的Pod创建,因此在创建、查看和编辑Pod的工作流程中暴露Secrets(及其数据)的风险较小。在集群中运行的Kubernetes和应用程序还可以使用Secrets采取额外的预防措施,例如避免将秘密数据写入非易失性存储。Secret类似于ConfigMap,但旨在保存秘密数据。说白了就是用来保存重要的密码等信息。Pod可以通过以下三种方式之一使用Secret:作为挂载在一个或多个容器的卷上的文件。作为容器的环境变量。在为pod拉取镜像时由kubelet使用。这篇文章主要讲的是如何在Pod拉取镜像的时候使用1.2的Secret类型创建Secret。您可以使用Secret资源的类型字段或其等效的kubectl命令行参数(如果有)为其设置类型。Secret类型有助于以编程方式操作Secret数据。Kubernetes为一些常见的使用场景提供了几种内置类型。对于这些类型中的每一种,Kubernetes执行的合法性检查以及对它们施加的限制各不相同。内置类型用法Opaque用户自定义任意数据kubernetes.io/service-account-token服务账户令牌kubernetes.io/dockercfg~/.dockercfg文件序列化形式kubernetes.io/dockerconfigjson~/.docker/config.json文件序列化用于基本身份验证的kubernetes.io/basic-auth凭据形式io/tokenstartupboottokendata本文主要涉及到kubernetes.io/dockerconfigjsonSecret2.Dockerpulloverview大家都知道在dockerpull镜像之前其实需要dockerlogin才能登录,如下:我去pullharbor的时候,它提示没有进行认证。我们docker登录后,密码被加密保存在~/.docker/config.json中。~/.docker/config.json文件内容如下:{"auths":{"harbor.demo.com:5667":{"username":"admin","password":"Harbor12345","auth":"YWRtaW46SGFyYm9yMTIzNDU="}}}想一想,如果我们让k8s拉这个镜像到harbor上的时候,也必须要认证。让我们试试看。3.写一个部署文件(Secret没有配置),指定镜像拉取地址为harbor,镜像还是之前创建的简单springboot镜像。apiVersion:apps/v1kind:Deployaltymetadata:名称:pull-harbor-web-demospec:选择器:matchLabels:app:pull-harbor-web-demo模板:元数据:标签:app:pull-harbor-web-demo规范:容器:-名称:boot-demoimage:harbor.demo.com:5667/k8s-project/boot-k8s-demo:v2#指定从harbor拉取镜像端口:-containerPort:8081---apiVersion:v1kind:Servicemetadata:name:pull-harbor-web-demospec:selector:app:pull-harbor-web-demoports:-port:8081name:boot-demotargetPort:8081type:NodePort4。部署服务(未认证,失败)kubectlapply-fdeploy-many-container_test。yamlkubectlgetpods#可以看到pod状态为ImagePullBackOffkubectldescribepodsname|grepFailed#可以查看具体信息。可以看到在没有配置secret的情况下,k8s调度pod是因为无法拉取对应的image5.创建Secret5.1文件创建Secret(kubernetes.io/dockerconfigjson)可以使用以下两种类型值之一创建一个Secret来存储访问Docker仓库下载镜像的凭证kubernetes.io/dockercfg旧类型没有扩展kubernetes.io/dockerconfigjson类型kubernetes.io/dockerconfigjson是为了存储序列化形式的JSON数据,JSON也遵循~/.docker/config的格式规则.json文件,是~/.dockercfg的新版本格式。使用这种Secret类型时,Secret对象的data字段必须包含.dockerconfigjson键,其键值为base64编码的字符串,包含~/.docker/config.json文件的内容。下面是一个kubernetes.io/dockercfg类型的例子Secret:apiVersion:v1kind:Secretmetadata:name:secret-dockercfgtype:kubernetes.io/dockerconfigjson#指定类型使用新版本的data:.dockerconfigjson:|《
