在ACK集群中安装P2P加速套件

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

您可以在ACK集群中使用P2P加速功能提升镜像拉取速度,减少应用部署时间。本文介绍如何在ACK集群中安装P2P加速套件。

前提条件

  • 创建容器镜像服务ACR企业版实例,且创建的企业版实例需为标准版或高级版。具体操作,请参见创建企业版实例

  • 创建ACK集群。具体操作,请参见创建集群

  • 确认在容器镜像服务企业版实例中配置ACK集群对应的专有网络。具体操作,请参见配置专有网络的访问控制

步骤一:获取容器镜像服务ACR企业版实例ID并开启P2P模块

  1. 登录容器镜像服务控制台

  2. 在顶部菜单栏,选择所需地域。

  3. 在左侧导航栏,选择实例列表

  4. 实例列表页面单击目标企业版实例。

  5. 概览页面,打开组件设置板块下的P2P加速按钮,然后在弹出的对话框中单击确定

    警告

    关闭P2P加速组件前需要停止使用P2P功能,并从所有安装使用P2P组件的集群中卸载P2P组件,重新开启该功能需要重新安装P2P组件。

    image

步骤二:安装P2P组件(包含授予P2P组件相应的权限)

您可以通过以下三种方式授予P2P组件对容器镜像服务ACR企业版实例的访问权限。

  • 使用Worker RAM角色进行授权并安装。

    使用限制:容器镜像服务ACR企业版实例与ACK集群属于同一个阿里云账号。

  • 使用RAM用户的AK及SK进行授权并安装。

  • 使用RRSA进行授权并安装。

    使用限制:仅支持在1.22及以上版本的ACK标准版以及Pro版集群。

使用Worker RAM角色进行授权并安装

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  3. 集群信息页面,选择基本信息页签,在集群资源栏中,单击Worker RAM角色右侧链接。

  4. 在RAM角色基本信息的权限管理页面,单击目标权限策略名称。确认该权限策略是否存在如下内容,若不存在,单击修改策略内容,在策略内容区域,增加如下字段,单击确定

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "cr:GetInstanceVpcEndpoint",
                    "cr:ListInstanceEndpoint"
                ],
                "Resource": "*"
            }
        ]
    }
  5. 登录容器服务管理控制台,在左侧导航栏选择市场 > 应用市场

  6. 应用目录页面下方搜索框内输入ack-acr-acceleration-p2p,找到该组件,单击该组件卡片。

  7. 在组件详情页面,单击右上角的一键部署

  8. 创建面板中,选择集群命名空间,设置发布名称,单击下一步

  9. 参数配置面板,选择Chart版本为最新版本,设置acrInstances参数为上文获取的容器镜像实例ID。如果有多个容器镜像实例,在设置acrInstances参数时,实例之间使用英文半角逗号(,)隔开。

    # ID of ACR EE instances, support multi, e.g. "cri-xxx,cri-yyy"
    acrInstances: ""
    
    
    # Region of ACR EE instance, default is the region of the cluster on the cloud.
    # Need to be set if cross-regional access on the cloud cluster, or access on your IDC cluster.
    region: ""
    
    # VPC which is connected to the VPC network of the ACR EE instance, default is the VPC of the cluster on the cloud.
    # Need to be set if cross-regional access on the cloud cluster, or access on your IDC cluster through VPC network.
    vpcId: ""
    
    
    p2p:
      # Port of P2P Agent in host network
      port: 65001
    说明
    • 默认占用节点上的65001端口,如果有冲突,请根据实际情况修改。

    • 当ACK集群与ACR企业版实例处于同一地域时,参数Region和VPC ID可以留空;若ACK集群与ACR企业版实例处于不同地域时,Region需要设置为ACR企业版实例所在的地域,VPC ID需要设置为ACR企业版实例所绑定的VPC ID。

