0
点赞
收藏
分享

微信扫一扫

阿里云-容器服务 Kubernetes 版

1 介绍

阿里云容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)是全球首批通过Kubernetes一致性认证的容器服务平台,提供高性能的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理,让您轻松高效地在云端运行Kubernetes容器化应用。

1.1 产品形态

托管和专有容器服务 Kubernetes 版包含ACK托管集群和ACK专有集群。其中,ACK托管集群支持ACK集群基础版和ACK集群Pro版。

比较项

ACK专有集群

ACK托管集群

主要特点

您需要自行创建集群控制面板(Master节点)及集群节点。

您只需创建集群节点,控制面板由ACK创建并托管。

可以对集群基础设施进行更细粒度的控制,需要自行规划、维护、升级服务器集群。

简单、低成本、高可用,无需管理控制面板。

收费方式

集群管理免费,但需要承担Master节点、Worker节点以及其他基础资源的费用。

ACK集群基础版:集群管理免费,但需要承担节点以及其他基础资源的费用。ACK集群Pro版:按照集群数量方式收费。

应用场景

适用于所有场景。

适用于所有场景。

用户画像

成本相对不敏感懂Kubernetes有运维技术能力资源规划明确对集群控制面板(Master节点)有定制需求可以完全自管集群

期望降低成本更关注业务应用Kubernetes刚上手减少Kubernetes运维投入不用维护集群控制面板


1.2 核心功能

  • 集群管理
  • 集群创建:您可根据需求创建多种形态集群,选择类型丰富的工作节点,并进行灵活的自定义配置。更多信息,请参见创建Kubernetes托管版集群创建Kubernetes专有版集群
  • 集群升级:一键升级K8s版本,统一管理系统组件升级。更多信息,请参见升级ACK集群
  • 弹性伸缩:通过控制台一键垂直扩缩容来快速应对业务波动,同时支持服务级别的亲和性策略和横向扩展。
  • 调度:支持不同弹性资源的混合调度、异构资源的精细化调度、批量计算的任务调度等,提升应用的性能和集群整体资源的利用率。
  • 多集群管理:支持线下IDC和多云多区域的集群统一接入实现混合云应用管理。
  • 授权管理:支持RAM(Resource Access Management)授权和RBAC权限管理。
  • 节点池
  • 支持节点池生命周期管理,支持在同一集群中配置不同规格的节点池,例如交换机、运行时、OS、安全组等。更多信息,请参见节点池概述
  • 应用管理
  • 应用创建:支持多种类型应用,从镜像、模板的创建,支持环境变量、应用健康、数据盘、日志等相关配置。
  • 应用全生命周期:支持应用查看、更新、删除,应用历史版本回滚、应用事件查看、应用滚动升级、应用替换升级以及通过触发器重新部署应用。
  • 应用调度:支持节点间亲和性调度、应用间亲和性调度、应用间反亲和性调度三种策略。
  • 应用伸缩:支持手动伸缩应用容器实例,HPA自动伸缩策略。
  • 应用发布:支持灰度发布和蓝绿发布。
  • 应用目录:支持应用目录,简化云服务集成。
  • 应用中心:应用部署后,以统一的视角展现整体应用的拓扑结构,同时对于持续部署等场景进行统一的版本管理与回滚。
  • 应用备份和恢复:支持对Kubernetes应用进行备份和恢复。更多信息,请参见集群内备份和恢复应用
  • 存储
  • 存储插件:支持CSI存储插件。更多信息,请参见存储CSI概述
  • 存储卷和存储声明:
  • 支持创建块存储、NAS、OSS和CPFS类型的存储卷。
  • 支持持久化存储卷声明(PVC)挂接存储卷。
  • 支持存储卷的动态创建和迁移。
  • 支持以脚本方式查看和更新存储卷和存储声明。
  • 网络
  • 支持Flannel容器网络和Terway容器网络。更多信息,请参见网络概述
  • 支持定义Sevice和Pod的CIDR。
  • 支持NetworkPolicy。更多信息,请参见使用网络策略Network Policy
  • 支持路由Ingress。更多信息,请参见Ingress管理
  • 支持服务发现DNS。更多信息,请参见DNS概述
  • GPU/NPU
  • 支持对各种异构计算资源进行统一调度和运维管理,能够显著提高GPU、NPU等异构计算集群资源的使用效率。更多信息,请参见异构计算集群概述
  • 运维与安全
  • 可观测性
  • 监控:支持集群、节点、应用、容器实例层面的监控;支持prometheus插件。
  • 日志:支持集群日志查看;支持应用日志采集;支持容器实例日志查看。
  • 报警:支持容器服务异常事件报警,以及容器场景指标报警。更多信息,请参见容器服务报警管理
  • 集群巡检与诊断(AIOps)
  • 使用集群检查:支持在集群升级、迁移等操作前执行集群检查,确认集群是否符合要求。
  • 使用集群巡检:扫描集群运行状况,发现集群中存在的潜在风险,例如云资源配额余量、Kubernetes集群关键资源水位等,排查风险项并根据推荐的解决方案修复问题。
  • 使用集群诊断:提供一键故障诊断能力,包括节点诊断、Pod诊断、Service诊断、Ingress诊断、内存诊断、网络诊断,可以辅助您定位集群中出现的问题。
  • 成本分析:支持可视化集群资源使用量及成本分布,以提升集群资源利用率。
  • 安全中心:支持运行时刻的安全策略管理,应用安全配置巡检和运行时刻的安全监控和告警,提升容器安全整体纵深防御能力。
  • 安全沙箱:可以让应用运行在一个轻量虚拟机沙箱环境中,拥有独立的内核,具备更好的安全隔离能力。适用于不可信应用隔离、故障隔离、性能隔离、多用户间负载隔离等场景。
  • 机密计算:基于Intel SGX提供的可信应用或用于交付和管理机密计算应用的云原生一站式机密计算平台,帮助您保护数据使用中的安全性、完整性和机密性。机密计算可以让您把重要的数据和代码放在一个特殊的可信执行加密环境。

2 操作指南

2.1 授权

容器服务ACK的授权体系包含对基础资源层的RAM授权和对ACK集群层的RBAC(Role-Based Access Control)授权两部分。本文介绍容器服务ACK集群访问控制授权的组成及方式。

ACK授权体系

ACK的授权体系包含对基础资源层的RAM授权以及对ACK集群层的RBAC授权。ACK授权体系如下图所示。

阿里云-容器服务 Kubernetes 版_命名空间

  • RAM授权对应ACK集群的运维操作,需要获取ACK产品及其所依赖阿里云云产品的OpenAPI操作权限,主要包括以下操作:
  • 集群:创建、查看、升级、删除
  • 节点池:创建、修改、扩缩容
  • 授权管理
  • 集群监控、日志、事件
  • RBAC授权对应的是运行于ACK集群中Kubernetes应用的运维操作,需要获取ACK集群及其命名空间的操作权限,主要包括对以下Kubernetes对象的增删改查操作:
  • 工作负载:Deployment、StatefulSet、DaemonSet、Job、CronJob、Pod、ReplicaSet、HPA等
  • 网络:Service、Ingress、NetworkPolicy等
  • 存储:PV、PVC、StorageClass等
  • Namespace、ConfigMap 、Secrets等

因此当RAM用户或RAM角色需要进行集群运维和应用运维时,您需要依次对其进行RAM授权和RBAC授权。在进行RBAC授权前,您需要先进行RAM授权。三种典型场景的授权操作,如下所示:

  • 如果授权对象为集群与集群内应用的运维人员,请参见场景一:授权对象为集群与集群内应用的运维人员
  • 如果授权对象为集群内应用的开发人员,请参见场景二:授权对象为集群内应用的开发人员
  • 如果授权对象为集群内应用的权限管理员,请参见场景三:授权对象为集群内应用的权限管理员

RAM授权

在企业对接RAM的账号系统中,运维人员通过RAM用户或RAM角色管理云服务资源是一个常见场景。然而默认情况下RAM用户或RAM角色没有使用云服务OpenAPI的任何权限,为了保证RAM用户或RAM角色的正常使用,需要对RAM用户或RAM角色授权。

当您需要对集群进行可见性、扩缩容、添加节点等操作时,需要进行RAM授权。更多信息,请参见自定义RAM授权策略

RAM授权支持以下两种方式:

  • RAM系统策略授权:用于指定全局资源的读写访问控制。当RAM用户或RAM角色具有阿里云账号下所有集群的运维管理权限时,建议使用系统策略进行快捷授权。为RAM用户或RAM角色添加系统策略权限,请参见为RAM用户或RAM角色授权
  • 容器服务的常用系统策略如下表所示,您可以根据业务需求添加对应的系统策略。

系统策略名称

说明

AliyunCSFullAccess

当RAM用户或RAM角色需要容器服务产品所有OpenAPI的访问权限。说明此系统策略仅包含针对ACK产品的RAM授权。如您需要对ACK集群中的应用进行运维,还需要进行RBAC授权,请参见RBAC授权。

AliyunVPCReadOnlyAccess

当RAM用户或RAM角色在创建集群时选择指定VPC。

AliyunECSReadOnlyAccess

当RAM用户或RAM角色为集群添加已有节点或查看节点详细信息。

AliyunContainerRegistryFullAccess

当RAM用户或RAM角色需要全局管理阿里云账号内的业务镜像。

AliyunLogReadOnlyAccess

当RAM用户或RAM角色在创建集群时选择已有Log Project存储审计日志,或查看指定集群的配置巡检。

AliyunAHASReadOnlyAccess

当RAM用户或RAM角色需要使用集群拓扑功能。

AliyunRAMFullAccess

当RAM用户或RAM角色需要负责阿里云账号内的全局授权管理。

AliyunYundunSASReadOnlyAccess

当RAM用户或RAM角色需要查看指定集群的运行时安全监控。

AliyunARMSReadOnlyAccess

当RAM用户或RAM角色需要查看集群阿里云Prometheus插件的监控状态。

AliyunKMSReadOnlyAccess

当RAM用户或RAM角色在创建Pro集群时启用Secret落盘加密能力。

AliyunESSReadOnlyAccess

当RAM用户或RAM角色需要执行节点池的相关操作,如查看、编辑和扩缩容等。

  • RAM自定义策略授权:用于对目标RAM用户或RAM角色实现细粒度的云资源访问控制。另外,如果目标RAM用户或RAM角色有基于SDK的二次开发需求,还可实现API级别的权限控制。
  • ACK集群维度的RAM自定义策略授权流程,请参见自定义RAM授权策略
  • ACK应用维度的访问控制,您可以通过为服务账户的RAM角色(RAM Roles for Service Accounts,简称RRSA)自定义策略,在集群内实现Pod维度的OpenAPI权限隔离。更多信息,请参见通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离
  • 例如,当RAM用户或RAM角色需要具有对指定OSS Bucket的读取权限时,可以参考以下策略。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                      "oss:ListBuckets",
                      "oss:GetBucketStat",
                      "oss:GetBucketInfo",
                      "oss:GetBucketTagging",
                      "oss:GetBucketAcl" 
                      ],    
            "Resource": "acs:oss:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "oss:ListObjects",
                "oss:GetBucketAcl"
            ],
            "Resource": "acs:oss:*:*:myphotos"
        },
        {
            "Effect": "Allow",
            "Action": [
                "oss:GetObject",
                "oss:GetObjectAcl"
            ],
            "Resource": "acs:oss:*:*:myphotos/*"
        }
    ]
}

Role和ClusterRole

RBAC的Role或ClusterRole中包含一组代表相关权限的规则。

Role总是用来在某个命名空间内设置访问权限;在您创建Role时,您必须指定该Role所属的命名空间。

与之相对,ClusterRole则是一个集群作用域的资源。这两种资源的名字不同(Role和ClusterRole)是因为Kubernetes对象是命名空间作用域或集群作用域的,不可两者兼具。

