自建Kubernetes集群如何使用免密组件拉取容器镜像

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: aliyun-acr-credential-helper是一个可以在ACK集群中免密拉取ACR个人版或企业版私有镜像的组件。该组件会默认安装在所有ACK集群中。本文列举四个场景介绍如何使用免密组件拉取私有镜像。

aliyun-acr-credential-helper是一个可以在ACK集群中免密拉取ACR个人版或企业版私有镜像的组件。该组件会默认安装在所有ACK集群中。本文列举四个场景介绍如何使用免密组件拉取私有镜像。


前提条件


注意

  • 在Kubernetes资源(例如无状态应用Deployment)模板中配置拉取凭证(imagePullSecret)会导致免密组件失效,如果需使用免密组件,请避免手工配置拉取凭证(imagePullSecret)。
  • 如果部署的Kubernetes资源(例如无状态应用Deployment)使用了自定义的ServiceAccount,需先调整免密组件配置文件中Service-Account字段,使其作用于自定义的ServiceAccount,再进行部署资源操作。
  • 在集群中创建新的Service Account一段时间后,免密插件根据ACK集群默认权限生成的ACR私有镜像拉取Token才会更新到应用使用到的Service Account中, 使用Service Account的应用才会使用Token去拉取镜像。如果创建完Service Account之后立即创建应用则会出现因鉴权失败无法拉取的情况。
  • 免密插件默认覆盖ACK中所有命名空间中默认的ServiceAccount中的imagePullSecret字段。被覆盖的 ServiceAccount会随着对应kube-system命名空间中acr-configuration配置项中的service-account字段变动而变动。
  • 在修改kube-system命名空间中的acr-configuration配置项时,请确认缩进是否与给出的场景的例子相同。建议直接复制对应场景的YAML内容到编辑器中,修改对应的值然后直接应用到集群,以保证YAML格式的正确性。


背景信息

使用免密组件涉及的镜像及集群限制如下:

  • 镜像
  • 支持拉取容器镜像服务企业版实例和个人版实例中的私有镜像。
  • 支持拉取集群当前用户容器镜像服务中的私有镜像,通过跨账号授权或AccessKey ID和AccessKey Secret配置可以拉取其他用户的私有镜像。
  • 支持跨地域拉取容器镜像服务中的私有镜像。
  • 集群
  • 支持集群多命名空间免密拉取。
  • 支持的集群类型:
  • 专有版Kubernetes集群。
  • 托管版Kubernetes集群。
  • 注册集群
  • 支持的集群版本:
  • 自建Kubernetes集群:高于或等于1.11.2的版本默认支持免密拉取镜像。


步骤一:在自建集群中配置免密组件RAM权限

在注册集群中安装组件前,您需要在接入集群中设置AK用来访问云服务的权限。设置AK前,您需要创建RAM用户并为其添加访问相关云资源的权限。

  1. 创建RAM用户。有关如何创建RAM用户的具体步骤,请参见创建RAM用户
  2. 创建权限策略。有关创建权限策略的具体操作步骤,请参见创建自定义策略。请授权RAM权限如下所示:
{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "cr:GetAuthorizationToken",
                "cr:ListInstanceEndpoint",
                "cr:PullRepository"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}
  1. 为RAM用户添加权限。有关如何为RAM用户授权的具体步骤,请参见为RAM用户授权
  2. 为RAM用户创建AK。有关如何为子账户创建AK,请参见获取AccessKey
  3. 使用AK在自建Kubernetes集群中创建名为alibaba-addon-secret的Secret资源,步骤二中安装事件中心相关组件时将自动引用此AK访问对应的云服务资源。
kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your access key id>' --from-literal='access-key-secret=<your access key secret>'

您需要将上述代码中替换为您获取的AK信息。

步骤二:升级组件并对组件进行配置

在使用免密组件拉取镜像前,您可能需要升级组件并对组件进行配置,操作步骤如下。

  1. 升级aliyun-acr-credential-helper组件。
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面,单击目标集群操作列下的更多 > 系统组件管理
  4. 安全区域,找到aliyun-acr-credential-helper,单击升级
  1. 设置acr-configuration配置项。通过控制台方式设置acr-configuration配置项。
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面,单击目标集群下的详情
  4. 集群信息页面左侧导航栏,选择配置管理 > 配置项
  5. 配置项页面的上方命名空间下拉框中,选择kube-system,然后找到配置项acr-configuration,然后通过以下两种方式配置acr-configuration。
  • 方式一:单击其右侧的编辑,设置配置项键和值。如果您没有acr-configuration配置项,请参见创建配置项。关于如何更新配置项,请参见修改配置项
  • 方式二:单击其右侧的YAML编辑,设置配置项键和值。
  1. acr-configuration配置项的键和值说明如下。
