云服务器内容精选

  • 漏洞详情 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段。这就导致了网络的低效使用。
  • 方式二:使用profile控制pod调度到CCI 登录集群节点,配置profile资源。 vi profile.yaml 限制CCE集群最大负载数,配置local maxNum和scaleDownPriority的profile模板示例如下: apiVersion: scheduling.cci.io/v1kind: ScheduleProfilemetadata: name: test-cci-profile namespace: defaultspec: objectLabels: matchLabels: app: nginx strategy: localPrefer location: local: maxNum: 20 # 当前暂不支持local/cci同时配置maxNum scaleDownPriority: 10 cci: {} 限制CCI集群最大负载数,配置cci maxNum和scaleDownPriority的profile的模板示例如下: apiVersion: scheduling.cci.io/v1kind: ScheduleProfilemetadata: name: test-cci-profile namespace: defaultspec: objectLabels: matchLabels: app: nginx strategy: localPrefer location: local: {} cci: maxNum: 20 # 当前暂不支持local/cci同时配置maxNum scaleDownPriority: 10 strategy:调度策略选择。可配置策略值:auto、enforce、localPrefer。详情请参见调度策略。 location内可配置线下IDC和云上pod限制数量maxNum和pod缩容优先级scaleDownPriority,maxNum取值范围[0~int32],scaleDownPriority取值范围[-100, 100]。 local字段和cci字段不可以同时设置maxNum。 缩容优先级为非必填项参数,如果不配置缩容优先级,默认值将为空。
  • 约束与限制 metrics-server无法采集到通过bursting插件弹性到CCI 2.0上的Pod的监控数据,可能会影响HPA工作。如果HPA无法正常工作,请参考弹性伸缩进行处理。 从CCE bursting弹到CCI 2.0的pod,与从CCI 2.0前端或API创建的pod,如非必要,命名空间和pod名请勿同时重复,这将导致CCI 2.0侧的pod监控数据异常。从CCE侧查看pod的监控不受影响。
  • 问题三:插件由1.5.18及以上版本回退至低于1.5.18后,Pod通过Service访问出现异常 问题原因:插件升级到1.5.18及以上版本之后,新弹性到CCI的Pod中的sidecar无法兼容1.5.18以下版本的插件,因此插件回退版本后会导致这些Pod中的Service访问异常。插件在低于1.5.18版本时弹性到CCI的Pod不受影响。 解决方案: 方案一:将插件再升级到1.5.18及以上版本。 方案二:将Service访问异常的Pod删除重建,重建后弹性到CCI的Pod Service访问将恢复正常。
  • 约束与限制 当前只有负载的原生标签能够被ScheduleProfile匹配,使负载能够被ScheduleProfile管理,将CCE集群的Pod调度到CCI。例如通过ExtensionProfile加到负载上的标签不能够被ScheduleProfile匹配,因此不会被ScheduleProfile管理调度功能。 当弹性到CCI的资源调度失败时,bursting节点会被锁定半小时,期间无法调度至CCI。用户可通过CCE集群控制台,使用kubectl工具查看bursting节点状态,若节点被锁定,可手动解锁bursting。
  • 问题一:用户负载无法调度到CCI,登录CCE节点执行kubectl get node发现virtual-kubelet节点状态为不可调度。 问题原因:CCI资源售罄导致弹性到CCI的资源调度失败,bursting节点会被锁定半小时(状态变为SchedulingDisabled),期间无法调度至CCI。 解决方案:用户可通过CCE集群控制台,使用kubectl工具查看bursting节点状态,如果节点被锁定,可手动解锁bursting节点。
  • 方式一:通过配置labels控制pod调度到CCI 通过CCE集群控制台(console)创建pod调度到CCI。通过CCE集群创建工作负载时,选择CCI弹性承载策略配置,选择“不开启”以外的任意策略。 在CCE集群控制台(console)创建工作负载时,CCI弹性承载支持勾选“bursting-node”或者“virtual-kubelet”,如果使用CCI 1.0请勾选“virtual-kubelet”,如果使用CCI 2.0请勾选“bursting-node”。目前CCI 2.0仅对白名单用户开放,如需使用CCI 2.0服务,请提交工单申请开启CCI 2.0服务。 通过yaml文件在CCE集群节点创建pod调度CCI。成功安装bursting插件后,登录CCE集群节点,在工作负载的yaml文件中添加virtual-kubelet.io/burst-to-cci标签。 apiVersion: apps/v1kind: Deploymentmetadata: name: test namespace: default labels: virtual-kubelet.io/burst-to-cci: 'auto' # 弹性到CCIspec: replicas: 2 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - image: 'nginx:perl' name: container-0 resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: [] imagePullSecrets: - name: default-secret
  • 使用SWR拉取用户业务镜像 方式一:通过console选取SWR镜像 用户镜像上传SWR。使用方式请参考:SWR官方文档。 在华为云CCE控制台创建负载选择镜像。 对接到SWR中的镜像。请确保您的SWR仓库中已正确上传了镜像,SWR服务使用详情请参见:SWR官方文档。 方式二:通过在CCE集群node选取SWR镜像 登录CCE集群节点。 查看SWR镜像仓库中的镜像地址。 获取镜像地址:swr.***.com/cci-test/nginx:1.0.0.x86_64_test。 配置工作负载yaml。 apiVersion: apps/v1kind: Deploymentmetadata: name: test namespace: default labels: virtual-kubelet.io/burst-to-cci: 'auto' # 弹性到CCIspec: replicas: 2 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - image: swr.***.com/cci-test/nginx:1.0.0.x86_64_test name: container-0 resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: [] imagePullSecrets: - name: default-secret 部署工作负载。 kubectl apply -f dep.yaml
  • 操作步骤 登录云容器实例管理控制台,左侧导航栏中选择“镜像快照”,在右侧页面单击“创建镜像快照”。 添加基本信息。 镜像快照名称 请输入以小写字母或数字开头,小写字母、数字、中划线(-)、点(.)组成(其中两点不能相连,点不能与中划线相连),小写字母或数字结尾的1到63字符的字符串。 开启快照保留时间 打开开关,填写快照保留天数。未开启开关,默认为永久。 快照过期后,仍会占用配额,需定期审核过期镜像快照后删除。 容器镜像 第三方可以直接输入镜像地址,或单击“选择容器镜像”按钮,进入镜像列表,选择镜像。 我的镜像:展示了您上传到 容器镜像服务 的镜像。如果您想要在容器 镜像服务 中上传镜像,请参考客户端上传镜像或页面上传镜像。 如您是 IAM 用户,您需要参考(可选)上传镜像进行权限设置后才可使用账号的私有镜像。 镜像单层解压后的实际大小不能超过20G。 开源镜像中心:展示了镜像中心的公共镜像。 共享镜像:展示了容器镜像服务中他人共享的镜像。 镜像指定完成后,需要选择镜像的版本号。您还可以单击下方“添加容器镜像”按钮,添加多个容器镜像。 镜像快照大小 填写镜像快照大小,最小为10GiB,范围为10-400G。推荐按照所有缓存镜像大小总和的2倍设置快照大小。 添加镜像快照构建信息。 命名空间 选择已有命名空间或单击“创建命名空间”按钮,创建新的命名空间。 如果您要缓存的镜像包含私有镜像仓库,请确保命名空间绑定的vpc与私有镜像仓库网络互通。如需缓存公网镜像,需要命名空间绑定的vpc配置SNAT规则,参考从容器访问公网。 镜像仓库访问凭证 如果您容器里选择的镜像是私有的,请输入所选镜像的仓库地址、用户名、密码,用来拉取镜像。单击“添加凭证”,可添加多个。 勾选“镜像快照默认使用 2核4G 规格的CCI实例进行制作,收取费用为制作过程中产生的费用”。 确认镜像快照配置信息和费用显示正常,单击“确认创建”。
  • 使用第三方镜像拉取用户业务镜像 使用CCI提供的工具创建第三方镜像仓库认证secret。 imagepull-secret-generator --ak=$ak --sk=$sk --private-user=$user --private-password=$password --output-file-path=my-imagepull-secret.json --project-name=region --secret-name=my-imagepull-secret --swr-address=swr.***.com 登录CCE集群节点,为集群创建secret。 kubectl apply -f my-imagepull-secret.json 创建负载,使用secret。 在spec.imagePullSecrets中指定第三方仓库认证secret。 apiVersion: apps/v1kind: Deploymentmetadata: labels: app: test-imagepull virtual-kubelet.io/burst-to-cci: enforce name: test-imagepullspec: replicas: 1 selector: matchLabels: app: test-imagepull template: metadata: labels: app: test-imagepull spec: containers: - image: xxx/my-image:latest imagePullPolicy: Always name: nginx resources: limits: cpu: 1 memory: 2Gi requests: cpu: 1 memory: 2Gi imagePullSecrets: - name: my-imagepull-secret
  • 漏洞详情 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
  • 简介 CCE集群成功将负载弹性到CCI运行起负载后,用户可以通过CCE的“CCE Log Collector”插件来收集pod的日志,提升工作负载的可观测性。通过阅读本章用户可以快速搭建日志平台,在CCE的日志观测CCI侧日志。 弹性到CCI的负载会默认开启容器标准输出采集并上报到 应用运维管理 AOM 每月赠送每个租户500M的免费日志存储空间,超过500M时将根据实际使用量进行收费,计费规则请参见产品价格详情。 若要关闭标准输出采集可通过在Pod annotation中指定log.stdoutcollection.kubernetes.io: '{"collectionContainers": []}'实现,参考示例: kind: DeploymentapiVersion: apps/v1metadata: name: test namespace: defaultspec: replicas: 1 template: metadata: annotations: log.stdoutcollection.kubernetes.io: '{"collectionContainers": []}' spec: containers: - name: container-1 image: nginx:latest
  • 操作步骤 账号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中,根据权限管理委托方的资源。
  • 约束与限制 使用场景 使用说明 CCE内容器日志采集 + CCI集群容器日志采集 CCE集群内的工作负载支持三种日志采集类型: 容器标准输出:采集集群内指定容器日志,仅支持Stderr和Stdout的日志。 容器文件日志:采集集群内指定容器内的文件日志。 节点文件日志:采集集群内指定节点路径的文件。 须知: 弹性到CCI的工作负载仅支持“容器文件日志”类型的采集策略。 不支持采集的日志文件类型 不支持容器中软链路径的日志采集。 pod通过指定系统、设备、cgroup、tmpfs等挂载目录下的日志无法被采集。 弹性CCI的pod关联多个日志采集策略 为了更好的采集日志,建议为pod预留充足内存。pod被第一个日志策略关联请预留至少50MiB内存。每增加一个关联日志采集策略,建议多预留5MiB内存。 超长日志采集 单条日志最大容量为250KB,超过会被丢弃。 日志采集文件名 audit.log,oss.icAgent.trace,oss.script.trace,audit_*.log这几类日志默认不采集,请勿使用以上几类名称命名采集日志文件。 超长日志文件名 容器中长度超过190的日志文件无法被采集。容器中长度在180~190范围的日志文件仅支持采集第一个文件。 日志采集速率 单个Pod单行日志采集速率不超过10000条/秒,多行日志不超过2000条/秒。 最大采集文件数 单个Pod所有日志采集策略监听的文件数不超过2000个文件。 容器停止前日志采集 当容器被停止时,如果出现因网络延迟、资源占用多等原因导致的采集延时,可能会丢失容器停止前的部分日志。