ClusterRole有若干用法。您可以用来:

  • 定义对某命名空间域对象的访问权限,并将在各个命名空间内完成授权。
  • 为命名空间作用域的对象设置访问权限,并跨所有命名空间执行授权。
  • 为集群作用域的资源定义访问权限。

如果您需要在命名空间内定义角色,应该使用Role;如果您需要定义集群范围的角色,应该使用ClusterRole。

关于如何编写Kubernetes的ClusterRole和Role,请参见自定义Kubernetes授权策略

关于如何授予RAM用户或RAM角色自定义Kubernetes授权策略,请参见配置RAM用户或RAM角色RBAC权限

重要

当前容器服务ACK授权管理只支持自定义ClusterRole角色与集群内RBAC权限的绑定,不支持自定义Role角色与集群内RBAC权限的绑定。

RBAC授权

当RAM用户或RAM角色需要操作指定集群内K8s资源时(例如,获取集群Pod和Node信息),需要在容器服务管理控制台的授权管理页面对指定RAM用户或RAM角色进行数据平面资源的授权。

您可以给RAM用户或RAM角色授予以下预置角色。具体操作,请参见配置RAM用户或RAM角色RBAC权限

角色

集群内RBAC权限

管理员

对所有命名空间下所有资源的读写权限。

运维人员

对所有命名空间下控制台可见资源的读写权限,对集群节点、存储卷、命名空间、配额的只读权限。

开发人员

对所有命名空间或所选命名空间下控制台可见资源的读写权限。

受限用户

对所有命名空间或所选命名空间下控制台可见资源的只读权限。

自定义

权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户或RAM角色获得不符合预期的权限。关于ClusterRole的更多信息,请参见自定义Kubernetes授权策略。

2.2 自定义RAM授权策略

前提条件

在创建自定义授权策略时,您需要了解授权策略语言的基本结构和语法。更多信息,请参见权限策略基本元素

背景信息

容器服务ACK提供的系统授权策略的授权粒度比较粗,如果这种粗粒度授权策略不能满足您的需要,那么您可以创建自定义授权策略。例如,您想控制对某个具体的集群的操作权限,您必须使用自定义授权策略才能满足这种细粒度要求。

在进行RAM用户或RAM角色的集群RBAC授权前,您需要完成对集群管控能力的RAM授权。您可以根据需要授予RAM用户或RAM角色对于目标集群的读写策略:

  • 读策略:用于查看集群配置、kubeconfig等基本信息。
  • 写策略:包含集群伸缩、升级、删除、添加节点等集群管控能力。

在提交RBAC授权前,您需要确保目标集群已经被授予RAM只读权限,策略参考如下。

{
  "Statement": [
    {
      "Action": [
        "cs:Get*",
        "cs:List*",
        "cs:Describe*"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:cs:*:*:cluster/<yourclusterID>"
      ]
    }
  ],
  "Version": "1"
}

当您完成RAM授权后,需要完成集群内Kubernetes资源模型访问的RBAC授权。具体操作,请参见配置RAM用户或RAM角色RBAC权限

创建自定义授权策略

  1. 使用具有RAM权限的账号登录RAM管理控制台
  2. 单击左侧导航栏的权限管理 > 权限策略
  3. 权限策略页面,单击创建权限策略
  4. 创建权限策略页面,单击脚本编辑页签。在策略文档中编写您的授权策略内容。

{
 "Statement": [{
     "Action": [
         "cs:Get*",
         "cs:List*",
         "cs:Describe*",
         "cs:ScaleCluster",
         "cs:DeleteCluster"
     ],
     "Effect": "Allow",
     "Resource": [
         "acs:cs:*:*:cluster/集群ID"
     ]
 }],
 "Version": "1"
}

  1. 其中:
  1. Action处填写您所要授予的权限。
  2. 说明
  3. 所有的Action均支持通配符。
  4. Resource有以下配置方式。
  • 授予单集群权限

"Resource": [
     "acs:cs:*:*:cluster/集群ID"
 ]

  • 授予多个集群权限

"Resource": [
     "acs:cs:*:*:cluster/集群ID",
     "acs:cs:*:*:cluster/集群ID"
 ]

  • 授予所有集群的权限

"Resource": [
     "*"
 ]

  • 其中,集群ID需要替换为您要授权的真实的集群ID。
  1. 编写完成后,单击继续编辑基本信息,填写名称,然后单击确定
  2. 返回权限策略页面,在搜索框中搜索策略名备注,可以看到您授权的自定义的策略。

2.3 自定义Kubernetes授权策略

角色访问控制RBAC(Role-Based Access Control)的Kubernetes对象Role和ClusterRole中包含一组代表相关权限的规则。Role总是用来在某个命名空间内设置访问权限,而ClusterRole是为集群范围的资源定义访问权限。本文介绍如何自行编写Kubernetes的ClusterRole和Role。

权限策略说明

您可自行编写权限策略,或通过容器服务管理控制台创建自定义策略。

Role:命名空间维度

如果您需要在命名空间内定义角色,则应该使用Role。

下方是一个位于default命名空间的Role的YAML示例,用来授予对Pods的所有权限。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
   name: test-role
   namespace: default
rules:
- apiGroups:
- ""
   resources:
   - pods
   verbs:
   - create
   - delete
   - deletecollection
   - get
   - list
   - patch
   - update
   - watch

ClusterRole:集群维度

如果您需要定义集群范围的角色,则应该使用ClusterRole。

下方是一个ClusterRole的示例,用来为任一特定命名空间中的Pods授予所有权限。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: test-clusterrole
rules:
  - apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - create
  - delete
  - deletecollection
  - get
  - list
  - patch
  - update
  - watch

关于Role和ClusterRole的更多信息,请参见Role和ClusterRole

创建Kubernetes自定义授权策略

说明

该步骤以为RAM用户或RAM角色创建自定义ClusterRole为例,与创建Role的步骤基本一致,您可结合实际需求进行操作。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群
  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择安全管理 > 角色
  3. 角色页面,单击Cluster Role页签。
  4. Cluster Role页签,单击创建
  5. 创建YAML面板输入自定义策略的YAML内容,单击确定即可创建ClusterRole。
  6. 此步骤以权限策略说明ClusterRole:集群维度的YAML为例,创建完成后,可在Cluster Role页签查看自定义权限test-clusterrole

后续步骤

关于如何授予RAM用户或RAM角色自定义Kubernetes授权策略,请参见配置RAM用户或RAM角色RBAC权限

重要

当前容器服务 Kubernetes 版授权管理仅支持自定义ClusterRole角色与集群内RBAC权限的绑定,不支持自定义Role角色与集群内RBAC权限的绑定。


2.4 通过标签实现精细化权限管理

ACK容器服务集群绑定标签后,您可以使用标签为资源做分类并控制访问权限。本文介绍如何通过标签控制RAM用户的权限,使不同的用户可以拥有不同ACK集群的访问权限。

前提条件

已创建RAM用户,具体操作,请参见创建RAM用户

背景信息

标签可用于标识云资源,实现资源的分类管理;访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作权限。标签和RAM结合,将标签作为权限策略的匹配条件,可以实现云资源精细化权限管理。

基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:

阿里云-容器服务 Kubernetes 版_自定义_02

应用场景示例

本文操作步骤以下面场景为示例,说明如何使用标签鉴权。

  • 不允许创建未绑定标签test:foo的集群。
  • 不允许操作其他用户创建的集群(未绑定标签test:foo的资源)。
  • 支持某些查询接口,同时可以查看您已绑定标签test:foo的集群。
  • 不允许修改标签,防止标签被修改。
  • 不允许对未绑定标签test:foo的集群进行RBAC授权。

操作步骤

本步骤将使用阿里云账号(主账号)新建一个自定义权限策略UseTagAccessRes(规定了RAM用户需要指定标签test:foo后方可访问和操作ACK集群),并将自定义权限策略UseTagAccessRes授权给RAM用户userTest。

  1. 使用阿里云账号(主账号)RAM控制台
  2. 创建自定义权限策略UseTagAccessRes。
  3. 具体操作,请参见创建自定义权限策略。如下示例中,您可以在策略(Condition)中为云资源设置多个标签条件来限制操作权限。支持的标签鉴权条件如下:

标签鉴权条件

说明

acs:RequestTag

限制在请求中必须传入特定的标签。如果API请求中没有标签参数,则不能使用acs:RequestTag,否则会导致鉴权失败。

acs:ResourceTag

限制指定的资源必须包含特定的标签。如果API请求中没有资源ID参数,则不能使用acs:ResourceTag,否则会导致鉴权失败。

  1. 以下为不同应用场景下对应的自定义权限策略内容。
  2. 重要
  3. 以下列举的自定义权限策略内容仅作为示例策略模板提供,请您根据实际需求遵循权限最小化原则配置权限策略。
  1. 不允许创建未绑定标签test:foo的集群,仅允许在创建集群操作时,带上请求标签test:foo

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "cs:CreateCluster",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "acs:RequestTag/test": "foo"
                }
            }
        },
        {
            "Action": [
                "cs:DescribeAddons",
                "cs:DescribeKubernetesVersionMetadata"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "vpc:Describe*",
                "vpc:List*",
                "log:List*",
                "log:Describe*",
                "cs:Get*",
                "cs:Describe*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ],
    "Version": "1"
}

  • 不允许操作其他用户创建的集群(未绑定标签test:foo的资源)。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "acs:ResourceTag/test": "foo"
                }
            }
        }
    ]
}

  • 支持某些查询接口,同时可以查看您已绑定标签test:foo的集群。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cs:DescribeClustersV1",
                "cs:GetClusters"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "acs:ResourceTag/test": "foo"
                }
            }
        },
        {
            "Action": [
                "cs:DescribeClusterAddonsVersion",
                "cs:DescribeClusterUserKubeconfig",
                "cs:DescribeClusterNodePools",
                "cs:DescribeClusterNodes",
                "cs:DescribeClusterLogs",
                "cs:DescribeClusterNodePoolDetail",
                "cs:DescribeEvents",
                "cs:DescribeClusterDetail",
                "cs:DescribeClusterAddonsUpgradeStatus",
                "cs:DescribeClusterNamespaces",
                "cs:DescribeAddons",
                "log:List*",
                "log:Describe*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

  • 不允许修改标签,防止标签被修改。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "cs:UntagResources",
                "cs:ListTagResources",
                "cs:TagResources",
                "cs:ModifyClusterTags"
            ],
            "Resource": "*"
        }
    ]
}

  • 仅允许对带有请求标签test:foo的集群进行RBAC授权。

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "cs:Get*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "acs:ResourceTag/test": "foo"
                }
            }
        },
        {
            "Action": [
                "ram:Get*",
                "ram:List*",
                "cs:DescribeAddons",
                "cs:DescribeKubernetesVersionMetadata",
                "cs:DescribeUserPermission",
                "cs:GrantPermission"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ram:AttachPolicyToUser",
                "ram:AttachPolicyToRole"
            ],
            "Effect": "Allow",
            "Resource": [
                "acs:ram:*:*:policy/xxxxxx",
                "acs:*:*:*:user/*"
            ]
        }
    ],
    "Version": "1"
}

  1. 将自定义权限策略授权给目标RAM用户或组。
  2. 具体操作,请参见为RAM用户授权。本步骤将自定义权限策略UseTagAccessRes授权给RAM用户userTest。
  3. 说明
  4. 如果您将自定义权限策略UseTagAccessRes授权已存在的RAM用户,请注意RAM用户多个权限策略产生的权限问题。

执行结果

授权RAM用户只能访问和操作已绑定标签test:foo的资源后,该RAM用户访问及操作各资源的结果如下:

创建ACK集群
  • 创建ACK集群时,在创建流程中集群配置页签的高级选项配置标签test:foo,会创建成功。
  • 创建ACK集群时,不指定标签test:foo,会有以下错误提示。
