云原生之容器编排实践-minikube传递秘钥使用阿里云私有镜像仓库

简介: 云原生之容器编排实践-minikube传递秘钥使用阿里云私有镜像仓库

6}V(7FXR4AG@5P27BAW{3XI.png

我正在参加「掘金·启航计划」

背景


前面我们提到:


有了私有的容器镜像仓库后,当在 minikube 或者 Kubernetes 中拉取私有容器镜像仓库的镜像时,并不能直接拉取,还需要进行认证秘钥信息的配置,这在后续文章中会专门介绍到。

那么,今天在这里就实践下通过 kubectl run 命令与 以YAML描述文件部署pod 两种方式下如何指定镜像拉取的密钥,完成从阿里云私有镜像仓库的拉取操作,然后部署到 minikube


OJ779@EKW8941{IQ{Q}P@5O.png


直接拉取报错


直接通过 kubectl run 命令运行一个 pod ,镜像来自我们前面上传到阿里云私有镜像仓库。然后报错了 ErrImagePull ,通过查看事件信息了解具体的报错信息。

Note:如果你的镜像仓库是公开的,那么直接 kubectl run 没啥问题。

# 直接kubectl run
[root@k8s0 ~]# kubectl run cloud-native --image=registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT
pod/cloud-native created
# 查看pod,发现拉取镜像错误ErrImagePull
[root@k8s0 ~]# kubectl get pods
NAME                              READY   STATUS         RESTARTS        AGE
cloud-native                      0/1     ErrImagePull   0               14s
hello-minikube-58647b77b8-srpbq   1/1     Running        5 (2m43s ago)   30d
# 查看事件,了解到底发生了什么
[root@k8s0 ~]# kubectl get events
LAST SEEN   TYPE      REASON                                             OBJECT                                MESSAGE
25s         Normal    Scheduled                                          pod/cloud-native                      Successfully assigned default/cloud-native to minikube
10s         Normal    Pulling                                            pod/cloud-native                      Pulling image "registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT"
9s          Warning   Failed                                             pod/cloud-native                      Failed to pull image "registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT": rpc error: code = Unknown desc = Error response from daemon: pull access denied for registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
9s          Warning   Failed                                             pod/cloud-native                      Error: ErrImagePull

从错误信息看:requested access to the resource is denied,是说我们对镜像资源的访问被拒绝了。


添加私有镜像仓库认证信息


显然,我们需要将私有镜像仓库的认证信息以某种方式告诉 minikube 或者 Kubernetes 。以下命令可以帮我们做这件事: kubectl create secret

# 添加认证信息
[root@k8s0 ~]# kubectl create secret docker-registry aliyunregistry --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=heartsuit --docker-password=YourDocker --docker-email=youremail
secret/aliyunregistry created
# 查看我们添加的认证信息:aliyunregistry
[root@k8s0 ~]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
aliyunregistry        kubernetes.io/dockerconfigjson        1      17m
default-token-xgvrt   kubernetes.io/service-account-token   3      30d

kubectl run使用我们添加的秘钥


minikube 或者 Kubernetes 添加好了私有镜像仓库认证信息, kubectl run 时能否自动知道这个秘钥信息吗?不幸的是,答案是否定的。但是查看 kubectl run 命令的帮助文档( kubectl run --help ),我并没有看到一个选项来指定拉取镜像的密钥,好像无法将镜像的密钥作为运行命令的一部分进行传递。不过,有个强大参数 --overrides 可以用来传递秘钥信息。


--overrides='{ "spec": { "template": { "spec": { "imagePullSecrets": [{"name": "your-registry-secret"}] } } } }'


完整的 kubectl run 命令如下,完成携带秘钥从阿里云私有镜像仓库的拉取、部署操作,成功:


kubectl run cloud-native1 --image=registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT --overrides='{ "spec": { "template": { "spec": { "imagePullSecrets": [{"name": "aliyunregistry"}] } } } }'

yaml描述文件中使用我们添加的秘钥


其实,上述 --overrides 传递参数的方式就是 yaml 描述文件中使用的格式,不过是以单行命令的形式出现。实际我们使用 yaml 描述时,是以下形式,重点关注 imagePullSecrets


  • cloud-native.yaml


apiVersion: v1
kind: Pod
metadata:
  name: cloud-native
spec:
  containers:
    - name: cloud-native
      image: registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT
  imagePullSecrets:
    - name: aliyunregistry

然后,应用以上描述文件 kubectl apply -f cloud-native.yaml 即可根据指定的秘钥完成从阿里云私有镜像仓库的拉取操作,然后部署到 minikube

Note:

  1. 为防止pod重名,可删除已有pod重新部署或换个名字再部署 kubectl delete pod cloud-native
  2. 这里示例的 yaml是使用Pod类型来运行的,其他类型的比如:Deployment, Service运行时关于私有镜像仓库秘钥的指定方式同样是通过imagePullSecrets实现的。

Reference


minikube.sigs.k8s.io/docs/handbo…


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
11月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1030 6
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
743 16
|
消息中间件 人工智能 监控
【云故事探索 | NO.15】:阿里云云原生加速鸣鸣很忙数字化
【云故事探索 | NO.15】:阿里云云原生加速鸣鸣很忙数字化
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
923 11
|
消息中间件 人工智能 监控
【云故事探索】NO.15:阿里云云原生加速鸣鸣很忙数字化
鸣鸣很忙集团作为中国最大休闲食品饮料连锁零售商,通过数字化与云原生技术实现快速扩张,4年完成其他企业10年的数字化进程。其采用阿里云全栈云原生方案,实现弹性扩容、智能补货、模块化开店等创新实践,支撑日均超430万交易数据稳定运行。未来将深化AI应用,推动供应链智能化与业务全面升级。
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
|
Ubuntu 网络安全 PHP
如何使用vscode的Docker插件管理ubuntu 拉取服务器的镜像以及创建容器
本测试镜像旨在记录使用vscode的Docker插件拉取病创建Dockerfile,以及拉取镜像。
|
Cloud Native 关系型数据库 分布式数据库
客户说|知乎基于阿里云PolarDB,实现最大数据库集群云原生升级
近日,知乎最大的风控业务数据库集群,基于阿里云瑶池数据库完成了云原生技术架构的升级。此次升级不仅显著提升了系统的高可用性和性能上限,还大幅降低了底层资源成本。
|
关系型数据库 MySQL Docker

热门文章

最新文章

推荐镜像

更多