前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >打造强大的集群权限控制:OPA部署与策略制定全流程

打造强大的集群权限控制:OPA部署与策略制定全流程

作者头像
希里安
发布2024-03-07 17:31:01
2060
发布2024-03-07 17:31:01
举报
文章被收录于专栏:希里安

近日见闻

1、 Visual Studio Code 1.87 发布,编辑器中的语音听写 - 使用你的声音直接在编辑器中听写。对于安装了 VS Code Speech 扩展的用户,可以使用语音直接在编辑器中听写。--vscode社区

2、新版开源中国 APP —— 3月1日正式上线!

3、本项目希望通过开源社区的力量复现 Sora,由北大 - 兔展 AIGC 联合实验室共同发起,当前资源有限仅搭建了基础架构,无法进行完整训练,希望通过开源社区逐步增加模块并筹集资源进行训练,当前版本离目标差距巨大,仍需持续完善和快速迭代。地址:https://github.com/PKU-YuanGroup/Open-Sora-Plan

  1. 摘抄:
代码语言:javascript
复制
不飞则已,一飞冲天;
不鸣则已,一鸣惊人。

——《韩非子》

OPA介绍

OPA开放策略代理(OPA,发音为“oh-pa”)是一个开源的、通用的策略引擎,它可以统一跨栈的策略执行。OPA 提供了一种高级的声明式语言,让你可以将策略作为代码来指定,并提供简单的 API 来从你的软件中卸载策略决策。你可以使用 OPA 在微服务、Kubernetes、CI/CD 流水线、API 网关等中执行策略。OPA 最初是由 Styra 创建的,它很自豪能成为云原生计算基金会(CNCF)景观中的一个毕业项目。有关详情,请阅读 CNCF 的公告。--官网

官网地址https://www.openpolicyagent.org/

官方文档地址:https://www.openpolicyagent.org/docs/latest/

以上是官网对于OPA的介绍,那么再简单来说就是针对云原生环境的基于策略的控制,为整个堆栈的管理员提供灵活、细粒度的控制。OPA 为跨云原生堆栈的策略提供统一的工具集和框架。

这里再聊一聊k8s如何集成OPA,在 Kubernetes 里,OPA 好比一个全能的保安,它通过一种叫做“准入控制器”的特殊通道来确保安全规则被遵守。你可以想象,Kubernetes 集群像一座大楼,而每当有新的服务(比如 Pods)或者其他东西想要进入这座大楼时,它们都需要通过这个保安的检查。

以前,我们有一种被称为“Pod 安全策略”的保镖,但他已经退休了(PSP)。虽然这位保镖干得还不错,但他只关注服务本身,也就是 Pod,对于其他进入大楼的东西(比如 Ingresses、Deployments、Services 等)就无能为力了。

这就是 OPA 登场的时候。这位全能的保安 OPA 不仅仅会检查服务,还会检查进入大楼的任何东西。它的工作方式是站在大楼的入口处,也就是 Kubernetes 的 API 服务器前,检查所有想要进入的请求,确保它们都符合规定。

例如,OPA 可以执行一个规则,要求所有的服务都要使用公司的域名,还可以确保所有使用的软件镜像都必须来自公司内部的镜像仓库。这样,无论是服务本身还是服务使用的其他资源,都必须遵循同一套规则。OPA 就像是一个可以在多个地方同时看门的超级保安,守护着整个 Kubernetes 大楼的安全。

如图所示:

k8s集成OPA

再来看看怎么集成OPA:

  1. 部署 OPA:

在Kubernetes集群中,可以使用官方提供的Helm chart来部署OPA作为一个准入控制器。

以Helm为例,你可以通过Helm安装命令来部署OPA:

代码语言:javascript
复制
helm repo add open-policy-agent https://open-policy-agent.github.io/kube-mgmt/charts
helm install open-policy-agent/opa

这将安装OPA并将其配置为一个 Kubernetes 准入控制器。

  1. 编写和部署策略:

OPA 将策略决策与策略执行分离,当应用需要做出策略决策时,它会查询 OPA 并提供结构化数据(例如 JSON)作为输入,OPA 接受任意结构化数据作为输入

使用Rego语言来定义你的策略。一个简单的Regop策略示例是这样的:

代码语言:javascript
复制
package kubernetes.admission

default allow = false

allow {
    input.request.kind.kind == "Pod"
    input.request.operation == "CREATE"
    all([image | image := input.request.object.spec.containers[_].image; startswith(image, "your-registry-domain/")])
}

这个策略检查所有新创建的Pod,确保它们使用的镜像都是从特定的镜像仓库拉取的。

然后你需要将这些策略部署到你的集群中。如果你是手动部署的,可能需要将Rego文件加载到OPA的Pod中。

  1. 设置准入控制钩子:

你需要配置Kubernetes API服务器来调用OPA作为准入控制器。这通常通过创建一个名为 ValidatingWebhookConfiguration 的资源来完成,它告诉API服务器在有资源请求时发送一个HTTP POST请求到OPA。

代码语言:javascript
复制
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: opa-validating-webhook
webhooks:
  - name: opa.kube-system.svc
    rules:
      - apiGroups:
          - "*"
        apiVersions:
          - "*"
        operations:
          - CREATE
          - UPDATE
        resources:
          - "*"
    clientConfig:
      service:
        namespace: kube-system
        name: opa
    failurePolicy: Fail # 或者可以设置为 Ignore
  1. 测试你的策略:

在开始强制实施之前,你应该在你的环境中测试策略以确保它们按预期工作。你可以在小范围内试运行它们,或者在非生产环境中进行测试。可以使用命令行工具如 kubectl 来模拟请求并查看OPA的响应。

  1. 监控 OPA:

为了确保 OPA 正在正常工作,你需要监控其性能和健康状况。你可以配置OPA将日志发送到集中的日志平台,比如Elasticsearch或者Prometheus来收集指标。

OPA提供了一些内建的监控端点,你可以用来收集性能数据。

  1. 迭代和更新策略:

随着时间的推移,你可能需要更新或迭代策略以适应新的要求或安全场景。你应该设定一套流程来管理和更新你的策略,这可能包括版本控制、审计和自动化测试。

确保在实施这些步骤之前,你已经阅读了相关的OPA和Kubernetes文档,并理解了策略如何影响你的集群行为。策略的变化可能会导致不期望的拒绝服务,所以在生产环境中部署之前一定要进行充分的测试。

这里更详细的步骤可以查看官网的例子:https://www.openpolicyagent.org/docs/latest/kubernetes-introduction/

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

本文分享自 希里安 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 近日见闻
  • OPA介绍
  • k8s集成OPA
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档