查看ACK集群
  1. 登录容器服务管理控制台,在左侧导航栏选择集群
  2. 查看集群列表中的集群。
  1. 如果集群中都没有test:foo标签,则集群列表为空,无法查看任何集群。
  2. 若对指定集群添加test:foo标签后,则在集群列表中可以看到该集群。

修改标签

不允许修改标签,若强制修改标签时会有以下错误提示。

阿里云-容器服务 Kubernetes 版_运维_03

授权管理

  1. 登录容器服务管理控制台,在左侧导航栏选择授权管理
  2. 授权管理页面,单击RAM用户页签,在需要授权的RAM用户右侧单击管理权限,进入权限管理页面。
  3. 权限管理页面选择集群时,在下拉列表中仅显示具有test:foo标签的集群。


3 集群

集群类型

ACK集群包括Pro版本、基础版、专有版三种类型。

比较项

ACK Pro版

ACK基础版

ACK专有版

主要特点

您只需创建节点,控制面板由ACK创建并托管。

您需要自行创建Master节点及Worker节点。

简单、低成本、高可用,无需管理控制面板。关于ACK集群基础版和Pro版本的具体区别,请参见对比。

简单、低成本,无需管理控制面板。

可以对集群基础设施进行更细粒度的控制,需要自行规划、维护、升级服务器集群。

收费方式

收取集群管理费用(按照集群数量计费),还需要承担节点以及其他基础资源的费用。更多信息,请参见产品计费。

集群管理免费,但需要承担节点以及其他基础资源的费用。更多信息,请参见产品计费。

集群管理免费,但需要承担Master节点、Worker节点以及其他基础资源的费用。更多信息,请参见产品计费。

应用场景

适用于企业生产与测试环境。

适用于个人学习与测试。

适用于K8s研究与定制化场景。

用户画像

期望降低成本更关注业务应用Kubernetes刚上手减少Kubernetes运维投入不用维护集群控制面板

成本相对不敏感懂Kubernetes有运维技术能力资源规划明确对集群控制面板(Master节点)有定制需求可以完全自管集群

3.1 操作系统

容器服务Kubernetes版支持的操作系统镜像

在创建ACK集群、节点池时,您需要选择节点的操作系统镜像。系统默认只提供各个镜像类型的最新版本。ACK所支持的操作系统镜像及各镜像支持的K8s集群版本,列表如下。

说明

ACK自身维护一套支持的系统镜像列表,与ECS最新版本的镜像可能会有一定延迟。请以ACK支持的系统镜像为准。

镜像类型

镜像名称(含版本信息)

镜像ID

平台

系统架构

启动模式

系统大小

支持的K8s集群版本

Alibaba Cloud Linux 2

Alibaba Cloud Linux 2.1903 LTS 64 bit

aliyun_2_1903_x64_20G_alibase_20221102.vhd

Aliyun

x86_64

BIOS

20 GiB

全部版本

Alibaba Cloud Linux 3

Alibaba Cloud Linux 3.2104 LTS 64 bit

aliyun_3_x64_20G_alibase_20221102.vhd

Aliyun

x86_64

BIOS

20 GiB

v1.18.8及以上

Alibaba Cloud Linux 3 Arm版

Alibaba Cloud Linux 3.2104 LTS 64 bit ARM Edition

aliyun_3_arm64_20G_alibase_20220225.vhd

Aliyun

arm64

UEFI

20 GiB

v1.20.4及以上

Alibaba Cloud Linux UEFI 2

Alibaba Cloud Linux UEFI 2.1903 LTS 64 bit

aliyun_2_1903_x64_20G_uefi_alibase_20210218.vhd

Aliyun

x86_64

UEFI

20 GiB

v1.16.9及以上

ContainerOS

ContainerOS 1.24.6

lifsea_3_x64_10G_k8s_1_24_6_alibase_20221101.vhd

Aliyun

x86_64

BIOS

20 GiB

v1.20.4及以上

CentOS

CentOS 7.9 64 bit

centos_7_9_x64_20G_alibase_20220824.vhd

CentOS

x86_64

BIOS

20 GiB

全部版本

Windows

Windows Server 2019 (20211217)

win2019_1809_x64_dtc_en-us_40G_container_alibase_20211217.vhd

WindowsServer2019

x86_64

BIOS

40 GiB

v1.18.8及以上

Windows Core

Windows Server Core, version 2004 (20211217)

wincore_2004_x64_dtc_en-us_40G_container_alibase_20211217.vhd

WindowsServer2019

x86_64

BIOS

40 GiB

v1.18.8及以上


Alibaba Cloud Linux等保2.0三级版镜像检查规则说明

Alibaba Cloud Linux等保2.0三级版镜像按照《GB/T22239-2019信息安全技术网络安全等级保护基本要求》进行等级保护加固,满足对应的检查项。详细信息如下表所示。

检查项类型

检查项名称

检查内容

身份鉴别

应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。

检查是否存在空密码账户。身份标识(UID)具有唯一性。设置密码复杂度要求。定期更换密码。设置密码最短修改时间,防止非法用户短期更改多次。限制密码重用。确保Root是唯一的UID为0的账户。

当对服务器进行远程管理时,应采取必要措施,防止鉴别信息在网络传输过程中被窃听。

检查SSHD是否强制使用V2安全协议。禁止Telnet等不安全的远程连接服务。

应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施。

检测是否配置登录失败锁定策略,是否设置空闲会话断开时间和启用登录时间过期后断开与客户端的连接设置。

访问控制

应对登录的用户分配账户和权限。

除系统管理用户之外,应该分配普通用户、审计员、安全员账户。确保用户umask为027或更严格。确保每个用户的home目录权限设置为750或者更严格。

应重命名或删除默认账户,修改默认账户的默认口令。

Linux下Root账号不应删除,检查是否禁止SSH直接登录即可。Root之外的系统默认账户、数据库账户禁止登录(non-login)。确保无弱密码存在,对应的弱密码基线检测通过。

访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级。

检查重要文件,如访问控制配置文件和用户权限配置文件的权限,是否达到用户级别的粒度。

应及时删除或停用多余的、过期的账户,避免共享账户的存在。

Root之外的系统默认账户、数据库账户禁止登录(non-login)。锁定或删除shutdown、halt账户。

应授予管理用户所需的最小权限,实现管理用户的权限分离。

确保su命令的访问受限制。检查/etc/sudoers配置sudo权限的用户,根据需要给Root以外用户配置sudo权限,但除管理员外不能所有用户都配置(ALL)权限。

应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。

确保用户home目录权限设置为750或者更严格。无主文件或文件夹的所有权,根据需要重置为系统上的某个活动用户。设置SSH主机公钥文件的权限和所有权。设置SSH主机私钥文件的权限和所有权。

安全审计

应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等。

检查auditd文件大小、日志拆分配置或者备份至日志服务器。若自动修复失败,请先修复启用安全审计功能检查项。

审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。

满足启用安全审计功能检查项,即满足此项。

应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计。

启用auditd服务。启用rsyslog或syslog-ng服务。确保收集用户的文件删除事件。确保收集对系统管理范围(sudoers)的更改。确保收集修改用户或用户组信息的事件。如使用了第三方日志收集服务,可自行举证并忽略此项。

应保护审计进程,避免受到未预期的中断。

auditd是审计进程audit的守护进程,syslogd是日志进程syslog的守护进程,查看系统进程是否启动。

入侵防范

应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞。

云安全中心的漏洞检测和修复功能可以满足。如果有其他方式,可自行举证并忽略此项。

应遵循最小安装的原则,仅安装需要的组件和应用程序。

Alibaba Cloud Linux 3:应卸载avahi-daemon、Bluetooth、firstboot、Kdump、wdaemon、wpa_supplicant、ypbind等软件。Alibaba Cloud Linux 2:应卸载NetworkManager、avahi-daemon、Bluetooth、firstboot、Kdump、wdaemon、wpa_supplicant、ypbind等软件。

应关闭不需要的系统服务、默认共享和高危端口。

应关闭不需要的系统服务、文件共享服务。关闭21 、23、25、111、427、631等高危端口。如果有特殊需求必须严格配置访问控制策略,需自行举证并忽略此项。

应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。

云安全中心入侵检测和告警功能可以满足。如果已有其他检测与告警方式,可自行举证并忽略此项。

应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制。

Alibaba Cloud Linux 3:根据实际配置登录服务器的终端,编辑 /etc/ssh/sshd_config文件。根据实际情况设置参数AllowUsers <user>@<host>。说明<user>表示需要登录的服务器用户名,<host>表示服务器的IP地址,请根据实际情况进行替换。修改完成后按Esc键,并输入:wq后按下回车键,保存并退出。执行sudo systemctl restart sshd命令重启sshd服务。Alibaba Cloud Linux 2:/etc/hosts.allow文件指定允许连接到主机的IP地址,不应配置为ALL:ALL。/etc/hosts.deny文件指定禁止连接到主机的IP地址,应该配置为ALL:ALL,默认禁止所有连接。两者需要配合使用,且必须先配置/etc/hosts.allow规则。若是已通过其他方式实现,例如网络安全组、防火墙等,可自行举证并忽略此项。

恶意代码防范

Alibaba Cloud Linux 3:应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断。Alibaba Cloud Linux 2:应安装防恶意代码软件,并及时更新防恶意代码软件版本和恶意代码库。

检测是否安装使用云安全中心,如安装了其他防恶意代码软件,可自行举证并忽略此项。


3.2 管理集群

查看集群信息

容器服务 Kubernetes 版集群提供集群信息页面,展示集群基本信息、巡检信息、相关云资源、集群资源监控等。本文介绍如何查看集群信息以及集群信息项。

操作入口
  1. 登录容器服务管理控制台,在左侧导航栏选择集群
  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息
  3. 单击不同页签,可查看不同维度信息。
  4. 具体内容,请参见集群信息内容
集群信息内容

页签

说明

概览

选择所需的命名空间,查看应用状态、组件状态和资源监控图表等内容。

应用状态:显示当前运行的部署、容器组、有状态副本集等应用状态的示意图,绿色图标代表正常,黄色图标代表异常。

节点状态:显示当前集群的节点状态。

集群风险预警:自动扫描Kubernetes集群,提示您潜在的风险和对应的解决方案,防止您的业务受损。您可以通过配置集群巡检设定扫描时间和扫描周期。

事件:显示集群的事件信息,例如警告和错误事件等。

资源监控:提供CPU和内存的监控图表。CPU统计单位为Cores(核),可显示小数点后3位,最小统计单位是millcores,即一个核的1/1000;内存的统计单位是Gi,显示小数点后3位。更多相关信息,请参见Meaning of CPU和Meaning of memory。

安全概览

单击安全概览,对集群的安全配置进行巡检后,此概览页签将展示集群配置巡检扫描结果,包括节点漏洞、容器镜像风险、容器运行时风险等,帮助您实时了解当前集群中运行应用的配置是否存在安全隐患。巡检结果支持以报表化的方式展示,同时展示巡检对应扫描项的说明和修复建议。您还可以配置定期巡检,对应的扫描结果会写入到SLS指定的日志库中存储。具体操作,请参见使用配置巡检检查集群Workload安全隐患。该功能目前仅支持ACK集群Pro版,白名单开放中,请提交工单申请。

基本信息

基本信息:集群ID、地域、集群时区、是否开启删除保护、是否开启Secret落盘加密等。您也可以通过命令行获取集群托管侧时区和Worker节点时区。展开查看具体操作网络信息:API Server连接端点、Service CIDR、RRSA OIDC、kube-proxy代理模式、自定义证书SAN、测试域名等。集群维护:集群维护窗口配置。

连接信息

获取公网和内网环境下KubeConfig文件的配置内容,用于配置通过Kubectl客户端访问集群。

