集群服务画像
所有文档

          容器引擎 CCE

          集群服务画像

          概述

          CCE 的服务画像可以查看集群内所有资源的特征和规范性,如镜像检查、应用检查、网络检查、安全检查,并给出对应的评分和详细内容,帮助用户更好的了解集群内服务状况。

          注意:服务画像的结果基于前一天的集群数据,且检查规则是一般判定标准,不一定适用于所有业务场景。

          检查对象

          检查的对象包括:

          • 集群内的所有命名空间。
          • 资源对象包括:Deployment、DaemonSet、StatefulSet、Service、CronJob、Job。

          检查规则

          一. 镜像检查

          检查项 含义 影响级别
          tagNotSpecified 镜像地址没有声明 tag或者 tag 为 latest danger
          pullPolicyNotAlways 镜像拉取策略不是 always warning

          解释:

          • tagNotSpecified: 如果不声明镜像的版本(tag),则默认为 latest。不指定 tag 可能会导致各种各样的问题,如同一时刻不同 pod 可能运行了不同的程序,尽管他们看起来镜像版本是相同的。另外,没有版本标识的镜像在发布时无法区分版本号,无法进行回滚操作。
          • pullPolicyNotAlways: 依赖缓存的镜像可能会成为一个问题,尤其是配置了 latest 的 tag 时会直接使用本地缓存的镜像,不去拉取最新镜像。建议配置为 Always,不配置时默认就是 Always。

          参考文档:https://vsupalov.com/docker-latest-tag/

          错误示例:

          containers:
            - name: nginx
              image: hub.baidubce.com/cce/nginx-alpine-go:latest
              imagePullPolicy: Never

          正确示例:

          containers:
            - name: nginx
              image: hub.baidubce.com/cce/nginx-alpine-go:v1
              imagePullPolicy: Always

          二. 应用检查

          检查项 含义 影响级别
          cpuRequestsMissing 没有声明 cpu resource request 值 danger
          cpuLimitsMissing 没有声明 cpu resource limit 值 danger
          memoryRequestsMissing 没有声明 memory resource request 值 danger
          memoryLimitsMissing 没有声明 memory resource limit 值 danger
          readinessProbeMissing 没有声明 readinessProbe danger
          livenessProbeMissing 没有声明 livenessProbe danger

          解释:

          • 为运行在 Kubernetes 中的容器配置资源请求(request)和限制(limit)是一个重要的最佳实践。设置适当的 request 将确保所有应用程序都有足够的计算资源,设置适当的 limit 将确保应用程序不会占用太多资源。
          • readinessProbe 和 livenessProbe 可以帮助维护运行在 Kubernetes 中应用程序的健康状态。默认情况下 Kubernetes 只知道进程是否正在运行,而不知道它是否正常。正确配置 readiness 和 liveness 探针还可以确保应用程序的运行状况。

          参考文档:

          错误示例:

          没有配置 resources、livenessProbe、readinessProbe

          正确示例:

            resources: # 资源限制
              limits:
                cpu: 250m
                memory: 512Mi
              requests:
                cpu: 250m
                memory: 512Mi
            livenessProbe: # 健康检查:存活探针
              httpGet:
                path: /
                port: 80
              initialDelaySeconds: 20
              timeoutSeconds: 5
              periodSeconds: 5
            readinessProbe: # 健康检查:就绪探针
              httpGet:
                path: /
                port: 80
              initialDelaySeconds: 5
              timeoutSeconds: 1
              periodSeconds: 5

          三. 网络检查

          检查项 含义 影响级别
          hostNetworkSet 设置了 hostNetwork warning
          hostPortSet 设置了 hostPort warning

          解释:

          • hostNetworkSet: 尽管 Kubernetes 允许部署一个可以访问主机网络名称空间的 pod,但这并不是一个好的实践。在启用 hostNetwork 属性的情况下运行的 pod 将可以访问环回设备、监听本地主机的服务,并可用于窥探同一节点上其他 pod 的网络活动。一些特殊的系统组件可以将 hostNetwork 设置为 true,如 node-exporter。
          • hostPortSet: 在容器上设置 hostPort 属性将确保它可以在部署到的每个节点上的特定端口上访问。但如果指定了 hostPort 将限制在集群中调度 pod 的能力。

          参考文档:https://kubernetes.io/docs/concepts/configuration/overview/#services

          错误示例:

          spec:
            hostNetwork: true
          
            containers:
              - name: nginx
                ports:
                  - containerPort: 80
                    hostPort: 80

          正确示例:

          spec:
            hostNetwork: false
          
            containers:
              - name: nginx
                ports:
                  - containerPort: 80

          四. 安全检查

          检查项 含义 影响级别
          hostIPCSet 设置了 hostPID danger
          hostPIDSet 设置了 hostPID danger
          notReadOnlyRootFileSystem 没有设置文件系统为只读 warning
          privilegeEscalationAllowed 允许了特权升级 danger
          runAsRootAllowed 作为 root 账户执行 danger
          runAsPrivileged 特权模式执行 danger
          dangerousCapabilities capabilities 中有危险选项如 ALL/SYS_ADMIN/NET_ADMIN danger

          解释:

          在 Kubernetes 中保护工作负载是整个集群安全的一个重要部分,总体目标应该是确保容器以尽可能少的特权运行。这包括避免权限提升、不使用 root 用户运行容器以及尽可能使用只读文件系统。

          参考文档:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

          错误示例:

          spec:
            hostPID: true
            hostIPC: true
            containers:
              - name: nginx
                securityContext:
                  capabilities:
                    add: ["SYS_ADMIN"]

          正确示例:

          spec:
            hostPID: false
            hostIPC: false
            containers:
              - name: nginx

          计分规则

          结果评分的计算方式为:检测通过数/检测总数 * 100

          示例页面:

          image.png

          上一篇
          日志管理
          下一篇
          权限管理