首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Polaris是什么?Kubernetes的开源配置验证工具

Polaris是什么?Kubernetes的开源配置验证工具

作者头像
CNCF
发布于 2021-07-07 09:01:03
发布于 2021-07-07 09:01:03
1.4K00
代码可运行
举报
文章被收录于专栏:CNCFCNCF
运行总次数:0
代码可运行

客座文章作者:Robert Brennan,Fairwinds 开源软件总监。文章最初在 Fairwinds 的博客上发表。

Kubernetes 是一个非常强大的软件部署平台。它提供的灵活性级别可以容纳几乎任何用例,不管它有多独特。这就是 Kubernetes 被一半以上的财富 500 强公司采用的原因。根据 Dimensional Research 和 VMware 的一项研究,“State of Kubernetes 2020 Report[1]”,K8s 的使用率从 2018 年的 27%大幅飙升至 2020 年的 48%。

但与所有工具一样,在力量和安全之间有一个自然的权衡。有数百万种方法可以配置 Kubernetes 及其运行的工作负载,但其中 99%都是危险的。很容易出现安全性、效率或可靠性方面的问题——通常只是因为忘记在 YAML 配置中指定特定的字段。

为了解决这个问题,社区提出了一组配置 Kubernetes 工作负载的 Kubernetes 最佳实践。这些都是你应该一直遵循的指导方针,除非你有很好的理由不去遵循。Fairwinds 的 Polaris 项目[2]就是为了帮助定义和实施这些最佳实践而诞生的。

一个例子

下面是一个 Kubernetes Deployment 的例子,直接摘自 Polaris 文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

你能看出哪里出了问题吗?可能不会,除非你非常熟悉 Kubernetes 的配置。但仍有几个未指明的字段可能导致严重的问题。

CPU 和内存设置

首先,一定要告诉 Kubernetes 你的应用程序预期将使用多少内存和 CPU。这允许 Kubernetes 有效地将你的工作负载打包到将运行它们的底层节点上,并为它提供指导,以确定应用程序何时行为不正常(例如,由于内存泄漏)。

一个更好的容器规范应该是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
YAML
      containers:
      - name: nginx
        image: nginx:1.14.2
        resources:
          requests:
            memory: 512MB
            cpu: 500m
          limits:
            memory: 1GB
            cpu: 1000m

健康探针

上面的例子也缺少 Liveness 和 Readiness 探针。这些设置告诉 Kubernetes 如何检查你的应用程序是否健康,是否可以提供流量。如果没有 Liveness Probe,Kubernetes 将无法在你的应用程序冻结时自愈;如果没有 Readiness Probe,它可能会把流量导向还没有完全就绪的 pod。

Liveness 和 Readiness 探针需要一些特定于应用程序的知识,但通常轮询特定的 HTTP 端点或运行 Unix 命令来测试应用程序是否正确响应。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
YAML
      containers:
        livenessProbe:
          exec:
            command:
            - cat
            - /tmp/healthy
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080

收紧安全

许多 Kubernetes 的工作负载设置“默认情况下是不安全的”——它们错误的做法是授予你的应用程序权限去做它可能需要或不需要的事情。例如,默认情况下,每个容器都将安装一个可写的根文件系统,这可以使攻击者能够替换系统二进制文件或修改配置。

更安全的容器配置应该是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
YAML
      containers:
      - name: nginx
        image: nginx:1.14.2
        securityContext:
          allowPrivilegeEscalation: false
          privileged: false
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          capabilities:
            drop:
              - ALL

Polaris 如何提供帮助

Polaris 会检查上面所有的问题和更多的问题。它有 24 个内置检查(截至 2021 年 5 月)。随着用户提交反馈和社区学习新的更好的配置工作负载的方法,检查不断被添加到我们的库中。

我们的每个检查都在 JSON Schema 中定义——每次运行 kubectl 来验证添加到集群中的资源时,Kubernetes 本身都使用相同的模式语言。

最简单的检查只需要几行配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
YAML
successMessage: Host network is not configured
failureMessage: Host network should not be configured
category: Security
target: Pod
schema:
  '$schema': http://json-schema.org/draft-07/schema
  type: object
  properties:
    hostNetwork:
      not:
        const: true

但我们也可以利用 JSON 模式和 Go 模板的全部功能来创建一些相当复杂的检查。你可以查看Polaris 文档[3],了解更多关于如何编写自己的自定义 Polaris 检查的信息,如果你的组织有自己的内部策略和想要实施的最佳实践,这将非常有用。

一旦你设置好你的 Polaris 配置(或者你对我们提供的默认配置很满意),Polaris 可以在三种不同的模式下运行:作为一个仪表盘,显示你的集群中哪些资源需要关注;作为一个准入控制器,阻止有问题的资源进入集群;或者在 CI/CD 中,在基础结构作为代码检入之前检查。

有信心地部署