集群资源

集群所使用的相关云资源,包括资源编排ROS、专有网络VPC、ECS安全组、Worker的RAM角色、日志服务、负载均衡等。通过单击相应的资源ID可以跳转至对应的控制台。重要这些资源由阿里云容器服务进行管理,请勿随意删除或自行修改,避免导致集群异常,影响集群内应用的正常运行。

集群监控

对接阿里云可观测监控 Prometheus 版,对集群进行资源监控,支持快速查看负载的CPU、内存、网络等指标的使用率,带来更专业的监控与报警能力和更合适的容器场景指标。更多信息,请参见监控管理。

集群日志

集群的运行日志。

集群任务

查看集群任务、任务状态、涉及资源、变更时间等。失败任务将提示失败信息,协助问题的排查和诊断。


4 节点

升配Master节点的资源

Kubernetes专有版集群的Master节点由用户自己管控,随着集群规模的不断扩大,用户可能会遇到Master节点的配置不足的情况,本文为您介绍如何升级Master的配置。

前提条件

创建Kubernetes专有版集群

操作步骤

  1. 登录容器服务管理控制台,在左侧导航栏选择集群
  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点
  3. 找到集群的三个Master节点,单击Master节点的实例ID,进入实例详情页面(本文以master-01为例)。
  4. 此时,您可以看到实例规格等信息。

阿里云-容器服务 Kubernetes 版_自定义_04

  1. 在实例的配置信息区域,单击更改实例规格
  2. 如果更改实例规格为灰显,说明实例正在运行 ,您需要单击界面右上角的停止,停止运行该实例,再进行下一步。
  3. 在弹出的调整规格页面,选择合适的规格,单击确认调整。节点规格请参见选择Master节点规格
  4. 在弹出的调整规格成功页面,单击确认
  5. 此时自动跳转到实例列表页面。

阿里云-容器服务 Kubernetes 版_命名空间_05

  1. 可以看到master-01节点的规格已经调整成功。
  2. 选中目标实例,单击启动,等待升配的master-01节点自动加入集群且状态变成运行中,如图所示。

阿里云-容器服务 Kubernetes 版_运维_06

  1. 重复步骤4-7,直至所有Master节点均已升级到期望的配置。
  2. 说明
  3. 本例仅介绍了按量付费类型的Master节点的升配方式,关于更多类型升配方式,请参见升降配方式概述

升配Worker节点的资源

随着Kubernetes集群负载的增加,用户常常面临资源不足的情况,此时您可以对集群的基础资源做一些扩展。例如,当集群的节点数达到10个以上后,您可以优先考虑升级Worker节点的配置,这样既可以提高资源的利用率,也可以降低集群运维的复杂度。本文为您介绍如何升级Worker节点的配置。

前提条件

已创建Kubernetes集群。具体操作,请参见创建Kubernetes托管版集群

操作步骤

  1. 登录容器服务管理控制台,在左侧导航栏选择集群
  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点
  3. 单击目标Worker节点的实例ID,进入实例详情页面(本文以worker-k8s-for-cs实例为例)。
  4. 此时,您可以看到目标节点的实例规格等信息。
  5. 本例仅介绍按量付费类型的Worker节点的升配方式。关于更多类型升配方式,请参见升降配方式概述
  6. 实例规格右侧的更改实例规格为灰显,说明实例正在运行 ,您需要单击界面的停止。在停止实例对话框选中停止方式及停止模式后,单击确定

阿里云-容器服务 Kubernetes 版_命名空间_07

  1. 实例规格右侧,单击更改实例规格

阿里云-容器服务 Kubernetes 版_运维_08

  1. 更改实例规格页面,选择合适的实例规格,单击立即变更
  2. 关于节点实例规格,请参见选择Worker节点规格
  3. 调整规格成功对话框,单击管理控制台
  4. 自动跳转到实例页面。在配置列,可以看到worker-k8s-for-cs节点的规格已经调整成功。
  5. 在目标实例右侧操作列,选择更多 > 实例状态 > 启动,在启动实例对话框单击确定后,等待升配的worker-k8s-for-cs节点自动加入集群且状态变成运行中即可完成Worker节点的资源升配。



5 网络

5.1 Ingress管理

Ingress基本概念

在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量。Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则,从而达到根据不同的规则设置访问集群内不同的Service所对应的后端Pod。

Ingress资源仅支持配置HTTP流量的规则,无法配置一些高级特性,例如负载均衡的算法、Sessions Affinity等,这些高级特性都需要在Ingress Controller中进行配置。.

Nginx Ingress Controller

当前Kubernetes官方维护的是Nginx Ingress Controller,ACK基于社区版的Nginx Ingress Controller进行了优化。ACK的Nginx Ingress Controller与社区Nginx Ingress Controller完全兼容,支持社区所有的Annotation。您在ACK集群或ACK Serverless集群选择安装的Nginx Ingress Controller组件,即为定制版的Nginx Ingress Controller组件。关于如何安装Nginx Ingress Controller组件,请参见安装Nginx Ingress Controller组件

工作原理

为了使得Nginx Ingress资源正常工作,集群中必须要有个Nginx Ingress Controller来解析Nginx Ingress的转发规则。Nginx Ingress Controller收到请求,匹配Nginx Ingress转发规则转发到后端Service所对应的Pod,由Pod处理请求。Kubernetes中Service、Nginx Ingress与Nginx Ingress Controller有着以下关系:

  • Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。
  • Nginx Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service所对应的Pod上。例如根据请求中不同的Host和URL路径,让请求落到不同Service所对应的Pod上。
  • Nginx Ingress Controller是Kubernetes集群中的一个组件,负责解析Nginx Ingress的反向代理规则。如果Nginx Ingress有增删改的变动,Nginx Ingress Controller会及时更新自己相应的转发规则,当Nginx Ingress Controller收到请求后就会根据这些规则将请求转发到对应Service的Pod上。

Nginx Ingress Controller通过API Server获取Ingress资源的变化,动态地生成Load Balancer(例如Nginx)所需的配置文件(例如nginx.conf),然后重新加载Load Balancer(例如执行nginx -s load重新加载Nginx)来生成新的路由转发规则。

阿里云-容器服务 Kubernetes 版_自定义_09

Nginx Ingress Controller可通过配置LoadBalancer类型的Service来创建SLB,因此可以从外部通过SLB访问到Kubernetes集群的内部服务。根据Nginx Ingress配置的不同规则来访问不同的服务。

相关文档
  • Nginx Ingress高级用法
  • 创建Nginx Ingress
  • Nginx Ingress访问日志分析与监控
  • 通过Ingress Controller来实现应用的流量复制

ALB Ingress Controller

ALB Ingress基于阿里云应用型负载均衡ALB(Application Load Balancer)之上提供更为强大的Ingress流量管理方式,兼容Nginx Ingress,具备处理复杂业务路由和证书自动发现的能力,支持HTTP、HTTPS和QUIC协议,完全满足在云原生应用场景下对超强弹性和大规模七层流量处理能力的需求。

警告

为Ingress服务的ALB是由Controller完全托管的,您不能自行在ALB控制台上面进行配置,否则可能造成Ingress服务的异常。关于ALB额度的更多信息,请参见使用限制

工作原理

ALB Ingress Controller通过API Server获取Ingress资源的变化,动态地生成AlbConfig,然后依次创建ALB实例、监听、路由转发规则以及后端服务器组。Kubernetes中Service、Ingress与AlbConfig有着以下关系:

  • Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。
  • Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service上。例如,根据请求中不同的Host和URL路径,让请求转发到不同的Service上。
  • AlbConfig是在ALB Ingress Controller提供的CRD资源,使用AlbConfig CRD来配置ALB实例和监听。一个AlbConfig对应一个ALB实例。

阿里云-容器服务 Kubernetes 版_自定义_10

相关文档
  • 管理ALB Ingress Controller组件
  • 通过ALB Ingress访问服务
  • ALB Ingress服务高级用法
  • 授予ALB Ingress Controller访问权限

MSE Ingress Controller

MSE Ingress是在MSE云原生网关之上提供更为强大的Ingress流量管理方式,兼容Nginx Ingress以及50多个Nginx Ingress的注解,覆盖90%以上的Nginx Ingress业务场景,支持多服务版本同时灰度发布、灵活的服务治理能力以及全方位的安全防护保障,能够满足大规模云原生分布式应用的流量治理诉求。

功能介绍

更多关于MSE Ingress云原生网关的功能介绍,请参见:

  • Nginx Ingress、ALB Ingress和MSE Ingress对比
  • 通过MSE Ingress访问容器服务
  • MSE Ingress支持的Annotation
  • MSE Ingress高级用法
工作原理
组成部分
  • MSE Ingress Controller
  • MSE Ingress Controller本身不是网络数据平面,它是管理MSE云原生网关实例以及配置的控制平面。即MSE Ingress Controller不处理任何业务请求流量,它位于流量旁路,管理着处理业务流量的MSE云原生网关实例。
  • 您需要在ACK或者ACK Serverless集群中安装MSE Ingress Controller,通过使用该组件提供的MseIngressConfig的CRD资源以声明式配置的方式来管理云原生网关实例,以及设置网关对Ingress资源的监听选项。
  • 关于如何安装MSE Ingress Controller组件,请参见管理组件
  • MSE云原生网关:由MSE Ingress Controller根据用户配置的MseIngressConfig资源创建,包含控制面(Control Plane)和数据面(Data Plane)。
  • 控制面(Control Plane):控制面监听您已关联的ACK集群中的Ingress、IngressClass、Service等资源,经内部解析之后实时下发给网关数据面。
  • 数据面(Data Plane): 数据面是流量治理配置的实施者,按照控制面下发的治理规则处理外部请求,并转发到后端目标服务。
工作机制

MSE Ingress Controller负责监听集群中创建的MseIngressConfig资源,实时动态维护该资源对应的云原生网关实例的生命周期以及该网关与ACK集群的关联性。

MSE云原生网关的控制面通过关联的ACK集群的API Server获取Ingress资源的变化,然后动态更新MSE云原生网关的路由规则。当MSE云原生网关收到请求时,匹配Ingress转发规则转发请求到后端Service所对应的Pod。

Kubernetes中Service、Ingress、IngressClass、MseIngressConfig和MSE Ingress Controller存在以下关系:

  • Service:是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。
  • Ingress:是反向代理规则,用来规定HTTP和HTTPS请求应该被转发到哪个Service上。例如,根据请求中不同的Host和URL路径,使请求转发到不同的Service上。
  • IngressClass:是Ingress处理器的描述,用于在K8s集群中声明一个Ingress处理器实现,关联该IngressClass的Ingress资源会被该Ingress处理器解析。此外,需要通过IngressClass的Parameter字段关联一个MseIngressConfig(MSE云原生网关),用于实施被解析的Ingress资源描述的流量管理规则。
  • MseIngressConfig:是由MSE Ingress Controller提供的CRD,用于描述云原生网关实例的基本信息。
  • MSE Ingress Controller:本身不是网络数据平面,它是管理MSE云原生网关实例以及配置的控制平面。MSE Ingress Controller负责监听集群中的MseIngressConfig资源,协调MSE云原生网关实例用于实施Ingress资源描述的流量管理规则。

下图是MSE Ingress Controller工作示意图。

阿里云-容器服务 Kubernetes 版_自定义_11


Nginx Ingress、ALB Ingress和MSE Ingress对比

ACK、ASK均支持Nginx Ingress、ALB Ingress和MSE Ingress。Nginx Ingress需要您自行维护,ALB Ingress和MSE Ingress为全托管模式。通过多个维度进行对比,本文介绍Nginx Ingress、ALB Ingress和MSE Ingress之间的差异。

