Polaris:一款超强大的开源 Kubernetes 安全策略引擎

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

37ac6a3a63e44e12da285808132a30f4.png

Kubernetes 是一个非常强大的软件部署平台。它提供的灵活性水平几乎可以适应任何用例,无论多么独特。这就是超过一半的财富 500 强企业采用 Kubernetes 的原因。根据 Dimensional Research 和 VMware 的一项研究《2020 年Kubernetes 现状报告》[1],K8s 的采用率从 2018 年的 27% 大幅飙升至 2020 年的 48% 。

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

为了解决这个问题,社区提出了一套用于配置 Kubernetes 工作负载的 Kubernetes 最佳实践。这些是应该始终遵循的准则,除非你有充分的理由不这样做。 Fairwinds 的 Polaris 项目的[2] 诞生是为了帮助定义和实施这些最佳实践。

关于Polaris

Polaris是一款针对Kubernetes的开源安全策略引擎,可以帮助广大研究人员通过验证和修复Kubernetes的资源配置,来审查Kubernetes集群是否遵循了最佳安全实践。

当前版本的Polaris包含了30多种内置的配置策略,并且能够使用JSON Schema构建自定义策略。如果你通过命令行或Webhook运行Polaris的话,Polaris则可以根据策略标准自动修复问题。

645f795a516aaa9d2c48af90e26e1271.png
Polaris

工具特性

Polaris支持下列三种运行模式:

1、仪表盘模式[3]:根据“策略即代码”来验证Kubernetes资源安全态势;

2、准入控制器模式[4]:自动拒绝或修改不符合组织策略的工作负载;

3、命令行工具[5]:将策略作为代码纳入CI/CD流程,以测试本地YAML文件;

outside_default.png
Polaris架构

安装Polaris仪表板

Polaris仪表盘可以使用kubectl或Helm安装在集群上。它也可以在本地运行,并使用存储在KUBECONFIG中的凭据连接到集群。

需要注意的是,仪表盘是了解集群或“代码基础结构”中哪些工作负载不符合最佳实践的好方法。

Helm安装

helm repo add fairwinds-stable https://charts.fairwinds.com/stable

helm upgrade --install polaris fairwinds-stable/polaris --namespace polaris --create-namespace

kubectl port-forward --namespace polaris svc/polaris-dashboard 8080:80

本地代码安装

首先,你需要一个有效的KUBECONFIG来设置仪表盘并连接到你的集群。

广大研究人员可以直接访问该项目的【Releases页面[6]】来下载最新的代码发布版本,或使用【Homebrew[7]】安装:

brew tap reactiveops/tap

brew install reactiveops/tap/polaris

polaris dashboard --port 8080

我们还可以将仪表盘指向本地文件系统:

polaris dashboard --port 8080 --audit-path=./deploy/

本地Docker容器安装

docker run -d -p8080:8080 -v ~/.kube/config:/opt/app/config:ro  quay.io/fairwinds/polaris:1.2 polaris dashboard --kubeconfig /opt/app/config

使用Polaris仪表板

Polaris仪表板可以简单直观地了解Kubernetes工作负载的当前状态,以及可以改进的路线图。仪表板提供了集群范围的概述,以及按类别、命名空间和工作负载划分结果:

c96b6b4273b2cfbaaa45f6bd7d728da3.png
北极星仪表板

Polaris的默认标准是非常高的,所以如果你的分数低于你的预期,请不要感到惊讶。

Polaris的一个关键目标是设定一个高标准,并在默认情况下实现出色的配置。如果我们包含的默认值过于严格,那么很容易将配置作为部署配置的一部分进行调整,以更好地适应你的工作负载。

Polaris示例

下面是一个 Kubernetes 部署示例:

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 能够有效地将你的工作负载打包到运行它们的节点上,并在应用程序出现异常(例如,由于内存泄漏)时提供指导。

更好的容器规范如下所示:

containers:
      - name: nginx
        image: nginx:1.14.2
        resources:
          requests:
            memory: 512MB
            cpu: 500m
          limits:
            memory: 1GB
            cpu: 1000m

健康探针

上面的示例还缺少 Liveness 和 Readiness Probes。这些设置告诉 Kubernetes 如何检查你的应用程序是否正常并准备好提供流量。如果没有 Liveness Probe,如果你的应用程序冻结,Kubernetes 将无法自我修复;如果没有Readiness Probe,它可能会将流量定向到尚未完全准备就绪的 Pod。

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

containers:
        livenessProbe:
          exec:
            command:
            - cat
            - /tmp/healthy
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080

安全强化

许多 Kubernetes 工作负载设置默认情况下是不安全的——它们倾向于授予应用程序权限来执行它可能需要或不需要的操作。

例如,默认情况下每个容器都会安装一个可写的根文件系统,这可以使攻击者能够替换系统二进制文件或修改配置。

更安全的容器配置如下所示:

containers:
      - name: nginx
        image: nginx:1.14.2
        securityContext:
          allowPrivilegeEscalation: false
          privileged: false
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          capabilities:
            drop:
              - ALL

Polaris 如何提供帮助

Polaris 检查上述所有问题以及更多问题。它带有几十项内置检查。随着用户提交反馈并且社区学习新的更好的配置工作负载的方法,检查会不断添加到我们的库中。

我们的每项检查都是在 JSON Schema 中定义的。

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

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 Schema 和 Go Templates 的全部功能来创建一些相当复杂的检查。你可以查看 Polaris 文档,[8] 了解有关如何编写自己的自定义 Polaris 检查的更多信息,如果你的组织有自己的内部策略和想要执行的最佳实践,这将非常有用。

其他资料

  • • Goldilocks[9] - 通过将内存和 CPU 设置与实际使用情况进行比较来调整 Kubernetes Deploy资源的大小

  • • Polaris[10] - 审核、执行和构建 Kubernetes 资源策略,包括 20 多项内置最佳实践检查

  • • Pluto[11] - 检测未来版本中已弃用或删除的 Kubernetes 资源

  • • Nova[12] - 检查你的 Helm 图表是否有可用更新

  • • rbac-manager[13] - 简化 Kubernetes 集群中 RBAC 的管理

引用链接

[1] Kubernetes 现状报告: https://k8s.vmware.com/state-of-kubernetes-2020/
[2] Fairwinds 的 Polaris 项目的: https://github.com/FairwindsOps/polaris
[3] Polaris仪表盘模式: https://polaris.docs.fairwinds.com/dashboard
[4] Polaris准入控制器模式: https://polaris.docs.fairwinds.com/admission-controller
[5] Polaris命令行工具: https://polaris.docs.fairwinds.com/infrastructure-as-code
[6] Polaris Releases页面: https://github.com/fairwindsops/polaris/releases
[7] Polaris Homebrew: https://brew.sh/
[8] Polaris 文档,: https://polaris.docs.fairwinds.com/customization/custom-checks/
[9] Goldilocks: https://github.com/FairwindsOps/Goldilocks
[10] Polaris: https://github.com/FairwindsOps/Polaris
[11] Pluto: https://github.com/FairwindsOps/Pluto
[12] Nova: https://github.com/FairwindsOps/Nova
[13] rbac-manager: https://github.com/FairwindsOps/rbac-manager

本文转载自:「云原生百宝箱」,原文:https://url.hi-linux.com/eOF9J,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

5ba11e0ea63892a56033aa573162bd9d.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

2b9bc3ec49fe21e545b33a7a4ae5c974.png

你可能还喜欢

点击下方图片即可阅读

8001a3d7c07c239fb60bd101984af763.jpeg

100 个常用 Kubernetes 诊断命令,助你轻松搞定各种 Kubernetes 集群故障

e276fd1b53318810fb6ecc0e27fd5928.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

2d8c3b8b08fde537dd212b7cdaf63b9e.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值