Kubernetes 是一个非常强大的平台,但是强大的力量带来了巨大的责任。在部署到 Kubernetes 时,确保遵循最佳实践是很重要的。如果你忽略了验证你的配置,可能会导致安全漏洞、生产中断或云成本超支。

将 Polaris 添加到你的工作流程中——无论是在 CI/CD、准入控制,或只是一个被动的仪表板——可以帮助你充满信心地在这些危险的水域导航。如果你想利用 Polaris 在集群的舰队,或把它和其他一些伟大的 Kubernetes 审计工具——如Trivy[4]扫描容器, Goldilocks[5]精简内存和 CPU 设置——来看看Fairwinds Insights[6],一个在 Kubernetes 环境审核和执行政策的平台。

因此,无论你是经验丰富的 Kubernetes 专家,还是你只是在构建你的第一个集群,都要确保有一些防护措施!Fairwinds 的 Polaris 和 Insights 便是一个很好的起点。

参考资料

[1]

State of Kubernetes 2020 Report: https://k8s.vmware.com/state-of-kubernetes-2020/

[2]

Fairwinds 的 Polaris 项目: https://github.com/FairwindsOps/polaris

[3]

Polaris 文档: https://polaris.docs.fairwinds.com/customization/custom-checks/

[4]

Trivy: https://github.com/aquasecurity/trivy

[5]

Goldilocks: https://github.com/FairwindsOps/goldilocks/

[6]

Fairwinds Insights: https://www.fairwinds.com/insights

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kubernetes集群体检之Polaris
随着 Kubernetes 的广泛使用,如何保证集群稳定运行,成为了开发和运维团队关注的焦点。在集群中部署应用时,像忘记配置资源请求或忘记配置限制这样简单的事情可能就会破坏自动伸缩,甚至导致工作负载耗尽资源。这样种种的配置问题常常导致生产中断,为了避免它们我们用 Polaris 来预防。Polaris是fairwinds开发的一款开源的kubernetes集群健康检查组件。通过分析集群中的部署配置,从而发现并避免影响集群稳定性、可靠性、可伸缩性和安全性的配置问题。
mervinwang
2021/07/01
1.4K0
Kubernetes集群体检之Polaris
坚持你的Kubernetes策略:使用一个有效的执行计划
客座文章最初由 Joe Pelletier 在Fairwinds 博客[1]上发表
CNCF
2021/05/07
4830
常见的Kubernetes配置安全威胁
作者:Fairwinds战略副总裁Joe Pelletier。客座文章之前在Fairwinds博客上发表。
CNCF
2020/08/17
4820
常见的Kubernetes配置安全威胁
如何使用Polaris验证你的Kubernetes集群是否遵循了最佳安全实践
Polaris是一款针对Kubernetes的开源安全策略引擎,可以帮助广大研究人员通过验证和修复Kubernetes的资源配置,来审查Kubernetes集群是否遵循了最佳安全实践。
FB客服
2023/09/08
3330
如何使用Polaris验证你的Kubernetes集群是否遵循了最佳安全实践
k8s实践(五):容器探针(liveness and readiness probe)
  只要将pod调度到某个节点,Kubelet就会运行pod的容器,如果该pod的容器有一个或者所有的都终止运行(容器的主进程崩溃),Kubelet将重启容器,所以即使应用程序本身没有做任何特殊的事,在Kubemetes中运行也能自动获得自我修复的能力。