背景信息
  • Nginx Ingress:需要您自行运维,如果您对网关定制有强烈的需求,可以选择Nginx Ingress。
  • ALB Ingress:基于阿里云应用型负载均衡ALB(Application Load Balancer),属于全托管免运维的云服务。单个ALB实例支持100万QPS,提供更为强大的Ingress流量管理功能。
  • MSE Ingress:基于阿里云MSE(Microservices Engine)云原生网关,属于全托管免运维的云服务。单个MSE云原生网关实例支持100万QPS,提供更为强大的Ingress流量管理功能。关于MSE云原生网关的详细介绍,请参见云原生网关概述
典型应用场景

类型

典型应用场景

Nginx Ingress

网关高度定制化。云原生应用金丝雀发布、蓝绿发布。

ALB Ingress

网关全托管、免运维。互联网应用七层高性能自动弹性。云原生应用金丝雀发布、蓝绿发布。超大QPS、超大并发连接。

MSE Ingress

网关全托管、免运维。南北向、东西向流量统一管理,微服务网关,全链路灰度。多个容器集群、PaaS平台、ECS服务共用一个网关实例。混合云、多数据中心、多业务域的内部互通。认证鉴权,灵活设置,安全防护要求高。超大流量、高并发业务。

功能对比

比较项

Nginx Ingress

ALB Ingress

MSE Ingress

产品定位

提供七层流量处理能力与丰富的高级路由功能。自有组件,可根据需求进行高度定制化。

提供七层流量处理能力与丰富的高级路由功能。专门面向应用层负载场景,与容器深度集成,支持多种服务灰度策略,包括金丝雀发布、A/B Test、蓝绿部署、自定义流量比例分发等。支持超大容量、自动弹性和免运维。支持与多种云产品结合,例如WAF、FC、PrivateLink、TR等。

将传统流量网关、微服务网关和安全网关三合一,通过硬件加速、WAF本地防护和插件市场等功能,构建一个高集成、高性能、易扩展、热更新的云原生网关。提供七层流量处理能力与丰富的高级路由功能。支持多种服务发现模式和多种服务灰度策略,包括金丝雀发布、A/B Test、蓝绿部署和自定义流量比例分发。专门面向应用层负载场景,与容器深度集成,网关转发请求时直连后端Pod IP。

产品架构

基于Nginx+Lua插件扩展。

基于阿里洛神云网络平台。基于CyberStar自研平台,支持自动弹性伸缩。

基于开源Higress项目,控制面使用Istiod,数据面使用Envoy。关于开源Higress项目的详细介绍,请参见Higress项目。用户独享实例。

基础路由

基于内容、源IP的路由。支持HTTP标头改写、重定向、重写、限速、跨域、会话保持等。支持请求方向转发规则和响应方向转发规则,其中响应方向转发规则可以通过扩展Snippet配置实现。转发规则按照最长路径匹配,匹配到多条路径时,转发路径最长的优先匹配。

基于内容、源IP的路由。支持HTTP标头改写、重定向、重写、限速、跨域、会话保持等。支持请求方向转发规则和响应方向转发规则。转发规则按照优先级从高到低开始匹配,匹配到多条路径时,转发规则编号的数值越小优先级越高。

基于内容的路由。支持HTTP标头改写、重定向、重写、限速、跨域、超时和重试等支持标准的轮询、随机、最小请求数、一致性Hash和预热等负载均衡模式。预热是指在指定时间窗口转发到后端某机器的流量逐步平滑递增。支持千级别的路由规则。

支持协议

支持HTTP和HTTPS协议。支持WebSocket、WSS和gRPC协议。

支持HTTP和HTTPS协议。支持WebSocket、WSS和gRPC协议。

支持HTTP和HTTPS协议。支持HTTP 3.0、WebSocket和gRPC协议。支持HTTP/HTTPS转Dubbo协议。

配置变更

非后端端点变更需要Reload进程,对长连接有损。端点变更使用Lua实现热更新。Lua插件变更需要Reload进程。

采用OpenAPI机制变更配置,配置变更实时生效

支持配置、证书、插件热更新。采用List-Watch机制,配置变更实时生效。

认证鉴权

支持Basic Auth认证方式。支持oAuth协议。

支持TLS身份认证。

支持Basic Auth、oAuth、JWT、OIDC认证。集成阿里云IDaaS。支持自定义认证。

性能

性能依赖手动调优,需要进行系统参数调优和Nginx参数调优。需要配置合理的副本数和资源限制。更多信息,请参见Nginx Ingress Controller使用建议。

单实例支持100万QPS。单实例支持千万级最大连接。默认使用SSL硬件进行加速。

相比开源Nginx Ingress,在CPU水位30~40%时,TPS高出约90%。启用硬件加速后,提升HTTPS性能约80%。

可观测能力

支持通过Access Log采集日志。支持通过Prometheus进行监控和告警配置。

支持通过Access Log采集日志(对接SLS)。支持使用Metrics输出监控指标(集成云监控)。支持报警配置(对接云监控)。

支持通过Access Log采集日志(集成SLS和阿里云Prometheus)。支持通过阿里云Prometheus配置监控和告警。支持Tracing(集成TracingAnalysis和SkyWalking)。

运维能力

自行维护组件。通过配置HPA进行扩缩容。需要主动配置规格进行调优。

全托管、免运维。自动弹性,免配置支持超大容量。处理能力随业务峰值自动伸缩。

全托管,免运维。

安全

支持HTTPS协议。支持黑白名单功能。

HTTPS(集成SSL)支持全链路HTTPS、SNI多证书、RSA、ECC双证、TLS 1.3协议和TLS算法套件选择。支持WAF防护(对接阿里云Web防火墙)。支持DDos防护(对接阿里云DDoS防护服务)。支持黑白名单功能。

支持全链路HTTPS、SNI多证书(集成SSL),可配置TLS版本。支持路由级WAF防护(对接阿里云Web防火墙)。支持路由级黑白名单功能。

服务治理

服务发现支持K8s。服务灰度支持金丝雀发布。服务高可用支持限流。

服务发现支持K8s。服务灰度支持金丝雀发布。服务高可用支持限流。

服务发现支持K8s、Nacos、ZooKeeper、EDAS、SAE、DNS、固定IP。支持2个以上版本的金丝雀发布、标签路由,与MSE服务治理结合可实现全链路灰度发布。内置集成MSE服务治理中的Sentinel,支持限流、熔断、降级服务测试支持服务Mock。

扩展性

使用Lua脚本。

使用AScript自研脚本。更多信息,请参见可编程脚本AScript概述。

使用Wasm插件,实现多语言编写。使用Lua脚本。

云原生集成

自行运维组件,与阿里云ACK或ASK等容器服务结合使用。更多信息,请参见Ingress概述。

与多种云产品结合,如Web应用防火墙(WAF)、函数计算(FC)、私网连接(PrivateLink)和云企业网转发路由器(TR)等。托管组件,与阿里云ACK或ASK等容器服务结合使用。

用户侧组件,与阿里云ACK或ASK等容器服务结合使用,且支持Nginx Ingress核心 Annotation无缝转换,关于MSE Ingress支持的Annotation,请参见MSE Ingress支持的Annotation。

6 应用管理

调度应用Pod至指定节点

更新时间:2023-08-31 16:26:25提交缺陷

产品详情

相关技术圈

我的收藏

由于业务场景需要,有时您需要将服务部署到特定节点,或者将某些服务部署到具有SSD盘的节点上。通过容器服务管理控制台,您可以快速地将Pod调度到指定的节点上。本文介绍如何通过设置节点标签、配置模板等操作,将Pod调度到指定节点上。

前提条件

创建Kubernetes托管版集群

背景信息

您可通过设置节点标签,然后通过配置nodeSelector强制约束Pod调度,将Pod调度到指定的Node节点上。关于nodeSelector的详细实现原理,请参见nodeselector

步骤一:设置节点标签
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏,单击集群
  3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏,选择节点管理 > 节点
  5. 在页面右上角单击标签与污点管理,进入标签与污点管理页面。
  6. 标签页签中,选择目标节点,然后单击左下角的添加标签
  7. 在弹出的添加对话框中,输入标签的名称,然后单击确定
  1. 名称:标签名称由字母、数字、短划线(-)、下划线(_)、小数点(.)组成,且必须以字母或者数字开头和结尾。
  2. :标签值可以为空字符串或由字母、数字、短划线(-)、下划线(_)、小数点(.)组成,且必须以字母或者数字开头和结尾。
步骤二:部署Pod到指定节点
  1. 在控制台左侧导航栏,单击集群
  2. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情
  3. 在集群管理页左侧导航栏,选择工作负载 > 无状态
  4. 无状态页面,单击页面右上角的使用YAML创建资源
  5. 对模板进行相关配置,部署一个Pod。
  1. 命名空间:选择资源对象所属的命名空间,本示例中设置命名空间为default
  2. 示例模板:本示例选择自定义模板。

本示例的YAML模板如下。

"apiVersion"<<<<: v1
 "kind": Pod
 "metadata":
   "labels":
     "name": hello-pod
   "name": hello-pod
 "spec":
   "containers":
     - "image": nginx
       "imagePullPolicy": IfNotPresent
       "name": hello-pod
       "ports":
         - "containerPort": 8080
           "protocol": TCP
       "resources": {}
       "securityContext":
         "capabilities": {}
         "privileged": false
       "terminationMessagePath": /dev/termination-log
   "dnsPolicy": ClusterFirst
   "restartPolicy": Always
   "nodeSelector":                    
     "group": worker                           ##注意与前面配置的节点标签一致。
   "status": {}

  1. 单击创建后,会提示部署状态信息。
验证结果

您可以选择以下任意一种方式查看Pod是否已成功部署到指定节点上。

方式一:部署成功后单击页面Pod名称

  1. 部署成功后,单击页面底部提示信息中的Pod名称,进入容器组页面。

阿里云-容器服务 Kubernetes 版_命名空间_12

  1. 容器组页面,单击目标Pod名称,进入该Pod的详情页。
  2. 您可看到Pod的标签、所处的节点ID等信息,表明该Pod已经成功部署到具有group:worker标签的指定节点上。

阿里云-容器服务 Kubernetes 版_命名空间_13

方式二:容器组页面查找目标容器

  1. 在控制台左侧导航栏,单击集群
  2. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情
  3. 在集群管理页左侧导航栏,选择工作负载 > 容器组
  4. 容器组页面,单击目标Pod名称,进入该Pod的详情页。
  5. 您可看到Pod的标签、所处的节点ID等信息,表明该Pod已经成功部署到具有group:worker标签的指定节点上。


7 存储

存储CSI概述

阿里云容器服务ACK的容器存储功能基于Kubernetes容器存储接口(CSI),深度融合阿里云存储服务云盘EBS,文件存储NAS和CPFS,以及对象存储OSS、本地盘等,并完全兼容Kubernetes原生的存储服务,例如EmptyDir、HostPath、Secret、ConfigMap等存储。本文介绍ACK存储CSI的概览、ACK存储CSI支持的功能、CSI使用授权、CSI使用限制等。


ACK容器存储概览

阿里云-容器服务 Kubernetes 版_命名空间_14

容器服务ACK支持Pod自动绑定阿里云云盘、NAS、 OSS、CPFS、本地卷等存储服务,每种存储卷的主要特点及应用场景如下表。

阿里云存储

静态数据卷

动态数据卷

默认部署

主要特点

应用场景

阿里云云盘

支持

支持存储类alicloud-disk-available, alicloud-disk-efficiency,alicloud-disk-essd, alicloud-disk-ssd, alicloud-disk-topology

非共享存储,每个云盘只能在单个节点挂载。

高IO、低延时场景。云盘块存储设备适用于对IO、延迟要求较高的应用场景,例如:数据库、中间件等服务。非共享场景云盘卷是独享模式,同时只能给一个Pod使用,在非共享数据业务场景可以考虑使用云盘卷。更多信息,请参见云盘存储卷概述。