使用RAM用户的AK及SK进行授权并安装

  1. 创建RAM用户。具体操作,请参见创建RAM用户

  2. 为RAM用户添加如下权限,并查看访问密钥。具体操作,请参见查看RAM用户的AccessKey信息

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "cr:GetInstanceVpcEndpoint",
                    "cr:ListInstanceEndpoint"
                ],
                "Resource": "*"
            }
        ]
    }
  3. 登录容器服务管理控制台,在左侧导航栏选择市场 > 应用市场

  4. 应用目录页面下方搜索框内输入ack-acr-acceleration-p2p,找到该组件,单击该组件卡片。

  5. 在组件详情页面,单击右上角的一键部署

  6. 创建面板中,选择集群命名空间,设置发布名称,单击下一步

  7. 参数配置面板,选择Chart版本为最新版本,设置acrInstances参数为上文获取的容器镜像实例ID。如果有多个容器镜像实例,在设置acrInstances参数时,实例之间使用英文半角逗号(,)隔开,填入上文中查到的AccessKeyAccessSecret

    # ID of ACR EE instances, support multi, e.g. "cri-xxx,cri-yyy"
    acrInstances: ""
    
    
    # Please fill in the following parameters if the K8s cluster is built in your own IDC
    accessKey: ""
    accessKeySecret: ""
    
    # Region of ACR EE instance, default is the region of the cluster on the cloud.
    # Need to be set if cross-regional access on the cloud cluster, or access on your IDC cluster.
    region: ""
    
    # VPC which is connected to the VPC network of the ACR EE instance, default is the VPC of the cluster on the cloud.
    # Need to be set if cross-regional access on the cloud cluster, or access on your IDC cluster through VPC network.
    vpcId: ""
    
    
    p2p:
      # Port of P2P Agent in host network
      port: 65001
    说明
    • 默认占用节点上的65001端口,如果有冲突,请根据实际情况修改。

    • 当ACK集群与ACR企业版实例处于同一地域时,参数Region和VPC ID可以留空;若ACK集群与ACR企业版实例处于不同地域时,Region需要设置为ACR企业版实例所在的地域,VPC ID需要设置为ACR企业版实例所绑定的VPC ID。

使用RRSA进行授权并安装

基于适用于服务账户的RAM角色(RAM Roles for Service Accounts,简称RRSA)功能,可以在集群内为组件实现Pod维度的权限隔离。

RRSA功能目前仅支持在1.22及以上版本的集群中使用。