loong576
2019/09/10
8.7K0
k8s实践(五):容器探针(liveness and readiness probe)
如何在 Kubernetes 上部署高可用应用程序
但使用 Kubernetes 不仅仅是设置它并向其部署 pod。Kubernetes 中许多使应用程序更具弹性和高可用性的丰富功能不仅仅是一件事,而是不同流程和配置的组合。从如何在不停机的情况下部署应用程序,到调度Pod 以确保它们在节点之间正确分布。这些是我们将在本文中讨论的配置和技术的要点:
DevOps云学堂
2024/05/11
5780
如何在 Kubernetes 上部署高可用应用程序
Kubernetes 探针详解!
配置 readiness、liveness 和 startup 探针可以处理不健康的 Pod,本文介绍了三种类型的探针、最佳实践和有关工具,以检测可能存在的配置问题。
CNCF
2021/01/12
3.2K0
Kubernetes 探针详解!
原生Kubernetes监控功能详解-Part2
本周三晚20:30,Kubernetes Master Class在线培训第六期《在Kubernetes中创建高可用应用》即将开播,点击文末【阅读原文】即可免费预约注册!
CNCF
2019/12/05
7100
原生Kubernetes监控功能详解-Part2
4-Kubernetes入门基础之Pod介绍
前面简单的介绍了Kubernetes基础知识以及单节点和高可以用集群的搭建, 本章将从实操来介绍Kubernetes概念和术语以及控制器,便于各位读者进行学习;
全栈工程师修炼指南
2022/09/29
1K0
4-Kubernetes入门基础之Pod介绍
Kubernetes 之资源清单
在 Kubernetes 系统中,Kubernetes 对象是持久化的实体,Kubernetes 使用这些实体去表示整个集群的状态。特别地,它们描述了如下信息:
民工哥
2021/04/21
7710
Kubernetes 健康状态检查liveness和readiness
健康检查(Health Check)是让系统知道您的应用实例是否正常工作的简单方法。 如果您的应用实例不再工作,则其他服务不应访问该应用或向其发送请求。 相反,应该将请求发送到已准备好的应用程序实例,或稍后重试。 系统还应该能够使您的应用程序恢复健康状态。
yaohong
2020/06/16
4.2K0
Kubernetes的pod解析
定义:容器镜像是一个只读的模板,包含了运行应用程序所需的所有代码、运行时库、环境变量和配置文件等。它是一个特殊的文件系统,用于提供容器运行时所需的程序、库、资源、配置等文件,并包含了一些为运行时准备的一些配置参数 作用: 在制作镜像时 , 常常用到的就是Docker技术 。制作成的镜像使得应用程序及其依赖项可以在不同的环境中进行部署和运行, 无需担心环境问题而导致的问题。 它是创建容器的起点,通过在镜像上添加一个可写层,容器可以在镜像的基础上进行变化,而不会影响到原始镜像 , 其实对于相关的配置文件在现网中不是打包到镜像中的,而是通过环境变量的方式读取的, 这就是在可写层执行的一个实例。
用户11097514
2024/07/16
6560
Kubernetes的pod解析
kubernetes系列教程(八)Pod健康检查机制
上一篇文章中kubernetes系列教程(七)深入玩转pod调度介绍了kubernetes中Pod的调度机制,通过实战演练介绍Pod调度到node的几种方法:1. 通过nodeName固定选择调度,2. 通过nodeSelector定向选择调度,3. 通过node Affinity亲和力调度,接下来介绍kubernetes系列教程pod的健康检查机制。
HappyLau谈云计算
2019/09/30
10K0
kubernetes系列教程(八)Pod健康检查机制
怎么使用Pod的liveness和readiness与startupProbe
当你使用kubernetes的时候,有没有遇到过Pod在启动后一会就挂掉然后又重新启动这样的恶性循环?你有没有想过kubernetes是如何检测pod是否还存活?虽然容器已经启动,但是kubernetes如何知道容器的进程是否准备好对外提供服务了呢?让我们通过kubernetes官网的这篇文章Configure Liveness and Readiness Probes,来一探究竟。
没有故事的陈师傅
2021/09/29
1.9K0
Kubernetes 漫游:理解 ConfigMap
通过 docker desktop 可以安装适用于单机和开发环境单机版的 K8S,如果 docker desktop 无法启动 Kubernates 通过以下方式解决:
phoenix.xiao
2023/11/16
3620
Kubernetes 漫游:理解 ConfigMap
首次部署 Kubernetes 应用,总会忽略这些事
根据我的个人经验,大多数人似乎倾向于通过 Helm 或者手动方式将应用程序甩给 Kubernetes,之后就坐等每天轻松调用的美好生活。但在 GumGum 公司的实践当中,我们体会到 Kubernetes 应用的一系列“陷阱”,也希望把这些陷阱与大家分享,给您的 Kubernetes 探索之旅带来一点启发。
深度学习与Python
2020/11/06
4660
首次部署 Kubernetes 应用,总会忽略这些事
【Enjoy Kubernetes】2. 每位开发人员都应该了解的17 个Kubernetes最佳实践
作为最流行的容器编排系统,K8s是现代云工程师应该掌握的一项技能。K8s是一个众所周知的复杂系统,因此了解您应该做什么,不应该做什么,这会对您的部署如虎添翼。
于顾而言SASE
2024/12/27
2580
【Enjoy Kubernetes】2. 每位开发人员都应该了解的17 个Kubernetes最佳实践
「走进k8s」Kubernetes1.15.1的POD健康检查(19)
PS:这里socket端口的方式没有演示,只是提供了源码跟http基本一样的。这就是存活探针和可读性探针的使用方法,pod的这个健康检查对提高应用程序的稳定性健壮性很有必要,一般线上的程序都需要部署这2个参数 liveness probe 和 readiness probe。pod 是一个逻辑单位,可以包含 n 个 container,他们共享 something。docker的container 就是单个container。
IT架构圈
2019/08/19
1.1K0
「走进k8s」Kubernetes1.15.1的POD健康检查(19)
Kubernetes K8S之Pod生命周期与探针检测
每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效。在设计时可以充分利用这一特性,将一组密切相关的服务进程放入同一个Pod中;同一个Pod里的容器之间仅需通过localhost就能互相通信。
踏歌行
2020/10/15
1.7K0
Kubernetes K8S之Pod生命周期与探针检测
K8s 简单上手
上面的命令就是基于指定的 image,创建一个名为 webserver 的 pod。运行过后,用 kubectl get pods 能够看到当前 namespace 下的所有 pod 的信息
SimpleMaxR
2024/09/30
2050
相关推荐
Kubernetes集群体检之Polaris
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验