阿里云NAS

支持

支持存储类 alibabacloud-cnfs-nas

共享存储,可提供高性能、高吞吐存储服务。

共享数据场景NAS支持多个Pod同时访问一份数据,如果您有共享数据需求,推荐使用NAS。大数据分析场景NAS提供了较高的数据吞吐能力,能满足大批量作业对共享存储访问的需求。Web应用场景为Web应用、内容管理系统提供存储支撑。保存日志场景如果您希望将日志保存到存储卷,推荐使用NAS数据卷。更多信息,请参见NAS存储卷概述。

阿里云OSS

支持

支持

共享存储,用户态文件系统。

媒体、图片等媒体文件只读场景您可以通过OSS数据卷读取上述文件类型。网页、应用配置文件只读场景OSSFS网络性能欠佳,可以支撑一些小文件的读场景。说明OSS数据卷通过OSSFS挂载,是一种通过FUSE方式模拟实现的用户态文件系统。对于写场景稳定性欠佳,因此在写场景中推荐使用其他存储卷类型。更多信息,请参见OSS存储卷概述。

阿里云CPFS

支持

支持

高性能、高带宽、共享存储。

基因计算、大数据分析场景CPFS提供的高吞吐能力,满足大规模集群对存储超高性能的需求。数据缓存访问场景您可以将低速存储数据先下载到CPFS卷,然后供应用高速访问。更多信息,请参见CPFS2.0静态卷和使用CNFS管理CPFS隔离存储卷。

阿里云ENS云盘

支持

支持

低延时,靠近终端用户,非高可用,只能在单节点挂载。

更多信息,请参见什么是边缘节点服务ENS。

本地卷

支持

支持

低延迟、高IO,非高可用。

本地临时文件存储如果您期望将非高可用数据保存在本地,可以通过LVM卷进行存储管理。IO要求高、自带高可用场景有些业务对IO要求很高,且应用自带高可用方案,例如:MySQL;可以使用LVM卷。大数据分析场景Spark等类型的大数据分析场景,可以用LVM卷替代共享本地盘的方案。更多信息,请参见本地存储卷概述。


8 安全

安全体系概述

本文从运行时安全、可信软件供应链和基础架构安全三个维度介绍阿里云容器服务Kubernetes版的安全体系,包括安全巡检、策略管理、运行时监控和告警、镜像扫描、镜像签名、云原生应用交付链、默认安全、身份管理、细粒度访问控制等。

阿里云-容器服务 Kubernetes 版_运维_15

运行时安全

  • 安全巡检
  • 集群的应用开发人员应该遵循权限的最小化原则配置应用部署模板,攻击者往往是利用应用Pod中开启的不必要的特权能力发起逃逸攻击,因此阿里云容器服务Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)提供了应用运行时刻的安全配置巡检能力,帮助您实时了解当前状态下运行应用的配置是否存在安全隐患。
  • 巡检结果支持以报表化的方式展示,同时展示巡检对应扫描项的说明和修复建议。您还可以配置定期巡检,对应的扫描结果会写入到SLS指定的日志库中存储。具体操作,请参见使用配置巡检检查集群Workload安全隐患


  • 策略管理
  • PSP(PodSecurityPolicy)是Kubernetes中Pod部署时重要的安全校验手段,能够有效地约束应用运行时的行为安全。它能够在应用部署时对Pod进行强制的安全校验,在集群的安全纵深防护中发挥了像AppArmor,SELinux这类策略引擎的作用。
  • PSP是Kubernetes原生的集群维度资源模型,通过API Server的Admission Controller准入机制,在应用部署时刻对Pod的安全参数进行强制校验。如果参数配置不满足指定PSP策略的定义,API Server会禁止该Pod的部署请求。


  • 运行时监控和告警
  • 当容器应用通过API Server的认证鉴权和准入控制校验成功部署后,在云原生应用零信任的安全原则下,还需要在容器应用的运行时刻提供相应的安全监控和告警能力。因此,阿里云容器服务和云安全中心深度集成了告警处理和漏洞检测能力,集群管理员可以在应用运行时提供监控和告警能力,主要的容器侧攻击防护行为如下:
  • 恶意镜像启动告警。
  • 病毒和恶意程序的查杀。
  • 容器内部入侵告警。
  • 容器逃逸和高风险操作预警。
  • 您可以在集群管理页面的安全管理 > 安全监控页面实时接收到相应告警,并根据页面提示查看和处理告警详情。具体操作,请参见使用安全监控


  • 安全沙箱管理
  • 相比于原有Docker运行时,安全沙箱为您提供的一种新的容器运行时选项,可以让您的应用运行在一个轻量虚拟机沙箱环境中,拥有独立的内核,具备更好的安全隔离能力。
  • 安全沙箱特别适合于不可信应用隔离、故障隔离、性能隔离、多用户间负载隔离等场景。在提升安全性的同时,对性能影响非常小,并且具备与Docker容器一样的用户体验,例如日志、监控、弹性等。关于安全沙箱管理的详细介绍,请参见安全沙箱概述


  • ACK-TEE机密计算
  • 当面向诸如金融,政府等有很强安全诉求的应用场景时,ACK-TEE机密计算提供了基于硬件加密技术的云原生一站式机密计算容器平台 ,它可以帮助您保护数据使用(计算)过程中的安全性、完整性和机密性,同时简化了可信或机密应用的开发、交付和管理成本。
  • 机密计算可以让您把重要的数据和代码放在一个特殊的可信执行加密环境(Trusted Execution Environment,TEE)中,而不会暴露给系统其他部分,其他应用、BIOS、OS、Kernel、管理员、运维人员、云厂商,甚至除了CPU以外的其他硬件均无法访问机密计算平台数据,极大减少敏感数据的泄露风险,为您提供了更好的控制、透明度和隐秘性。更多信息,请参见ACK-TEE机密计算介绍

可信软件供应链

  • 镜像扫描
  • 容器镜像服务支持所有基于Linux的容器镜像安全扫描,可以识别镜像中已知的漏洞信息。您可以收到相应的漏洞信息评估和相关的漏洞修复建议,为您大幅降低使用容器的安全风险。容器镜像服务也接入了云安全的扫描引擎,可支持镜像系统漏洞、镜像应用漏洞和镜像恶意样本的识别。关于镜像扫描的详细介绍,请参见安全扫描容器镜像
  • 镜像签名
  • 在容器镜像管理中,您可以通过内容可信的机制保障镜像来源的安全性及不被篡改。镜像的创建者可以对镜像做数字签名,数字签名将保存在容器镜像服务中。通过在部署前对容器镜像进行签名验证可以确保集群中只部署可信授权方签名的容器镜像,降低在您的环境中运行意外或恶意代码的风险,确保从软件供应链到容器部署流程中应用镜像的安全和可溯源性。关于镜像签名和验签的配置使用流程,请参见使用kritis-validation-hook组件实现自动验证容器镜像签名
  • 云原生应用交付链
  • 在容器安全高效交付场景中,您可以使用容器镜像服务的云原生应用交付链功能,配置镜像构建、镜像扫描、镜像全球同步和镜像部署等,自定义细粒度安全策略,实现全链路可观测、可追踪的安全交付。保障代码一次提交,全球多地域安全分发和高效部署,将DevOps的交付流程全面升级成DevSecOps。关于云原生应用交付链的详细介绍,请参见创建交付链

基础架构安全

  • 默认安全
  • 阿里云容器服务Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)集群节点,ControlPlane组件配置基于CIS kubernetes benchmark加固,且集群内所有系统组件均依据容器安全最佳实践进行了组件配置上的加固,同时保证系统组件镜像没有严重级别的CVE漏洞。
  • 每个新建的集群会默认分配一个与之对应的安全组,该安全组对于公网入方向仅允许ICMP请求。创建的集群默认不允许公网SSH连入,如果您需要配置通过公网SSH连入到集群节点,具体操作,请参见通过SSH连接ACK专有版集群的Master节点
  • 集群节点通过NAT网关访问公网,可进一步减少安全风险。
  • 在托管集群的Worker节点上,遵循权限最小化原则,节点上绑定的RAM角色对应的阿里云资源访问权限经过了最小化收敛。更多信息,请参见【产品变更】托管集群节点RAM角色收敛公告
  • 身份管理
  • ACK集群内所有组件之间的通讯链路均需要TLS证书校验,保证全链路通讯的数据传输安全,同时ACK管控侧会负责集群系统组件的证书自动更新。RAM账号或角色扮演用户均可以通过控制台或OpenAPI的方式获取连接指定集群API Server的Kubeconfig访问凭证,具体操作,请参见获取集群KubeConfig接口。ACK负责维护访问凭证中签发的身份信息,对于可能泄露的已下发Kubeconfig,可以及时进行吊销操作,具体操作,请参见吊销集群的KubeConfig凭证
  • 在集群创建时,ACK支持服务账户令牌卷投影(Service Account Token Volume Projection)特性以增强在应用中使用ServiceAccount的安全性。具体操作,请参见部署服务账户令牌卷投影
  • 细粒度访问控制
  • 基于Kubernetes RBAC实现了对ACK集群内Kubernetes资源的访问控制,它是保护应用安全的一个基本且必要的加固措施。ACK在控制台的授权管理页面中提供了命名空间维度的细粒度RBAC授权能力,主要包括以下几点。
  • 根据企业内部不同人员对权限需求的不同,系统预置了管理员、运维人员、开发人员等对应的RBAC权限模板,降低了RBAC授权的使用难度。
  • 支持多集群和多个子账号的批量授权。
  • 支持RAM角色扮演用户的授权。
  • 支持绑定用户在集群中自定义的ClusterRole。
  • 更多信息,请参见配置RAM用户或RAM角色的RBAC权限
  • ACK同时支持以组件管理的方式安装Gatekeeper组件,提供基于OPA策略引擎的细粒度访问控制能力。具体操作,请参见gatekeeper
  • 审计
  • ACK和SLS日志服务进行了深度集成,支持多种审计日志的采集、检索和图表化展示功能,具体包括以下三种:
  • 集群API Server审计日志:帮助您记录或追溯集群访问者的日常操作,是集群安全运维中的重要环节。在集群审计页面,您可以查看内容丰富的审计报表,同时可基于日志内容设置对指定资源类型操作的实时告警。具体操作,请参见使用集群API Server审计功能
  • Ingress流量审计:通过不同的可视化流量报表帮助您了解集群Ingress的整体状态,比如服务访问的PV和UV,成功和失败比例,以及延迟信息等全方位的流量监控,同时支持基于日志服务提供的机器学习算法,通过多种时序分析算法从Ingress的指标中自动检测异常点,提供问题发现的效率。具体操作,请参见Nginx Ingress访问日志分析与监控
  • 事件监控审计:基于事件的监控可以帮助您通过事件获取,实时诊断集群的异常和安全隐患。更多信息,请参见事件监控
  • Secret落盘加密
  • Kubernetes原生的Secret模型在etcd落盘时只经过了Base64编码,为了保护Secret中敏感数据的落盘安全性,在ACK Pro托管集群中,您可以使用在阿里云密钥管理服务KMS(Key Management Service)中创建的密钥加密Kubernetes集群Secret,实现应用敏感数据的落盘加密。具体操作,请参见使用阿里云KMS进行Secret的落盘加密


安全概览

容器服务ACK提供安全概览功能,支持对节点、容器镜像、容器运行时、工作负载配置进行风险识别及安全加固,可以帮助您提升云上资源和业务应用的安全治理效率。本文介绍如何使用容器服务ACK的安全概览功能。

使用说明

  • 安全概览功能仅支持ACK托管版集群,目前处于邀测中。如需使用,请提交工单申请。
  • 除了容器运行时风险,由于其他节点漏洞、容器镜像风险、工作负载配置风险数据会有24小时延时,在初次授权开启使用或风险修复完成后,需等待24小时,才可以在安全概览页面看到最新数据。

