华为云用户手册

  • 创建Job 以下是一个Job配置,其计算π到2000位并打印输出。Job结束需要运行50个Pod,这个示例中就是打印π 50次,并行运行5个Pod,Pod如果失败最多重试5次。 apiVersion: batch/v1 kind: Job metadata: name: pi-with-timeout spec: completions: 50 # 运行的次数,即Job结束需要成功运行的Pod个数 parallelism: 5 # 并行运行Pod的数量,默认为1 backoffLimit: 5 # 表示失败Pod的重试最大次数,超过这个次数不会继续重试。 activeDeadlineSeconds: 100 # 表示Pod超期时间,一旦达到这个时间,Job及其所有的Pod都会停止。 template: # Pod定义 spec: containers: - name: pi image: perl command: - perl - "-Mbignum=bpi" - "-wle" - print bpi(2000) restartPolicy: Never 根据completions和parallelism的设置,可以将Job划分为以下几种类型。 表1 任务类型 Job类型 说明 使用示例 一次性Job 创建一个Pod直至其成功结束 数据库迁移 固定结束次数的Job 依次创建一个Pod运行直至completions个成功结束 处理工作队列的Pod 固定结束次数的并行Job 依次创建多个Pod运行直至completions个成功结束 多个Pod同时处理工作队列 并行Job 创建一个或多个Pod直至有一个成功结束 多个Pod同时处理工作队列
  • 普通任务(Job)和定时任务(CronJob) Job和CronJob是负责批量处理短暂的一次性任务(short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。 Job:是Kubernetes用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment、StatefulSet)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出(Pod自动删除)。 CronJob:是基于时间的Job,就类似于Linux系统的crontab文件中的一行,在指定的时间周期运行指定的Job。 任务负载的这种用完即停止的特性特别适合一次性任务,比如持续集成。
  • 创建CronJob 相比Job,CronJob就是一个加了定时的Job,CronJob执行时是在指定的时间创建出Job,然后由Job创建出Pod。 apiVersion: batch/v1 kind: CronJob metadata: name: cronjob-example spec: schedule: "0,15,30,45 * * * *" # 定时相关配置 jobTemplate: # Job的定义 spec: template: spec: restartPolicy: OnFailure containers: - name: pi image: perl command: - perl - "-Mbignum=bpi" - "-wle" - print bpi(2000) CronJob的格式从前到后就是: Minute Hour Day of month Month Day of week 如 "0,15,30,45 * * * * " ,前面逗号隔开的是分钟,后面第一个* 表示每小时,第二个 * 表示每个月的哪天,第三个表示每月,第四个表示每周的哪天。 如果您想要每个月的第一天里面每半个小时执行一次,那就可以设置为" 0,30 * 1 * * " 如果您想每个星期天的3am执行一次任务,那就可以设置为 "0 3 * * 0"。 更详细的CronJob格式说明请参见https://zh.wikipedia.org/wiki/Cron。
  • Pod annotation CCE集群+bursting的使用场景涉及到自定义注解,相关注解含义如下表所示。 annotation key 描述 相关文档 scheduling.cci.io/managed-by-profile 标记当前pod被哪个profile资源管理。 调度负载到CCI virtual-kubelet.cci.io/burst-pod-cpu 标记弹性后规整的cpu资源。 资源配额 virtual-kubelet.cci.io/burst-pod-memory 标记弹性后规整的memory资源。 资源配额 coordinator.cci.io/inject-volumes CCI pod日志采集相关,日志采集插件注入。 日志 logconf.k8s.io/fluent-bit-configmap-reference CCI pod日志采集相关,日志采集插件注入。 日志 logconfigs.logging.openvessel.io CCI pod日志采集相关,日志采集插件注入。 日志 sandbox-volume.openvessel.io/volume-names CCI pod日志采集相关,日志采集插件注入。 日志 coordinator.cci.io/image-replacement 镜像地址前缀替换相关。 镜像
  • 功能概览 使用CCE集群+bursting基于如下模型,用户需要重点关注下发负载和调度。 下发负载涉及到用户给负载进行的配置项,和用户自身的业务高度相关。 工作负载配置项 功能描述 功能规格 相关文档拓展 调度 用户可以通过多种方式来管理CCE集群的工作负载,来控制其调度到CCI服务。通过合理的调度策略配置,提升用户集群的资源利用率。 支持4种调度策略。 支持2种管理调度策略的方式。 支持多个虚拟节点调度。 调度负载到CCI 资源配额 用户通过配置pod的cpu、memory等字段约束容器使用资源规格和上限。插件对资源规格进行规整,尽可能为用户降低成本。 提供对pod资源配额进行规整的能力。 资源配额 镜像 用户通过镜像配置自身业务镜像,将自己的业务容器运行在华为云CCE集群+CCI服务上。 支持修改镜像配置方式。 支持原地升级镜像。 镜像 存储 用户通过存储相关的配置为工作负载外挂存储卷,以完成业务中数据持久存储的诉求。 支持多种存储类型。 支持替换工作负载hostpath配置方式。 存储 网络 用户通过网络配置规划CCE集群和CCI集群之间的网络拓扑。 支持CCI侧负载通过service发布。 支持CCE集群pod与CCI集群中pod通过service互通。 支持指定cluster-dns。 支持pod绑定全域弹性公网ip。 网络 日志 用户可以通过同时安装CCE Log Collector插件和bursting插件,采集CCI侧工作负载的日志。 支持弹性CCI的负载通过CCE Log Collector上报日志。 支持日志自动转储。 日志 监控 用户可以通过配置插件对接监控平台,提升弹性CCI工作负载的可观测性。 支持对接 AOM 。 支持对接普罗米修斯。 监控
  • 资源使用说明 CCE集群+bursting的使用场景涉及到华为云周边服务的搭配使用,如下表格详细描述了涉及到的周边服务。 涉及服务 资源说明 备注 CCI 插件会在CCI服务新建一个名为“cce-burst-”+“CCE集群ID”的命名空间。 不建议直接在CCI服务使用该命名空间,如需使用CCI服务,请另外新建命名空间。 CCI服务命名空间不产生计费。 CCE CCE侧的工作负载、Secret、Congfigmap、PV、PVC会同步到CCI,同时也占用CCE节点的资源。 CCE集群资源规模1000 pod+1000 configmap建议申请2U4G节点规格。 CCE集群资源规模2000 pod+2000 configmap建议申请4U8G节点规格。 CCE集群资源规模4000 pod+4000 configmap建议申请8U16G节点规格。 ELB 开启“支持CCE集群pod与CCI集群pod通过service互通”功能bursting插件会自动创建ELB资源。 创建共享型性能保障规格的ELB,名称为cce-lb-xxx。 当卸载插件时,该ELB资源也会被自动清除。 VPC 弹性CCI的负载共享使用CCE集群所在VPC。 CCI命名空间Service网段为10.247.0.0/16,CCE集群的VPC子网网段请避开该网段。 SWR 创建弹性到CCI的工作负载选择镜像时,直接对接华为云SWR服务。 创建负载请确认镜像已被正确上传至您的SWR仓库。
  • 资源规整算法 假设根据pod资源规格算法求得CPU(core)、Memory(Gi),则自动规整规则如下: 将Pod中除了BestEffort的每个应用容器和初始化容器的CPU向上调整至0.25核的整数倍, Memory向上调整至大于等于0.2Gi。 CCE突发弹性引擎(对接 CCI)插件1.5.16版本及之后,不再进行容器级别的向上规整,仅进行pod级别的向上规整。 若此时Pod的CPU大于32u或者Memory大于256Gi,则不再继续进行自动调整,否则将继续调整。 将整个pod的CPU配额向上调整至0.25核的整数倍,Memory配额向上调整至1Gi的整数倍。 若pod Memory/CPU的比值小于2,需将pod Memory向上调整至大于等于CPU的2倍,且满足是1Gi的整数倍。 若pod Memory/CPU的比值大于8,需将pod CPU向上调整至大于等于Memory的1/8,且满足是0.25核的整数倍。 以上对pod级别资源向上调整造成的增量CPU和Memory,全部添加到Pod中第一个不为BestEffort的容器上。 BestEffort容器是指没有配置Requests和Limits的容器。 经过资源自动规整后,Pod规格约束: pod的CPU取值在0.25核~32核范围内,或者等于48核或64核,并且要求值为0.25的整数倍。 Memory在1Gi~256Gi范围内,或者等于384Gi或512Gi,且Memory是整数。 满足Memory/CPU配比值在2~8之间。 用户可以通过CCE侧的pod的annotation查看规整后的规格。 virtual-kubelet.cci.io/burst-pod-cpu: 0.5u virtual-kubelet.cci.io/burst-pod-memory: 1Gi
  • 资源规整用例说明 资源规格 (CPU MEM) 规整后规格(CPU MEM) 说明 37U 37Gi 无法创建pod弹性到CCI。 CPU规格无效。 30U 257Gi 无法创建pod弹性到CCI。 存算比大于8,提高CPU。但无法满足CPU规格有效,拦截。 0.35U 0.5Gi 0.5U 1Gi CPU向上取整0.25的整数倍,MEM向上取整1的整数倍。存算比符合要求,不做调整。 0.35U 1.5Gi 0.5U 2Gi CPU向上取整0.25的整数倍,MEM向上取整1的整数倍。存算比符合要求,不做调整。 0.45U 18Gi 2.25U 18Gi CPU向上取整0.25的整数倍,MEM向上取整1的整数倍。存算比大于8,提高CPU。 2U 2Gi 2U 4Gi 存算比小于2,提高MEM。
  • pod资源规格算法 弹性CCI的pod规格,根据container资源的Requests和Limits计算,调整至CCI允许范围。 pod规格的计算方式遵循如下规则: 所有应用容器和初始化容器对某个资源的Requests和Limits均会被设置为相等的值,如果配置了Limits,则取Limits值;如果没有配Limits,则取Requests值。 pod对某个资源的Requests和Limits,是取如下两项的较大者: 所有应用容器对某个资源的Limits之和。 所有初始化容器Limits的最大值。 Pod规格约束: Pod的CPU需大于0。 经过资源自动规整后,Pod的CPU在0.25核~32核范围内,或者等于48核或64核;Memory在1Gi~512Gi范围内,且必须为1Gi的整数倍,且满足CPU/Memory配比值在1:2~1:8之间。
  • 操作步骤 在创建负载的过程中,容器配置填写完成后,打开“启动镜像快照”开关,选择自动匹配镜像快照或指定镜像快照。 自动匹配镜像快照 自动匹配将从用户创建的所有可用镜像快照中选择最优的镜像。按以下顺序进行匹配: a. 镜像匹配度:优先选择匹配度高的镜像快照,匹配度指的是Pod和镜像快照两者在镜像上的匹配情况。 b. 创建时间:优先选择创建时间更新的镜像快照。 明确指定 指定已有的镜像快照,并在“镜像快照”页签中选择镜像快照中的镜像。该镜像缓存必须为创建完成可用(Available)状态。
  • 操作步骤 登录云容器实例管理控制台,左侧导航栏中选择“镜像快照”,在右侧页面单击“创建镜像快照”。 添加基本信息。 镜像快照名称 请输入以小写字母或数字开头,小写字母、数字、中划线(-)、点(.)组成(其中两点不能相连,点不能与中划线相连),小写字母或数字结尾的1到63字符的字符串。 开启快照保留时间 打开开关,填写快照保留天数。未开启开关,默认为永久。 快照过期后,仍会占用配额,需定期审核过期镜像快照后删除。 容器镜像 第三方可以直接输入镜像地址,或单击“选择容器镜像”按钮,进入镜像列表,选择镜像。 我的镜像:展示了您上传到 容器镜像服务 的镜像。如果您想要在容器 镜像服务 中上传镜像,请参考客户端上传镜像或页面上传镜像。 如您是 IAM 用户,您需要参考(可选)上传镜像进行权限设置后才可使用账号的私有镜像。 镜像单层解压后的实际大小不能超过20G。 开源镜像中心:展示了镜像中心的公共镜像。 共享镜像:展示了容器镜像服务中他人共享的镜像。 镜像指定完成后,需要选择镜像的版本号。您还可以单击下方“添加容器镜像”按钮,添加多个容器镜像。 镜像快照大小 填写镜像快照大小,最小为10GiB,范围为10-400G。推荐按照所有缓存镜像大小总和的2倍设置快照大小。 添加镜像快照构建信息。 命名空间 选择已有命名空间或单击“创建命名空间”按钮,创建新的命名空间。 如果您要缓存的镜像包含私有镜像仓库,请确保命名空间绑定的vpc与私有镜像仓库网络互通。如需缓存公网镜像,需要命名空间绑定的vpc配置SNAT规则,参考从容器访问公网。 镜像仓库访问凭证 如果您容器里选择的镜像是私有的,请输入所选镜像的仓库地址、用户名、密码,用来拉取镜像。单击“添加凭证”,可添加多个。 勾选“镜像快照默认使用 2核4G 规格的CCI实例进行制作,收取费用为制作过程中产生的费用”。 确认镜像快照配置信息和费用显示正常,单击“确认创建”。
  • cci_admin_trust委托说明 cci_admin_trust委托具有Tenant Administrator权限。Tenant Administrator拥有除IAM管理外的全部云服务管理员权限,用于对CCI所依赖的其他云服务资源进行调用,且该授权仅在当前区域生效。 由于CCI对其他云服务有许多依赖,如果没有Tenant Administrator权限,可能会因为某个服务权限不足而影响CCI功能的正常使用。因此在使用CCI服务期间,请不要自行删除或者修改cci_admin_trust委托。
  • 监控指标 在AOM控制台,可以查看容器实例的指标,指标内容请参见表1。 表1 监控指标 指标ID 指标名称 指标含义 取值范围 单位 cpuUsage CPU使用率 该指标用于统计测量对象的CPU使用率。服务实际使用的与限制的CPU核数量比率。 0~100% 百分比(Percent) cpuCoreLimit CPU内核总量 该指标用于统计测量对象限制的CPU核总量。 ≥1 核(Core) cpuCoreUsed CPU内核占用 该指标用于统计测量对象已经使用的CPU核个数。 ≥0 核(Core) memCapacity 物理内存总量 该指标用于统计测量对象限制的物理内存总量。 ≥0 兆字节(Megabytes) memUsage 物理内存使用率 该指标用于统计测量对象已使用内存占限制物理内存总量的百分比。 0~100% 百分比(Percent) memUsed 物理内存使用量 该指标用于统计测量对象实际已经使用的物理内存(Resident Set Size)。 ≥0 兆字节(Megabytes)
  • 操作步骤 账号A委托账号B以联邦用户的身份管理账号A中的资源,需要完成以下步骤: 创建委托(委托方操作) 登录委托方(账号A)IAM控制台创建委托,需要填写被委托方(账号B)的账号名称,并授予被委托方(账号B)云容器实例所有权限“CCI FullAccess”,拥有该权限的用户可以执行云容器实例所有资源的创建、删除、查询、更新操作。 为委托账号授权命名空间权限(委托方操作) 进入委托方(账号A)的CCI控制台,在权限管理页面为被委托方(账号B)授予命名空间下资源的权限,通过权限设置可以让不同的委托账号拥有操作指定Namespace下Kubernetes资源的权限。 联邦身份认证(被委托方操作) 登录被委托方(账号B),在被委托方(账号B)中进行联邦身份认证操作。 在委托联邦用户管理资源之前,需对被委托方进行联邦身份认证,联邦身份认证过程主要分为两步:建立互信关系并创建身份提供商和在华为云配置身份转换规则。 创建身份提供商时,会创建出默认的身份转换规则,用户需要单击“编辑规则”将默认的身份转换规则更新掉,或者将默认的身份转换规则删除,重新创建新的规则。如果默认的身份转换规则在没有删掉的情况下直接添加新规则,可能会匹配上这条默认规则,添加的新规则就会不生效。 分配委托权限(被委托方操作) 如果被委托方(账号B)下的子用户想要切换委托,就必须由被委托方(账号B)分配委托权限。因此,为了使得联邦用户拥有管理委托方(账号A)资源的权限,就需要被委托方(账号B)授予联邦用户所在用户组(federation_group)自定义策略“federation_agency”。“federation_group”用户组为联邦用户所在的用户组,也是配置身份转换规则时,写入规则中的联邦用户组。 切换角色(被委托方操作) 账号B以及分配了委托权限的联邦用户,可以切换角色至委托方账号A中,根据权限管理委托方的资源。
  • 操作步骤 登录云容器实例管理控制台,在左侧导航栏中选择“权限管理”,进入权限管理页面。 单击“添加授权”,进入添加授权页面。 图1 添加授权 在添加授权页面,选择要授权使用的命名空间,此处选择“rbac-test-3”。 图2 选择命名空间 为“委托账号”增加“admin”权限,在展开的选项中进行如下配置: 用户/用户组:选择“委托账号”,并在二级选项中选择需要授权的委托账号。 权限:选择“admin”。 图3 为委托账号授予admin权限 单击“创建”,完成委托账号在命名空间中的相应权限设置。
  • 漏洞详情 Kubernetes官方发布安全漏洞CVE-2020-8557,CVSS Rating: Medium (5.5) CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H/CR:H/IR:H/AR:M。 漏洞源于kubelet的驱逐管理器(eviction manager)中没有包含对Pod中挂载的/etc/hosts文件的临时存储占用量管理,因此在特定的攻击场景下,一个挂载了/etc/hosts的Pod可以通过对该文件的大量数据写入占满节点的存储空间,从而造成节点的拒绝访问(Denial of Service)。 参考链接:https://github.com/kubernetes/kubernetes/issues/93032
  • 漏洞详情 近日Kubernetes官方披露了kube-apiserver组件的安全漏洞CVE-2020-8559,CVSS Rating: Medium (6.4) CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:H/A:H。攻击者可以通过截取某些发送至节点kubelet的升级请求,通过请求中原有的访问凭据转发请求至其它目标节点,攻击者可利用该漏洞提升权限。 参考链接:https://github.com/kubernetes/kubernetes/issues/92914
  • 漏洞详情 Kubernetes官方发布安全漏洞CVE-2020-13401,CVSS Rating: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:L/I:L/A:L (6.0 Medium)。 漏洞源于IPv6动态分配除提供了IPv6的DHCP技术外,还支持Router Advertisement技术。路由器会定期向节点通告网络状态,包括路由记录。客户端会通过NDP进行自身网络配置。 恶意攻击者可以篡改主机上其他容器或主机本身的IPv6路由记录,实现中间人攻击。即使现在系统或者服务上没有直接使用IPv6地址进行网络请求通知,但是如果DNS返回了A(IPv4)和AAAA(IPv6)记录,许多HTTP库都会尝试IPv6进行连接,如果再回退到IPv4,这为攻击者提供了响应的机会。 参考链接:https://github.com/kubernetes/kubernetes/issues/91507
  • 漏洞分析结果 综合以上分析,CCI服务不受本次漏洞影响,因为: CCI当前集群基于Kubernetes 1.15版本,但kube-proxy组件使用自研代码,不涉及net.ipv4.conf.all.route_localnet=1参数。 CCI的集群形态与普通kubernetes集群不同。CCI基于安全容器并与华为云网络服务深度整合,用户VPC网络与CCI物理主机网络不在同一个2层域中。CCI服务侧没有信息泄漏风险。 用户容器内核默认没有开启net.ipv4.conf.all.route_localnet=1参数,用户绑定在localhost的进程无法进行同VPC内跨节点访问。用户侧没有信息泄漏风险。
  • 漏洞详情 Kubernetes官方发布安全漏洞(CVE-2020-8558),Kubernetes节点的设置允许相邻主机绕过本地主机边界进行访问。 Kubernetes集群节点上如果有绑定在127.0.0.1上的服务,则该服务可以被同一个LAN或二层网络上的主机访问,从而获取接口信息。如果绑定在端口上的服务没有设置身份验证,则会导致该服务容易受到攻击。 参考链接: https://github.com/kubernetes/kubernetes/issues/92315
  • 配置说明 您需要拥有一个主账号,仅主账号、授予了CCIFullAccess权限的用户或拥有RBAC所有权限的用户,才可以对其他用户进行授权操作。 本例将对用户和用户组授予操作不同命名空间资源的权限,在您的实际业务中,您可根据业务需求仅对用户或用户组授予不同的权限。 本例仅用于给用户或用户组在未授权过的命名空间下新增权限,已授权的用户或用户组的权限可以在“权限管理”的列表“操作”栏中单击“编辑”进行修改。 当给用户或用户组添加多个权限时,多个权限会同时生效(取并集);为用户组设置的权限将作用于用户组下的全部用户。 在开启RBAC鉴权场景下,同类权限取并集,不同类权限取交集。例如,IAM细粒度鉴权中给用户组添加了多个权限,此时权限取最高权限,同理CCI权限管理给用户或用户组添加了多个权限,此时权限也取最高权限,即为同类权限取并集。当用户拥有CCI CommonOperations权限时,本可以创建无状态负载,但如该用户以及用户所在用户组未在目标Namespace下被赋予对应RBAC权限,则创建无状态负载会鉴权失败,即为不同类权限取交集。
  • 示例流程 命名空间是对一组资源和对象的抽象整合。在同一个集群内可创建不同的命名空间,不同命名空间中的数据彼此隔离,使得它们既可以共享同一个集群的服务,也能够互不干扰。命名空间的一个重要的作用是充当一个虚拟的集群,用于多种工作用途,满足多用户的使用需求。 本章节将沿用创建用户并授权使用CCI中创建的IAM用户“James”和用户组“开发人员组”进行说明,为IAM用户“James”和用户组“开发人员组”添加命名空间权限,可以参考如下操作: 步骤一:为IAM用户/用户组添加命名空间权限 步骤二:用户登录并验证权限
  • 步骤一:为IAM用户/用户组添加命名空间权限 本步骤以主账号给CCI CommonOperations用户(James)赋予Namespace下view权限为例,被授权的CCI CommonOperations用户在该Namespace下只有只读权限。 登录云容器实例管理控制台,在左侧导航栏中选择“权限管理”,进入权限管理页面。 单击“添加授权”,进入添加授权页面。 图1 添加授权 在添加授权页面,选择要授权使用的命名空间,此处选择“cci-namespace-demo-rbac”。 图2 选择命名空间 为“开发人员组”增加“admin”权限,在展开的选项中进行如下配置: 用户/用户组:选择“用户组”,并在二级选项中选择“开发人员组”。 权限:选择“admin”。 图3 为用户组授予admin权限 单击下方的“添加命名空间权限”,为用户“James”增加在另一个命名空间“cci-namespace-demo-rbac01”的权限,在展开的选项中进行如下配置: 命名空间:选择“cci-namespace-demo-rbac01”。 用户/用户组:选择“用户”,并在二级选项中选择“James”。 权限:选择“view”。 图4 添加命名空间权限 单击“创建”,完成以上用户和用户组在命名空间中的相应权限设置。 图5 命名空间权限列表 经过以上操作,授权结果如下: 由于“开发人员组”包含IAM用户“James”,因此IAM用户“James”也同时获得了在命名空间“cci-namespace-demo-rbac”的“admin”权限。 为IAM用户“James”增加了在命名空间“cci-namespace-demo-rbac01”的“view”权限。
  • 命名空间权限 Kubernetes RBAC API定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding。当前CCI仅支持ClusterRole、RoleBinding,这两种类型之间的关系和简要说明如下: ClusterRole:描述角色和权限的关系。在Kubernetes的RBAC API中,一个角色定义了一组特定权限的规则。整个Kubernetes集群范围内有效的角色则通过ClusterRole对象实现。 RoleBinding:描述subjects(包含users,groups)和角色的关系。角色绑定将一个角色中定义的各种权限授予一个或者一组用户,该用户或用户组则具有对应绑定ClusterRole定义的权限。 表1 RBAC API所定义的两种类型 类型名称 说明 ClusterRole ClusterRole对象可以授予整个集群范围内资源访问权限。 RoleBinding RoleBinding可以将同一Namespace中的subject(用户)绑定到某个具有特定权限的ClusterRole下,则此subject即具有该ClusterRole定义的权限。 当前仅支持用户使用ClusterRole在Namespace下创建RoleBinding。
  • 云审计 服务支持的CCI操作列表 CCI通过云审计服务(Cloud Trace Service,简称 CTS )为您提供云服务资源的操作记录,记录内容包括您从云管理控制台或者开放API发起的云服务资源操作请求以及每次请求的结果,供您查询、审计和回溯使用。 表1 云审计服务支持的CCI操作列表 操作名称 事件名称 创建一个Service对象 createService 删除一个Service对象 deleteService 删除指定Namespace下的所有Service对象 deleteServicesByNamespace 替换指定的Service对象 replaceService 更新指定的Service对象 updateService 删除一个Endpoint对象 deleteEndpoint 删除指定Namespace下的所有Endpoint对象 deleteEndpointsByNamespace 替换指定Namespace下的Endpoint对象 replaceEndpoint 更新指定Namespace下的Endpoint对象 updateEndpoint 创建一个Deployment对象 createDeployment 删除一个Deployment对象 deleteDeployment 删除指定Namespace下的所有Deployment对象 deleteDeploymentsByNamespace 替换指定Namespace下的Deployment对象 replaceDeployment 更新指定Namespace下的Deployment对象 updateDeployment 创建一个Statefulset对象 createStatefulset 删除一个Statefulset对象 deleteStatefulset 删除指定Namespace下的所有Statefulset对象 deleteStatefulsetsByNamespace 替换指定Namespace下的Statefulset对象 replaceStatefulset 更新指定Namespace下的Statefulset对象 updateStatefulset 创建一个Job对象 createJob 删除一个Job对象 deleteJob 删除指定Namespace下的所有Job对象 deleteJobsByNamespace 替换指定Namespace下的某个Job对象的状态 replaceJob 更新指定Namespace下的某个Job对象的状态 updateJob 创建一个Cronjob对象 createCronjob 删除一个Cronjob对象 deleteCronjob 删除指定Namespace下的所有Cronjob对象 deleteCronjobsByNamespace 替换指定Namespace下的某个Cronjob对象的状态 replaceCronjob 更新指定Namespace下的某个Cronjob对象的状态 updateCronjob 创建一个Ingress对象 createIngress 删除一个Ingress对象 deleteIngress 删除指定Namespace下的所有Ingress对象 deleteIngressesByNamespace 替换指定Namespace下的特定Ingress对象 replaceIngress 更新指定Namespace下的某个Ingress对象的状态 updateIngress 创建一个Namespace createNamespace 删除一个Namespace deleteNamespace 创建一个Pod createPod 更新指定Pod updatePod 替换指定Pod replacePod 删除一个Pod deletePod 删除Namespace下所有的Pod deletePodsByNamespace 删除指定Event deleteEvent 创建一个Configmap createConfigmap 更新指定Configmap updateConfigmap 替换指定Configmap replaceConfigmap 删除一个Configmap deleteConfigmap 删除指定Namespace下所有的Configmap deleteConfigmapsByNamespace 创建一个Secret createSecret 更新指定Secret updateSecret 替换指定Secret replaceSecret 删除指定Secret deleteSecret 删除指定Namespace下所有的Secret deleteSecretsByNamespace 删除指定Network deleteNetwork 创建一个Network createNetwork 删除指定Namespace下所有的Network deleteNetworksByNamespace 更新指定Network updateNetwork 替换指定Network replaceNetwork 创建network-attachment-definition createNetworkAttachmentDefinition 删除指定Namespace下所有的network-attachment-definitions deleteNetworkAttachmentDefinitionsByNamespace 删除指定network-attachment-definition deleteNetworkAttachmentDefinition 创建PV createPersistentvolume 删除指定Namespace下所有的PV deletePersistentvolumesByNamespace 替换指定PV replacePersistentvolume 更新指定PV updatePersistentvolume 删除指定PV deletePersistentvolume 创建PVC createPersistentvolumeclaim 导入已有PVC createPersistentvolumeclaimByStorageInfo 删除指定Namespace下所有的PVC deletePersistentvolumeclaimsByNamespace 替换指定PVC replacePersistentvolumeclaim 更新指定PVC updatePersistentvolumeclaim 删除指定PVC deletePersistentvolumeclaim 购买一个套餐包 createPackageproduct 购买活动套餐包 createActiveproduct 创建Kubeflow job createKubeflowJob 删除指定Namespace下所有的Kubeflow job deleteKubeflowJobsByNamespace 替换指定Kubeflow job replaceKubeflowJob 更新指定Kubeflow job updateKubeflowJob 删除指定Kubeflow job deleteKubeflowJob 创建Volcano job createVolcanoJob 删除指定Namespace下所有的Volcano job deleteVolcanoJobsByNamespace 替换指定Volcano job replaceVolcanoJob 更新指定Volcano job updateVolcanoJob 删除指定Volcano job deleteVolcanoJob 创建Agency createAgency 更新配额 modifyQuota 创建一个imagecache对象 createImagecache 删除一个imagecache对象 deleteImagecache 替换指定的imagecache对象 replaceImagecache 更新指定的imagecache对象 updateImagecache 上传模板 createChart 更新指定模板 updateChart 删除指定模板 deleteChart 上传插件 createAddon 更新指定插件 updateAddon 删除指定插件 deleteAddon 创建模板实例 createRelease 更新模板实例 updateRelease 删除模板实例 deleteRelease 创建插件实例 createAddonInstance 更新插件实例 updateAddonInstance 删除插件实例 deleteAddonInstance 创建插件readme createAddonReadme 删除插件Readme deleteAddonReadme 父主题: 审计
  • CCI自定义策略样例 示例1:更新命名空间 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "cci:namespace:update" ] } ] } 示例2:拒绝用户删除命名空间 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 如果您给用户授予CCIFullAccess的系统策略,但不希望用户拥有CCIFullAccess中定义的删除命名空间权限(cci:namespace:delete),您可以创建一条相同Action的自定义策略,并将自定义策略的Effect设置为Deny,然后同时将CCIFullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对CCI执行除了删除命名空间外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Action": [ "cci:namespace:delete" ], "Effect": "Deny" } ] } 示例3:多个授权项策略 一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下: { "Version": "1.1", "Statement": [ { "Action": [ "ecs:cloudServers:resize", "ecs:cloudServers:delete", "ecs:cloudServers:delete", "ims:images:list", "ims:serverImages:create" ], "Effect": "Allow" } ] }
  • 漏洞详情 2019年6月18日,Redhat发布安全公告,Linux内核处理器TCP SACK模块存在3个安全漏洞(CVE-2019-11477、CVE-2019-11478、CVE-2019-11479),这些漏洞与最大分段大小(MSS)和TCP选择性确认(SACK)功能相关,攻击者可远程发送特殊构造的攻击包造成拒绝服务攻击,导致服务器不可用或崩溃。 参考链接: https://www.suse.com/support/kb/doc/?id=7023928 https://access.redhat.com/security/vulnerabilities/tcpsack https://www.debian.org/lts/security/2019/dla-1823 https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/SACKPanic? https://lists.centos.org/pipermail/centos-announce/2019-June/023332.html https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md 表1 漏洞信息 漏洞类型 CVE-ID 披露/发现时间 华为云修复时间 输入验证错误 CVE-2019-11477 2019-06-17 2019-07-11 资源管理错误 CVE-2019-11478 2019-06-17 2019-07-11 资源管理错误 CVE-2019-11479 2019-06-17 2019-07-11
  • 附:TCP SACK介绍 TCP是面向连接的协议。当双方希望通过TCP连接进行通信时,他们通过TCP握手交换某些信息建立连接,例如发起一个TCP请求,通过SYN发送初始序列ID、确认ID、连接使用的最大数据包段大小(MSS)、认证信息和处理选择性确认(SACK)等。整体TCP连接通过我们熟知的三次握手最终建立。 TCP通过一个数据段单元发送和接收用户数据包。 TCP数据段由TCP头、选项和用户数据组成。每个TCP段都有序列号(SEQ)和确认号(ACK)。 接收方通过SEQ号和ACK号来跟踪成功接收了哪些段。ACK号下一个预期接受的段。 示例: 上图中用户A通过13个100字节的段发送1k字节的数据,每个段具有20字节的TCP头,总计是13个段。在接收端,用户B接收了段1,2,4,6,8-13,而段3,5和7丢失,B没有接收到。 通过使用ACK号,用户B告诉A,他需要段3,用户A读取到B接收到2后没有收到3,A将重新发送全部段,尽管B已经收到了4,6和8-13段。这就导致了网络的低效使用。
  • PersistentVolumeClaim(PVC) 云容器实例使用PVC申请并管理持久化存储,PVC可以让您无需关心底层存储资源如何创建、释放等动作,而只需要申明您需要何种类型的存储资源、多大的存储空间。 在实际使用中,您可以通过Pod中的Volume来关联PVC,通过PVC使用持久化存储,如图1所示。 图1 使用持久化存储 在云容器实例控制台,您可以导入已经创建的EVS、SFS和SFS Turbo,导入这些存储资源的同时会创建一个PVC用于这些存储资源。 您还可以在云容器实例控制台直接购买EVS和SFS,购买动作不仅购买实际的存储资源,同时还会创建PVC,也就是在这里购买就会直接导入到云容器实例中。
  • 查看Pod 有时,您也许会通过调用创建Pod接口或者使用kubectl直接创建Pod,这些Pod并不在某个负载或任务之下,不方便通过控制台管理。云容器实例提供了Pod管理功能,您可以通过“选择来源”更方便找到需要的Pod。 图2 选择Pod来源 您可以查看到所有Pod详情,包括基本信息、Pod中容器组成、Pod的监控信息、事件,以及使用远程终端访问Pod。您还可以对Pod进行删除操作,并查看Pod的日志。 图3 Pod详情
共100000条