重要
  • 开启RRSA功能需要将组件升级到v0.3.6或以上版本。

  • 启用P2P组件的RRSA功能首先需要在集群基本信息中启用RRSA,再进行P2P组件的RRSA的相关配置。若操作顺序不对,在配置完成后,需要卸载P2P组件并重新安装,RRSA功能才会生效。

  1. 启用集群的RRSA功能。具体操作,请参见通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离

  2. 配置RAM角色的容器镜像服务ACR的资源访问权限。

    • 若ACR企业版实例与ACK集群属于同一阿里云账号。

      例如A用户为ACK集群和ACR企业版实例的所有者,在A用户中创建RAM用户。具体操作,请参见创建RAM用户。并添加如下权限策略。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "cr:GetInstanceVpcEndpoint",
                      "cr:ListInstanceEndpoint"
                  ],
                  "Resource": "*"
              }
          ]
      }
      说明
      • 将示例<oidc_issuer_url>替换为当前集群中OIDC提供商的URL。该URL可以在容器服务管理控制台集群信息页面的基本信息页签中获取。

      • 将示例中的<oidc_provider_arn>替换为当前集群OIDC提供商的ARN。该ARN可以在容器服务管理控制台集群信息页面的基本信息页签中获取。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:aud": [
                  "sts.aliyuncs.com"
                ],
                "oidc:iss": "<oidc_issuer_url>",
                "oidc:sub": [
                  "system:serviceaccount:aliyun-acr-acceleration:ack-acr-acceleration-p2p-job-sa",
                  "system:serviceaccount:aliyun-acr-acceleration:ack-acr-acceleration-p2p-sa"
                ]
              }
            },
            "Effect": "Allow",
            "Principal": {
              "Federated": [
                "<oidc_provider_arn>"
              ]
            }
          }
        ],
        "Version": "1"
      }
    • 若ACR企业版实例与ACK集群属于不同的阿里云账号。

      例如A用户为ACK集群所有者,B用户为ACR企业版实例所有者,现在需要授权A用户的ACK集群具备访问B用户的容器镜像服务ACR资源的权限。

      在A用户中创建RAM用户。具体操作,请参见创建RAM用户。添加AliyunSTSAssumeRoleAccess权限策略,授予这个角色具有角色扮演的权限。并修改其信任策略。

      说明

      将示例<oidc_issuer_url>替换为当前集群中OIDC提供商的URL。该URL可以在容器服务管理控制台集群信息页面的基本信息页签中获取。

      将示例中的<oidc_provider_arn>替换为当前集群OIDC提供商的ARN。该ARN可以在容器服务管理控制台集群信息页面的基本信息页签中获取。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:aud": [
                  "sts.aliyuncs.com"
                ],
                "oidc:iss": "<oidc_issuer_url>",
                "oidc:sub": [
                  "system:serviceaccount:aliyun-acr-acceleration:ack-acr-acceleration-p2p-job-sa",
                  "system:serviceaccount:aliyun-acr-acceleration:ack-acr-acceleration-p2p-sa"
                ]
              }
            },
            "Effect": "Allow",
            "Principal": {
              "Federated": [
                "<oidc_provider_arn>"
              ]
            }
          }
        ],
        "Version": "1"
      }

      在B用户中创建一个用户ACR相关权限的角色,选择信任策略管理,添加A用户角色ARN。对B用户的角色添加如下权限策略,授予这个角色如下权限。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "cr:GetInstanceVpcEndpoint",
                      "cr:ListInstanceEndpoint"
                  ],
                  "Resource": "*"
              }
          ]
      }
      说明

      该RAM角色可以设置角色最大会话时间,可设置时间范围为3600秒到43200秒,而角色会话时间在下文的配置项中的expireDuration也需要设置。推荐此处取值的设置和配置项的expireDuration的值一致。允许expireDuration小于等于角色最大会话时间。

  3. 登录容器服务管理控制台,在左侧导航栏选择市场 > 应用市场

  4. 应用目录页面下方搜索框内输入ack-acr-acceleration-p2p,找到该组件,单击该组件卡片。

  5. 在组件详情页面,单击右上角的一键部署

  6. 创建面板中,选择集群命名空间,设置发布名称,单击下一步

  7. 参数配置面板,选择Chart版本为最新版本,设置registryInstances参数为上文获取的容器镜像实例ID。如果有多个容器镜像实例,在设置registryInstances参数时,实例之间使用英文半角逗号(,)隔开。按照如下表格填入RRSA相关配置项。

    参数

    说明

    rrsa.enable

    是否开启RRSA。

    true

    rrsa.rrsaRoleARN

    上文中A用户创建的角色的ARN。

    acs:ram::aaa

    rrsa.rrsaOIDCProviderRoleARN

    上文中A用户ACK控制台集群基本信息中的提供商ARN。

    acs:ram::bbb

    rrsa.assumeRoleARN

    上文中B用户创建的角色的ARN。同账号场景不填。

    acs:ram::ccc

    rrsa.expireDuration

    上文中B用户创建的角色的会话时间,等同于免密组件生成的临时凭证的有效期。同账号场景不填。

    重要

    expireDuration的值不应大于B用户创建角色的最大会话时间。

    默认为3600。取值区间为3600~43200,单位为秒。

    同时需要将B用户创建角色的最大会话时间调整为43200。

    说明
    • 默认占用节点上的65001端口,如果有冲突,请根据实际情况修改。

    • 当ACK集群与ACR企业版实例处于同一地域时,参数Region和VPC ID可以留空;若ACK集群与ACR企业版实例处于不同地域时,Region需要设置为ACR企业版实例所在的地域,VPC ID需要设置为ACR企业版实例所绑定的VPC ID。

    # ID of ACR EE instances, support multi, e.g. "cri-xxx,cri-yyy"
    acrInstances: ""
    
    rrsa:
      enable: false
      rrsaRoleARN: ""
      rrsaOIDCProviderRoleARN: ""
      assumeRoleARN: ""
      expireDuration: 3600
    
    # Region of ACR EE instance, default is the region of the cluster on the cloud.
    # Need to be set if cross-regional access on the cloud cluster, or access on your IDC cluster.
    region: ""
    
    # VPC which is connected to the VPC network of the ACR EE instance, default is the VPC of the cluster on the cloud.
    # Need to be set if cross-regional access on the cloud cluster, or access on your IDC cluster through VPC network.
    vpcId: ""
    
    
    p2p:
      # Port of P2P Agent in host network
      port: 65001