查看安全概览

  1. 登录容器服务管理控制台,在左侧导航栏选择集群
  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息
  3. 集群信息页面,单击安全概览页签。
  4. 安全概览会展示两个维度的风险。下图中红框部分的数据表示从风险视角分析的结果,蓝框部分的数据表示从资产视角分析的结果。例如,下图节点漏洞中,从风险视角看,该集群共出现5个高危风险,从资产视角看,该集群共有2个节点池,该高危风险存在1个节点池中。

阿里云-容器服务 Kubernetes 版_自定义_16

类别

说明

集群安全风险

展示集群整体安全状态。

节点漏洞

展示节点漏洞风险,默认开启。

容器镜像风险

用于识别来自容器镜像服务企业版ACR EE上容器镜像的安全风险,需授权后使用。

容器运行时风险

用于实时查看容器运行时风险并进行运行时实时防护。容器运行时风险基于云安全中心来做相关诊断,需购买云安全中心的高级版及以上版本。更多信息,请参见购买云安全中心。

工作负载配置风险

帮您实时了解当前状态下运行应用的配置是否有安全隐患,需开启配置巡检功能后使用。

集群安全风险

集群安全风险用于展示容器集群的安全风险等级,具体定义如下。

  • 健康
  • 当节点漏洞无高危风险时,集群中已开启容器镜像风险、容器运行时风险、工作负载配置风险扫描,且扫描结果无高危风险,则集群安全风险等级为健康。
  • 高危
  • 当节点漏洞出现高危或者容器运行时出现高危时,集群安全风险等级为高危。
  • 中危
  • 其他情况均为中危。

节点漏洞

节点漏洞检查默认开启。

安全概览页面下方,单击节点漏洞页签,查看节点漏洞列表,包含对应的节点池以及影响该节点池中的节点数,然后单击修复即可跳转至节点池详情页面进行漏洞修复。关于节点池CVE漏洞修复,请参见节点池CVE修复

说明

漏洞修复完成后,安全概览页面的相关数据还需等待24小时才会刷新。

容器镜像风险

您需要提前给ACR授权,单击容器镜像风险卡片上的去授权,根据提示完成授权相关操作。您也可以单击移除权限关闭容器镜像风险分析能力。

说明

授权完成后,会有24小时延时,才会显示当前集群下正在运行的容器镜像个数,并关联对应来自ACR EE的容器镜像的安全风险。

安全概览页面下方,单击容器镜像风险页签,查看容器镜像风险列表项,包含对应容器镜像的地址、受影响容器、扫描时间等详情,然后单击修复即可跳转至ACR EE对应的镜像风险详情页面,查看风险详情并修复。

说明

风险修复完成后,安全概览页面的相关数据还需等待24小时才会刷新。

容器运行时风险

容器运行时风险基于云安全中心来做相关诊断,您需要提前购买云安全中心的高级版及以上版本。更多信息,请参见购买云安全中心。云安全中心购买完成后,可实时查看容器运行时风险并进行运行时实时防护。

安全概览页面下方,单击容器运行时风险页签,查看容器运行时风险列表项,包含对应的告警名称、告警描述,然后单击处理即可跳转至安全监控页面进行风险治理。

工作负载配置风险

您需要提前开启配置巡检功能。开启配置巡检后,会有24小时延时,才会显示当前集群下的工作负载配置情况及风险情况。具体操作,请参见扫描集群Workload

安全概览页面下方,单击工作负载配置风险页签,查看对应的风险描述以及对应的加固建议,然后单击查看详情即可跳转至集群的配置巡检页面进行风险修复。

说明

风险修复完成后,安全概览页面的相关数据还需等待24小时才会刷新。


9 AIOps套件

AIOps套件概述

Kubernetes是一个大规模分布式的容器编排引擎,由于其复杂性,管理与运维集群都需要较深的领域知识。为降低Kubernetes集群运维管理的难度,容器服务平台提供了AIOps套件。AIOps套件包括集群检查、集群巡检和集群诊断,可以帮助您排查问题,提升运维效率。本文介绍AIOps套件优势、集群检查、集群巡检和集群诊断。

优势

AIOps套件由集群检查、集群巡检、集群诊断等一系列工具组成,具有以下优势。

功能

优势

集群检查

在执行集群运维操作之前会先触发集群检查,评估集群是否符合运维操作需求,提升了运维变更的成功率。

集群巡检

通过设置巡检的定时规则,定期预警集群存在的风险。

集群诊断

提供了一整套集群诊断工具,包括Pod诊断、节点诊断、Ingress诊断、内存诊断,降低问题排查难度。

阿里云-容器服务 Kubernetes 版_自定义_17

说明

AIOps套件支持ACK标准版、ACK Pro版、ACK专有版和ACK Serverless集群Pro版。

集群检查

集群检查覆盖核心运维操作,例如集群升级、集群迁移、组件安装、组件升级、节点池升级等。正式执行这些运维操作前会自动触发相应的检查,仅当集群检查通过后方可执行对应的运维操作。针对失败的检查项,提供了可视化的失败原因及修复方案。更多信息,请参见集群检查

集群巡检

得益于大量集群管理实践,容器服务平台沉淀了众多典型案例,并从中积累了丰富的集群巡检经验。集群巡检提供了以下功能。

  • 支持扫描集群运行状况,发现集群中存在的潜在风险。
  • 支持定期检查集群资源水位、资源配额、集群证书、组件版本等信息,提供了可视化的检查结果。
  • 对于异常项,列出了风险级别,提供了解决方案,便于用户自行运维。

更多信息,请参见集群巡检

集群诊断

集群诊断提供一键故障诊断能力,辅助您定位集群中出现的问题,包括Pod诊断、节点诊断、Service诊断、Ingress诊断、内存诊断。更多信息,请参见使用集群诊断

诊断项

说明

Pod诊断

涵盖了常见的Pod问题,例如Pod启动失败、Pod镜像拉取失败、Pod运行异常等,并在发现异常时给出相应的根因及修复方案。

节点诊断

涵盖了常见的节点问题,例如节点NotReady、Node网络异常、运行时异常等,并在发现异常时给出相应的根因及修复方案。

Service诊断

涵盖了常见的Service问题,例如Service异常事件、SLB后端服务器配额、SLB实例数配额等,并在发现异常时给出相应的根因及修复方案。

Ingress诊断

收集Ingress组件检查、启动参数配置、Ingress Pod错误日志、Ingress Controller SLB等信息,用于诊断应用访问异常。

内存诊断

覆盖ACK集群常见的内存问题,例如内存泄漏、内存碎片化、cgroup泄漏等,并以图表的方式展示内存整体使用情况。


集群检查

集群检查项及修复方案

容器服务ACK支持集群升级检查、集群迁移检查、组件检查和节点池检查。本文介绍集群检查项及异常检查项修复方案。

集群升级检查

Kubernetes自身的复杂性,以及升级K8s版本时引入的运行时变更、API废弃、特性变更等操作,导致集群升级存在较高操作风险。为保障集群平稳升级,ACK引入了集群升级前置检查。集群升级时会首先触发集群升级检查,仅当检查通过后才可以进行集群升级。

集群升级检查包含以下三类:

  • 集群资源:检查ACK集群相关的云资源,例如SLB、ECS、VPC等。
  • 集群组件:检查ACK集群配置、组件配置及应用配置,例如组件版本是否满足要求、应用是否使用过期API等。
  • 集群配置:检查ACK集群节点的相关配置。该检查需要在节点上创建Pod收集信息。

不同的类型、版本及运行时的集群检查项有所差别。下表仅供参考,请以实际检查项为准。

类别

检查项

描述

集群资源

APIServer SLB

SLB实例是否存在。

SLB实例状态是否正常。

SLB监听(端口及协议)配置是否正常。

SLB实例后端服务器组配置是否正常。

SLB访问控制配置是否正确,若不存在,则直接通过。

VPC

VPC实例是否存在。

VPC实例是否正常。

vSwitch

交换机是否存在。

交换机是否正常。

交换机的可用IP数量大于等于2。

ECS

ECS实例是否存在。

ECS实例是否正常。

ECS安全组是否正常。

ECS服务期是否正常。

ECS实例类型是否符合要求。

云助手客户端是否正常。

集群组件

Kube Proxy Master

组件是否存在。

Kube Proxy Worker

组件是否存在。

API Service

是否存在不可用的API Service。

集群实例

集群Master数量是否为3或5。

集群组件

Terway组件版本是否符合要求。

CoreDNS组件版本是否符合要求。

Cloud Controller Manager组件版本是否符合要求。

Nginx Ingress Controller组件版本是否符合要求。

ACK Virtual Node组件版本是否符合要求。

Metric Server组件版本是否符合要求。

节点

节点IP是否存在。

节点是否可调度。

节点是否Ready。

节点操作系统是否支持升级。

节点可用Pod数量是否大于2。

废弃API

集群中是否使用已废弃的API。

集群配置

iptables配置

iptables配置是否正常。

操作系统

操作系统是否支持升级。

yum

yum是否正常。

磁盘

节点文件系统是否正常。

是否有超过5%的节点剩余磁盘空间。

Swap

节点是否开启Swap。

NTP

节点NTP是否正常。

Systemd

节点Systemd版本是否大于systemd-219-67。

Kubelet

Kubelet配置是否符合预期。

容器运行时

Docker运行时或Containerd运行时是否正常。

内核配置

节点内核配置是否正常。

Manifest配置

Manifest文件是否符合预期。

集群迁移检查

在集群迁移前会触发迁移前置检查,仅当迁移检查通过后才能进行集群迁移。适用于以下场景:

  • 从ACK专有版迁移至ACK Pro托管版。
  • ACK标准托管版迁移至ACK Pro托管版。

集群迁移检查包含以下四类:

  • 集群资源:检查ACK集群相关的云资源,例如SLB、ECS、VPC等。
  • 集群组件:检查ACK集群中组件配置,例如是否存在不可用的API Service等。
  • 集群配置:检查ACK集群节点的相关配置。该检查需要在节点上创建Pod收集信息。
  • 组件使用:迁移ACK专有版后,部分组件会转为ACK托管,因此需要在迁移前检查组件是否存在异常。

不同的类型、版本及运行时的集群迁移检查项有所差别,下表仅供参考,请以实际检查项为准。

类别

检查项

描述

集群资源

APIServer SLB

SLB实例是否存在。

SLB实例状态是否正常。

SLB监听(端口及协议)配置是否正常。

SLB实例后端服务器组配置是否正常。

SLB访问控制配置是否正确。若不存在,则直接通过。

VPC

VPC实例是否存在。

VPC实例是否正常。

vSwitch

交换机是否存在。

交换机是否正常。

交换机的可用IP数量大于等于2。

ECS

ECS实例是否存在。

ECS实例是否正常。

ECS安全组是否正常。

云助手客户端是否正常。

集群组件

Kube Proxy Master

组件是否存在。

Kube Proxy Worker

组件是否存在。

API Service

是否存在不可用的API Service。

集群实例

集群Master数量是否为3或5。

节点

节点IP是否存在。

节点是否可调度。

节点是否Ready。

节点操作系统是否支持升级。

节点可用Pod数量大于2。

集群配置

操作系统

操作系统是否支持升级。

yum

yum是否正常。

组件使用

Cloud Controller Manager

Cloud Controller Manager组件是否存在异常。

组件检查

组件检查适用于组件升级场景。在组件升级前首先会触发组件升级检查,仅当组件升级检查通过后才能进行组件升级。

不同的类型、版本及运行时的组件检查项有所差别,下表仅供参考,请以实际检查项为准。

类别

检查项

描述

cloud-controller-manager

Addon_CCM

升级该组件是否会导致SLB变更。

Component_Block_Version