配置项键 配置项键说明 配置项值
service-account 使免密组件作用于指定的服务账号。 默认为Default

说明 如果要配置多个请以逗号分隔, 如果设置为“*”, 表示支持所有命名空间下的所有ServiceAccount。

acr-registry-info 容器镜像的实例信息数组,YAML多行字符串格式,每个实例以三元组方式配置。

说明 实例信息三元组:

  • instanceId:实例ID,企业版实例必须配置此项。
  • regionId:可选,默认为本地地域。
  • domains:可选,默认为相应实例的所有域名。若要指定个别域名,多个以逗号分隔。
默认值为空,表示免密拉取本地地域的默认容器镜像实例仓库。

针对企业版容器镜像实例,配置示例如下:

- instanceId: cri-xxx
  regionId: cn-hangzhou
  domains: xxx.com,yyy.com

针对默认版容器镜像实例,配置示例如下:

- instanceId: ""
  regionId: cn-hangzhou
  domains: xxx.com,yyy.com
watch-namespace 期望能免密拉取镜像的Namespace。 默认值为Default

说明 当取值为ALL时,表示期望所有Namespace都能免密拉取。如果需要配置多个Namespace时,以逗号分隔。

expiring-threshold 本地Cache Token过期阈值。 默认值为15m(建议使用15 m)。

  1. 通过kubectl命令行的方式设置acr-configuration配置项。
  1. 执行以下命令打开acr-configuration配置项的编辑页。
kubectl edit cm acr-configuration -n kube-system
  1. 根据实际情况设置acr-configuration配置项的值。企业版和默认版容器镜像实例下设置acr-configuration配置项的示例如下:
  • 企业版
apiVersion: v1
data:
  acr-api-version: "2018-12-01"
  acr-registry-info: |-
    - instanceId: "cri-xxx"
      regionId: "cn-hangzhou"
  expiring-threshold: 15m
  service-account: default
  watch-namespace: all
kind: ConfigMap
metadata:
 name: acr-configuration
  namespace: kube-system
 selfLink: /api/v1/namespaces/kube-system/configmaps/acr-configuration
  • 默认版
apiVersion: v1
data:
  acr-api-version: "2018-12-01"
  acr-registry-info: |-
    - instanceId: ""
        regionId: "cn-hangzhou"
  expiring-threshold: 15m
  service-account: default
  watch-namespace: all
kind: ConfigMap
metadata:
 name: acr-configuration
 namespace: kube-system
 selfLink: /api/v1/namespaces/kube-system/configmaps/acr-configuration


场景一:拉取个人版实例和企业实例的私有镜像

ACK支持同时拉取企业版和个人版的私有镜像,只拉取企业版的私有镜像,只拉取个人版的私有镜像。根据您的使用场景,按照以下方式修改配置项acr-configuration中的configMap。配置步骤请参见上述配置组件。以下为配置内容:

  • 配置拉取企业版的私有镜像。
data:    
    service-account: "default"    
    watch-namespace: "all"    
    expiring-threshold: "15m"    
    notify-email: "cs@aliyuncs.com"    
    acr-registry-info: |      
      - instanceId: "cri-xxx"
        regionId: "cn-hangzhou"         
        domains: "xxx.com","yyy.com"
  • 配置拉取个人版的私有镜像。
data:     
    service-account: "default"
    watch-namespace: "all"
    expiring-threshold: "15m"
    notify-email: "cs@aliyuncs.com"
    acr-registry-info: |
      - instanceId: ""
        regionId: "cn-hangzhou"
        domains: "xxx.com","yyy.com"
  • 配置同时拉取个人版和企业版的私有镜像。
data:
    service-account: "default"
    watch-namespace: "all"
    expiring-threshold: "15m"
    notify-email: "cs@aliyuncs.com"
    acr-registry-info: |
      - instanceId: ""
      - instanceId: "cri-xxxx"


场景二:配置跨地域拉取镜像权限

如果需要拉取的镜像与当前ACK集群不属于同一地域的时候,需要修改配置项acr-configuration中的configMap

例如,默认仓库同时拉取北京地域与杭州地域的镜像,配置如下。配置步骤请参见上述配置组件


data:
    service-account: "default"
    watch-namespace: "all"
    expiring-threshold: "15m"
    notify-email: "cs@aliyuncs.com"
    acr-registry-info: |
      - instanceId: ""
        regionId: cn-beijing
      - instanceId: ""
        regionId: cn-hangzhou


相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
13天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
55 2
|
23天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
15天前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
2天前
|
Kubernetes Cloud Native API
深入理解Kubernetes——容器编排的王者之道
深入理解Kubernetes——容器编排的王者之道
15 1
|
15天前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
15天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 &quot;busybox-container&quot; 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
|
15天前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
23天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
68 4
|
24天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
57 3
|
15天前
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版
  • 下一篇
    无影云桌面