是否可以升级CCM版本。

csi-plugin

DaemonSet_Annotation

DaemonSet的注解是否符合预期。

Csi_Driver_Attributes

CSI Driver属性是否符合要求。

Node_Status_Ready

集群节点是否Ready。

csi-provisioner

Stateful_Set_Exist

是否为StatefulSet。

Deployment_Annotation

Deployment注解是否符合预期。

Storage_Class_Attributes

StorageClass属性是否符合要求。

Csi_Provisioner_Node_Count

Ready节点数量需要是否大于等于2。

terway-eniip

Systemd

节点Systemd版本是否大于systemd-219-67。

nginx-ingress-controller

Deployment_Healthy

Nginx Ingress Deployment是否健康。

Deployment_Not_Under_HPA

Deployment是否配置HPA。

Deployment_Not_Modified

Deployment是否发生过变更。

Nginx_Ingress_Pod_Error_Log

Nginx是否存在错误日志。

LoadBalancer_Service_Healthy

Nginx Service是否健康。

Nginx_Ingress_Configuration

Ingress是否存在不兼容配置。

aliyun-acr-credential-helper

RamRole_Exist

该组件是否对AliyunCSManagedAcrRole进行授权。

ack-cost-exporter

RamRole_Exist

该组件是否对AliyunCSManagedCostRole进行授权。

节点池检查

节点池检查适用于节点池升级场景。节点池升级时首先会触发节点池检查,仅当节点池检查通过后才能进行节点池升级。

节点池检查包含以下三类:

  • 集群资源:检查ACK集群相关的云资源,例如SLB、VPC等。
  • 集群组件:检查ACK集群配置、节点配置及应用配置。
  • 集群配置:检查ACK集群节点的相关配置。该检查需要在节点上创建Pod收集信息。

不同的类型、版本及运行时的节点池检查项有所差别,下表仅供参考,请以实际检查项为准。

类别

检查项

描述

集群资源

APIServer SLB

SLB实例是否存在。

SLB实例状态是否正常。

SLB监听(端口及协议)配置是否正常。

SLB实例后端服务器组配置是否正常。

SLB访问控制配置是否正确,若不存在,则直接通过。

VPC

VPC实例是否存在。

VPC实例是否正常。

vSwitch

交换机是否存在。

交换机是否正常。

交换机的可用IP数量大于等于2。

集群组件

API Service

是否存在不可用的API Service。

集群实例

集群Master数量是否为3或5。

节点

节点是否Ready。

节点可用Pod数量是否大于2。

HostPath

节点是否存在使用HostPath的Pod。

集群配置

iptables配置

iptables配置是否正常。

操作系统

操作系统是否支持升级。

yum

yum是否正常。

磁盘

节点文件系统是否正常。

节点剩余磁盘空间

是否有超过5%的节点剩余磁盘空间。

Swap

节点是否开启Swap。

NTP

节点NTP是否正常。

Systemd

节点Systemd版本是否大于systemd-219-67。

Kubelet

Kubelet配置是否符合预期。

容器运行时

Docker运行时或Containerd运行时是否正常。

内核配置

节点内核配置是否正常。

Manifest配置

Manifest文件是否符合预期。

异常检查项修复方案

异常检查项

修复方案

Aliyun_ARMS_CMonitor_Role权限策略不存在

为集群添加阿里云Prometheus监控授权策略。具体操作,请参见接入Kubernetes监控的手动添加ARMS和链路追踪权限策略内容。

Systemd版本过低

升级Systemd版本。

组件版本过低

升级对应组件版本。具体操作,请参见管理组件。

yum检查超时

执行以下命令,检查yum是否超时。默认超时时间为10s。time if type yum&>/dev/null; then yum list yum; fi

APIService不可用

执行以下命令,查找不可用的APIService。kubectl -n kube-system get apiservices |grep -i false确认异常APIService的用途。如果无需使用,执行以下命令,删除该APIService。重要误删除APIService会导致集群异常。如果您不清楚异常APIService用途,请提交工单联系我们。kubectl -n kube-system delete apiservices ${your-abnormal-apiservice-name}

节点存在使用HostPath的Pod

在Node替盘升级时,如果Pod使用了HostPath将容器目录挂载在宿主机上,则存在数据丢失的风险。您需要对该Pod的挂载目录进行检查。如果没有影响则可以继续执行升级。检查结果仅作为提示信息。

集群中存在废弃API

判断废弃API的来源,对废弃API采取对应处理措施。具体操作,请参见废弃API说明。

废弃API说明

Kubernetes 1.20及之后版本的集群升级前检查时,支持检查废弃API信息。在检查结果的实例列表中可以看到集群使用的废弃API。

例如从Kubernetes 1.20版本升级至Kubernetes 1.22版本时,系统会扫描过去一天的审计日志,检查1.20版本集群中是否使用了废弃API。

  • 如果1.20版本集群中使用了废弃API,检查结果不会影响升级流程,仅作为提示信息。
  • 如果集群在1.22版本中继续使用废弃API,可能会有安全隐患。

废弃API根据请求来源(User Agent)分为以下四类,建议在升级前,通过以下表格中的类别判断废弃API的来源,对废弃API采取对应处理措施。


集群巡检

集群巡检项及解决方案

容器智能运维平台提供定时巡检功能。您可以设置巡检的定时规则,定期检查集群存在的风险预警。本文介绍集群巡检的常见风险预警以及解决方案。

集群巡检项

说明

  • 关于如何使用集群巡检功能,请参见使用集群巡检
  • 根据集群配置,具体巡检项可能稍有不同。实际结果请以检查报告结果为准。

检查类型

预警风险

资源配额ResourceQuotas

VPC路由表条目配额紧张

VPC内SLB配额紧张

ECS可关联SLB配额紧张

SLB后端服务器配额紧张

SLB可监听数配额紧张

SLB实例数配额检查

资源水位ResourceLevel

SLB带宽使用率过高

SLB最大连接数过高

SLB新建连接速率过高

SLB QPS过高

集群Pod网段余量紧张

NAT网关连接数过高

节点CPU水位过高

节点内存水位过高

vSwitch剩余IP不足

Ingress Controller SLB新建连接速率检查

Ingress Controller SLB QPS检查

版本证书Versions&Certificates

集群版本过低

集群证书即将过期

CoreDNS版本过低

Ingress版本过低

节点Systemd版本过低

节点OS版本过低

集群组件更新检查

集群风险ClusterRisk

CoreDNS部署形态异常

CoreDNS部署在Master节点上

节点Docker Hang

节点最大Pod数设置检查

Ingress Controller SLB健康检查失败检查

Ingress就绪Pod百分比

Ingress Controller Pod错误日志

Nginx Ingress中rewrite-target配合捕获组使用

Nginx Ingress灰度规则

Nginx Ingress使用不正确的Annotation

废弃组件检查

集群API Server连接状态

节点公网访问情况

集群控制面vSwitch剩余IP

检查是否存在多个Service复用同一个SLB同一个端口


集群诊断

容器智能运维平台提供一键故障诊断能力,包括节点诊断、Pod诊断、Service诊断、Ingress诊断、内存诊断、网络诊断,可以辅助您定位集群中出现的问题。本文介绍如何在ACK集群中使用集群诊断功能。

前提条件

  • 已创建Kubernetes托管版集群。具体操作,请参见创建Kubernetes托管版集群
  • 确保Kubernetes集群运行状态处于运行中
  • 说明
  • 您可以登录容器服务管理控制台,在集群列表页面的集群状态列,确认集群状态为运行中)。

诊断功能介绍

容器智能运维平台提供的诊断功能如下表所示。

诊断项

说明

节点诊断

诊断节点相关的问题,例如K8s节点NotReady等。

Pod诊断

诊断K8s Pod状态异常相关的问题,例如Pod启动失败,Pod频繁重启等 。

Service诊断

诊断Service相关的问题,例如Service配置、资源配额、异常事件信息等。

Ingress诊断

诊断Ingress相关的流量配置等问题。

内存诊断

诊断节点内存相关问题,例如内存泄露、cgroup泄露、OOM等,诊断结果以可视化图表展示内存整体使用情况。

网络诊断

诊断网络常见问题,例如Pod之间不通、集群到公网访问不通、公网到LoadBalancer不通等。

配置故障诊断

重要

使用故障诊断功能时,系统将在您的集群节点上执行数据采集程序并收集检查结果。采集的信息包括系统版本、负载、Docker、kubelet等运行状态及系统日志中关键错误信息。数据采集程序不会采集您的业务信息及敏感数据。

配置节点诊断和配置Pod、Service、Ingress等诊断操作配置类似。下文以配置节点诊断为例,介绍如何配置故障诊断功能。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群
  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择巡检和诊断 > 故障诊断,并按照对话框提示进行授权。
  3. 故障诊断页面,单击节点诊断
  4. 选择节点面板,选择节点名称,仔细阅读注意事项后选中我已知晓并同意,然后单击发起诊断
  5. 您可以根据页面提示查看诊断进展。诊断完成后,诊断页面将显示诊断结果和诊断项,供您查看异常原因并修复问题。

查看诊断结果

故障诊断页面诊断列表的操作列,单击目标诊断报告对应的诊断详情,在诊断详情页面查看详细诊断结果。

说明

根据集群配置,具体检查项可能稍有不同。实际结果请以诊断页面结果为准。

诊断项

对应的检查项状态

说明

节点诊断

正常:无需处理。警告:需要确认,引起集群异常的情况需要处理。异常:尽快处理,避免集群无法正常工作。未知:未正常完成检查或结果未知。

节点诊断包括Node、NodeComponent、ClusterComponent、ECSControllerManager、GPUNode检查项,通过节点状态、节点组件状态、集群组件状态和ECS状态综合判定节点异常原因。在诊断详情页面,可以看到节点的诊断结果、修复建议及具体的诊断项列表。鼠标悬浮在检查项右侧图标上,即可查看检查项说明。如果有异常或警告类的检查项,会显示在待处理页签中。检查项状态为异常时,可以在目标检查项右侧状态中的查看详情的Tips中查看异常。

Pod诊断

Pod诊断包括Pod、ClusterComponent、Node、NodeComponent、ECSControllerManager检查项。通过Pod状态、集群组件状态、节点状态、节点组件状态和ECS状态综合判定Pod异常原因。在诊断详情页面,可以看到Pod的诊断结果、修复建议及具体的诊断项列表。鼠标悬浮在检查项右侧图标上,即可查看检查项说明。如果有异常或警告类的检查项,会显示在待处理页签中。检查项状态为异常时,可以在目标检查项右侧状态中的查看详情的Tips中查看异常。

Service诊断

Service诊断包括Service和ResourceQuotas检查项。通过检查CLB计费类型、证书、配额、异常Event等检查项判定Service异常原因。鼠标悬浮在检查项右侧图标上,即可查看检查项说明。如果有异常或警告类的检查项,会显示在待处理页签中。检查项状态为异常时,可以在目标检查项右侧状态中的查看详情的Tips中查看异常。

Ingress诊断

Ingress诊断包括Ingress、Addon、SLB检查项。通过Ingress状态、Ingress插件状态和SLB状态综合判定Ingress异常原因。鼠标悬浮在检查项右侧图标上,即可查看检查项说明。如果有异常或警告类的检查项,会显示在待处理页签中。检查项状态为异常时,可以在目标检查项右侧状态中的查看详情的Tips中查看异常。

内存诊断

无。

在诊断详情页面,您可以查看内存总览、内存分析和OOM分析,包括内存泄露状态、内存利用率、各个进程所占的内存等内容。

网络诊断

正常:无需处理。异常:尽快处理。

在诊断结果页面,能够查看网络诊断结果,并且在访问全图区域,会呈现出本次诊断访问链路的全景图。异常节点会使用不同于正常节点的颜色标出。



举报

相关推荐

0 条评论