StackStorm自动化 - 包

什么是包 包 “pack” 是扩展 StackStorm 的集成和自动化的部署单元。通常, pack 是沿着服务或产品边界组织的,例如 AWS、Docker、Sensu 等。 pack 包含Actions、Workflows、Rules、 Sensors和Aliases。StackStorm 内容始终是 pack 的一部分,因此了解如何创建 pack 并使用它们非常重要。 一些 pack 扩展了 StackStorm 以将其与外部系统集成,例如 AWS,GitHub,JIRA。我们称它们为“集成 pack ”。有些 pack 捕获自动化模式:这类 pack 含特定自动化过程的 workflow, Rule 和 Action - 例如st2 演示 pack 。我们称它们为“自动化 pack ”。这种命名主要是一种约定:StackStorm 本身对两者没有区别。 任何使用该 pack 所针对的服务的人都可以共享和重用集成 pack 。您可以在StackStorm Exchange找到许多这样的示例。自动化 pack 通常是特定于站点的,并且在特定团队或公司之外几乎没有用处;它们通常在内部共享。 总结:Packs是StackStorm中组织工作流、动作和传感器的方式。它们是一组相关的动作、工作流和传感器的集合,通常用于实现特定的自动化任务或集成。 包管理 StackStorm pack 通过命令进行管理:将为您提供有用的概述。st2 pack <...> / st2 pack -h 有些(例如core 基本 StackStorm action)是随 StackStorm 预装的。所有其他 pack 都需要您安装。幸运的是,这很容易! list和get是获取有关本地 pack 信息的主要命令:...

StackStorm自动化 - Rules

StackStorm 使用 Rules 和 Workflows 来捕获操作模式并进行自动化。rule将 Triggers 映射到 Actions(或 Workflow),应用匹配条件( Criteria),并将 Triggers payloads 映射到 Actions 的 Input。 注意 rule不按预期工作吗?请查看rule故障排除文档。其中介绍了rule测试、检查执行、记录和故障排除等内容。 Rule 的配置结构 stackstorm 中的 Rule 是以 YAML 格式来定义。以下是 Rule 定义结构以及 “必需”和 “可选” rule 元素的列表: yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 --- name: "rule_name" # required pack: "examples" # optional description: "Rule description." # optional enabled: true # required trigger: # required type: "trigger_type_ref" criteria: # optional trigger....

client-go - Pod使用in-cluster方式访问集群

在我们基于 Kubernetes 编写云原生 GoLang 代码时,通常在本地调试时,使用 kubeconfig 文件,以构建基于 clientSet 的客户端。而在将代码作为容器部署到集群时,则会使用集群 (in-cluster) 内的配置。 clientcmd 模块用于通过传递本地 kubeconfig 文件构建 clientSet。因此,在容器内使用相同模块构建 clientSet 将需要维护容器进程可访问的 kubeconfig 文件,并设置具有访问 Kubernetes 资源权限的 serviceaccount token。 下面是一个基于 kubeconfig 访问集群的代码模式 go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var ( k8sconfig *string //使用kubeconfig配置文件进行集群权限认证 restConfig *rest.Config err error ) if home := homedir.HomeDir(); home != "" { k8sconfig = flag.String("kubeconfig", fmt.Sprintf("./admin.conf"), "kubernetes auth config") } flag....

当cephfs和fscache结合时在K8s环境下的全集群规模故障

本文记录了在 kubernetes 环境中,使用 cephfs 时当启用了 fscache 时,由于网络问题,或者 ceph 集群问题导致的整个 k8s 集群规模的挂载故障问题。 结合fscache的kubernetes中使用cephfs造成的集群规模故障 在了解了上面的基础知识后,就可以引入故障了,下面是故障产生环境的配置 故障发生环境 软件 版本 Centos 7.9 Ceph nautilus (14.20) Kernel 4.18.16 故障现象 在 k8s 集群中挂在 cephfs 的场景下,新启动的 Pod 报错无法启动,报错信息如下 bash 1 ContainerCannotRun: error while creating mount source path /var/lib/kubelet/pods/5446c441-9162-45e8-0e93-b59be74d13b/volumes/kubernetesio-cephfs/{dir name} mkcir /var/lib/kubelet/pods/5446c441-9162-45e8-de93-b59bte74d13b/volumes/kubernetes.io~cephfs/ip-ib file existe 主要表现的现象大概为如下三个特征 对于该节点故障之前运行的 Pod 是正常运行,但是无法写入和读取数据 无法写入数据 permission denied 无法读取数据 kublet 的日志报错截图如下 彻底解决方法 需要驱逐该节点上所有挂在 cephfs 的 Pod,之后新调度来的 Pod 就可以正常启动了 故障的分析 当网络出现问题时,如果使用了 cephfs 的 Pod 就会出现大量故障,具体故障表现方式有下面几种 新部署的 Pod 处于 Waiting 状态...

深入Argo - Application resources

在安装和注册集群完成后,就需要引入第一个概念 “Application”(如何管理所有我的应用程序?) 什么是 Application 什么是 ArgoCD “Application”? 对于 ArgoCD “Application”的快速解释:它是托管 ArgoCD 部署的 Kubernetes 集群 CRD 包含了应用程序的所有设置,如: 要部署到哪个集群? 与哪个 Git 存储库进行同步? 其他部署设置 应用程序的 YAML 包含了部署您的存储库资源所需的所有信息,充当了在 ArgoCD 中管理应用程序的关键控制点。 Reference ​[1] docs/operator-manual/argocd-cm.yaml ​[2] Getting started with multi-cluster K8S deployments using Argo CD ​[3] https://medium.com/notive/managing-argocd-application-resources-1b2b4742ab90

初识Argo cd - 注册/删除k8s集群

登录argo cd bash 1 argocd login argocd_server:argocd_port_here 执行后输入admin/sercert bash 1 2 3 4 5 6 $ argocd login 10.0.0.5:30908 WARNING: server certificate had error: x509: cannot validate certificate for 10.0.0.5 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y Username: admin Password: 'admin:login' logged in successfully Context '10.0.0.5:30908' updated argocd cli 登录后的文件保存在 ~/.argocd/config 中 注册一个新集群 argocd 通过 kubectl 来获取集群的信息,所以 argocd 的主机上必须有 kubeconfig 文件 Note: KUBECONFIG 文件地址必须为实际路径,比如 ~/ 这种方式不可以...

nginx中的多路分支 - nginx map

引言 在 NGINX 中常用一种 “比较变量” 的手法,在编程语言中称为 “多路分支” (Case statement),也就是 nginx map,需要注意的一点是,太低版本 NGINX MAP 中只能使用单变量 Before version 0.9.0 only a single variable could be specified in the first parameter. [1] 下面将了解下 nginx map 的具体使用方式 nginx map使用 Nginx 配置主要是声明性的,这同样应用于 MAP 指令,NGINX MAP 是定义在 http{} 级别,最大的特点是仅在引用时进行处理, 如果请求未触及使用 NGINX MAP 变量的配置部分,则不会执行该 map 变量查找。换句话来理解,当在上下文 server, Location, if 等中使用结果变量时(指定的不是计算结果,而是在需要时计算该结果的公式),才会被使用,在 NGINX 需要使用该变量之前,NGINX MAP 不会给请求增加任何开销。 NGINX MAP 用于根据另一个变量的值创建一个变量,如下所示: text 1 2 3 4 map $variable_to_check $variable_to_set { "check_if_variable_matches_me" "variable_matches_checked_value"; default "no_match"; } 在上面的例子中, 变量 $variable_to_set 的被设置的结果为:如果 $variable_to_check 值为 “check_if_variable_matches_me”, 那么 $variable_to_set 将被设置为值 “variable_matches_checked_value” , 否则将设置为 “no_match”。...

GKE标准集群价格选择示例

GKE标准机器通常费用组成为 “集群管理费” + 标准GCE主机费用,以香港为例 主机规格 CPU (CORE/Mon) MEM (GB/Mon) E2( E2Balanced: N1, N2):费用优化 $23.77 $2.99 N1 (旧型号的Intel Sandy Bridge、Ivy Bridge、Haswell、Broadwell、Skylake) $38.45 $4.55 N2 CPU $31.9 $4.01 N2D CPU $27.75 $3.48 选择核心的标准(强要求) intel 2的公差,例如1, 2, 4, 6, 8, 10 AMD 2, 4, 8, 16, 32 只有 “费用优化” (cose-optimized) 的可以自定义配置,计算优化,内存优化等都是固定配置 新加坡的价格是香港价格的 “90%”

K8S Admission Webhook官方扩展版 - ValidatingAdmissionPolicy

相关阅读:深入理解Kubernetes 4A - Admission Control源码解析 准入 (Admission) 是 Kubernetes 提供 4A 安全认证中的一个步骤,在以前版本中 (1,26-),官方提供了 webhook 功能,使用户可以自行的定义 Kubernetes 资源准入规则,但这些是有成本的,需要自行开发 webhook,下图是 Kubernetes准入控制流程。 图:Kubernetes API 请求的请求处理步骤图 Source:https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/ 在 Kubernetes 1.26 时 引入了 ValidatingAdmissionPolicy alpha 版,这个功能等于将 Admission Webhook controller 作为了一个官方扩展版,通过资源进行自行扩展,通过这种方式带来下面优势: 减少了准入请求延迟,提高可靠性和可用性 能够在不影响可用性的情况下失败关闭 避免 webhooks 的操作负担 ValidatingAdmissionPolicy 说明 验证准入策略提供一种声明式的、进程内的替代方案来验证准入 Webhook。 验证准入策略使用通用表达语言 (Common Expression Language,CEL) 来声明策略的验证规则。 验证准入策略是高度可配置的,使配置策略的作者能够根据集群管理员的需要, 定义可以参数化并限定到资源的策略 下面是一个 ValidatingAdmissionPolicy 的示例,配置 Deployment 必须拥有的副本数的限制 yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 apiVersion: admissionregistration....

Kubernetes集群中的IP伪装 - ip-masq-agent

“IP 伪装” 通常应用于云环境中,例如 GKE, AWS, CCE 等云厂商都有使用 “IP伪装” 技术,本文将围绕 “IP伪装” 技术本身,以及这项技术在 Kubernetes 集群中的实现应用 ip-masq-agent 的源码分析,以及 ”IP伪装“ 能为 Kubernetes 带来什么作用,这三个方向阐述。 什么是IP伪装? IP 伪装 (IP Masquerade) 是 Linux 中的一个网络功能,一对多 (1 to Many) 的网络地址转换 (NAT) 的功能 。 IP 伪装允许一组计算机通过 “伪装” 网关无形地访问互联网。对于互联网上的其他计算机,出站流量将看起来来自于 IP MASQ 服务器本身。互联网上任何希望发回数据包(作为答复)的主机必须将该数据包发送到网关 (IP MASQ 服务器本身)。记住,网关(IP MASQ 服务器本身)是互联网上唯一可见的主机。网关重写目标地址,用被伪装的机器的 IP 地址替换自己的地址,并将该数据包转发到本地网络进行传递。 除了增加的功能之外,IP Masquerade 为创建一个高度安全的网络环境提供了基础。通过良好构建的防火墙,突破经过良好配置的伪装系统和内部局域网的安全性应该会相当困难。 IP Masquerade 从 Linux 1.3.x 开始支持,目前基本所有 Linux 发行版都带有 IP 伪装的功能 什么情况下不需要IP伪装 已经连接到互联网的独立主机 为其他主机分配了多个公共地址 IP伪装在Kubernetes集群中的应用 IP 伪装通常应用在大规模 Kubernetes 集群中,主要用于解决 “地址冲突” 的问题,例如在 GCP 中,通常是一种 IP 可路由的网络模型,例如分配给 Pod service 的 ClusterIP 只能在 Kubernetes 集群内部可用,而分配 IP CIDR 又是一种不可控的情况,假设,我们为 k8s 分配的 IP CIDR 段如下表所示:...

Linux网络子系统中的计数器

在Prometheus node-exporter中,存在多个网络监控指标指标标志着主机的网络状态,但是大家常常忽略这些指标,而这些指标又很重要,这些指标的来源是根据Linux网络子系统中的多个计数器定义的,本文就解开这些TCP计数器的面目。 TcpExtListenOverflows 和 TcpExtListenDrops 当内核从客户端接收到 SYN 时,如果 TCP 接受队列已满,内核将丢弃 SYN 并将 TcpExtListenOverflows +1。同时内核也会给TcpExtListenDrops +1。当 TCP 套接字处于 LISTEN 状态,并且内核需要丢弃数据包时,内核总是将 TcpExtListenDrops +1。因此,增加 TcpExtListenOverflows 将使 TcpExtListenDrops 同时增加,但在不增加 TcpExtListenOverflows 的情况下,TcpExtListenDrops 也会增加,例如内存分配失败也会导致 TcpExtListenDrops 增加。 以上解释基于内核 4.10 或更高版本,在旧内核上,当 TCP 接受队列已满时,TCP Stack有不同的行为。在旧内核上,TCP Stack不会丢弃 SYN,它会完成 3 次握手。当接受队列已满时,TCP 堆栈会将套接字保留在 TCP 半开队列中。由于处于半开队列中,TCP 堆栈将在指数退避计时器上发送 SYN+ACK,在客户端回复 ACK 后,TCP Stack检查接受队列是否仍满,如果未满,则将套接字移至接受队列如果队列已满,则将套接字保留在半开队列中,下次客户端回复ACK时,该套接字将有另一次机会移至接受队列。 这两个计数器在 node_expoter 中的指标是: node_netstat_TcpExt_ListenDrops node_netstat_TcpExt_ListenOverflows TcpInSegs 和 TcpOutSegs TcpInSegs 和 TcpOutSegs 都是被定义在 RFC1213 [1] TcpInSegs 是指 TCP layer 接收到的数据包数量,包括错误接收的数据包,例如校验和错误、无效的TCP头等。只有一个错误不会被包含在内:如果第 2 层目标地址不是 NIC 的第 2 层地址。如果数据包是多播或广播数据包,或者 NIC 处于混杂模式,则可能会发生这种情况。在这些情况下,数据包将被传递到 TCP 层,但 TCP 层将在增加 TcpInSegs 之前丢弃这些数据包。 TcpInSegs 计数器不知道 GRO (Generic Receive Offload)。因此,如果两个数据包被 GRO 合并,TcpInSegs 计数器只会增加 1。...

初识Argo cd - 在k8s集群上安装argo cd

GitOps 最初由 Weaveworks (weave cni的组织) 在 2017 年的博客中提出 [1],使用 “Git” 作为 CI/CD 的 “单一事实来源”,将代码的更改集成到每个项目的存储库中,并使用拉取请求来管理 infra 和部署。 在理解上就可以理解为 “是一种基于 git 的操作框架” Argo CD 是一种 kubernetes 之上的 “声明式” (declarative) 的 gitops CD, 在本文作为了解如何在 Kubernetes 集群中安装和配置 Argo CD。 前提准备 想要安装 Argo CD 首先环境需要具备如下: 已经安装好 kubectl 命令行工具 拥有 kubeconfig 文件 一个可供测试的 Kubernetes 集群,如:kind, minikube, kubeadm, binary 等任意的集群 步骤1 - 选择适配 kubernetes 版本的 Argo 根据官方的解释, Argo CD 在任何给定时刻所支持的版本,这些版本是 N 和 N - 1 次要版本的最新修补版本 (x.x.new)。这些 Argo CD 版本与 Kubernetes 项目官方支持的 Kubernetes 版本相一致,通常是 Kubernetes 的最近发布的 3 个版本。...

初识Argo cd - argo cd架构

Argo组件 API Server Repository Server Application Controller API Server:一个 gRPC/REST 服务器,提供了 “Web UI”、“CLI” 和 “CI/CD” 使用的 API 应用管理和状态报告 调用应用操作(例如同步、回滚、用户定义的操作) 存储库和 Cluster credential 管理(作为 kubernetes secret 存储) 为外部提供身份认证和代理授权功能 RBAC 试试 Git webhook 事件的 listener/forwarder Repository Server:内部服务,用于维护 git 中的应用清单 (manifests) 的本地缓存。负责接收生成和返回 kubernetes 清单 仓库URL revision (commit, tag, branch) APP PATH 模板特定的参数 Application Controller:Kubernetes controller,主要做的工作是持续监控运行的 Application,并于当前实时状态和目标所需状态进行对比(与 Kubernetes Controller 功能是相同的),并且不仅仅是 KC 还会和存储库中指定目标状态进行比较,检测到 OutOfSync 状态将进行纠正。 Argo 架构 Argo CD 时最常见的三种架构:单实例方案, 集群级方案,以及折衷方案 (compromise between the two)。...

CentOS6/7 curl SOCKS5堆溢出漏洞修复 CVE-2023-38545 CVE-2023-38546

10月11日发布的 curl 8.4.0版本,在新版本中修复漏洞 CVE-2023-38545 和 CVE-2023-38546 CVE-2023-38545: This flaw makes curl overflow a heap based buffer in the SOCKS5 proxy handshake. [1] CVE-2023-38546: This flaw allows an attacker to insert cookies at will into a running program using libcurl, if the specific series of conditions are met. [2] 安装方式有两种,“编译” 与 “更新RPM”,本文以 RPM 方式更新 curl 到 8.4.0 版本 下载curl源码包 升级至少需要更新至 curl 8.4 ,首先从官网下载源码包 [3] 将curl打包为rpm 因为 curl 源码包内没有提供 rpm 的规格文件,所以我们需要自己编写,但是比较麻烦,可以让 chatgpt 生成一个,这里使用 centos7 的 curl....

Docker运行PostgreSQL

在本文,尝试使用 Docker 运行 PostgreSQL ,为了适配 goalert 项目,因为从来没有尝试过使用 PostgreSQL 了解PostgreSQL数据库 在我们继续运行 PostgreSQL 数据库的 Docker 容器之前,我们先来了解一下 PostgreSQL 数据库。 PostgreSQL 是一个开源 RDMS,类似于 MySQL。它是一个面向对象的数据库,但我们可以处理结构化和非结构化数据。 PostgreSQL 数据库可以运行在各种平台上,包括 Windows、Mac OS X 和 Linux。它还提供高级数据类型和性能优化功能来存储和扩展复杂的数据库工作负载。 一些常见的 postgres 镜像 镜像 说明 postgres:latest 最新的一个稳定版本 postgres:17 PostgreSQL version 14.x (x为最近的一次 patch) postgres:17.4 17.4 一个具体的版本 postgres:bookworm 使用 Debian Bookworm (12) 构建的 PostgreSQL postgres:15-bookworm 使用 Debian Bookworm (12) 构建的 PostgreSQL 15 使用公共镜像运行PostgreSQL 要使用 Docker 运行 PostgreSQL,我们首先需要拉取 Docker Hub 上可用的 postgres 公共镜像: bash 1 docker pull postgres 在上面的命令中,我们拉取了 postgres 最新的稳定版镜像。 如果要指定版本的 postgres 镜像,可以使用以下命令...

探索kubectl - 巧用jsonpath提取有用数据

工具命令集合 长期总结 - Linux日志查询命令 长期总结 - Linux网络命令合集 长期总结 - Linux性能分析命令 awk常用案例 bash shell常用示例 探索kubectl - 巧用jsonpath提取有用数据 探索kubectl - kubectl诊断命令集合 kubernetes集群工具 kubect 提供了一种强大的数据提取的模式,jsonpath,相对于 yaml 来说,jsonpath 拥有高度的自制提取功能,以及一些更便于提取字段的模式,使得过去 kubernetes 资源信息时更便捷,在本文中将解开 jsonpath 的神秘面纱。 什么是jsonpath JSONPath 是一种用于查询 JSON 数据结构中特定元素的查询语言。它类似于 XPath 用于 XML 数据的查询。JSONPath 允许您以一种简单而灵活的方式从 JSON 对象中提取数据,而不需要编写复杂的代码来解析 JSON 结构。 JSONPath 使用路径表达式来指定您要检索的 JSON 数据的位置。这些路径表达式类似于文件系统中的路径,但用于导航 JSON 结构。以下是一些常见的 JSONPath 表达式示例: $:表示 JSON 根对象。 $.store:表示从根对象中获取名为 “store” 的属性。 $.store.book:表示从根对象中获取 “store” 属性中的 “book” 属性。 $.store.book[0]:表示获取 “store” 属性中的 “book” 属性的第一个元素。 $.store.book[?(@.price < 10)]:表示选择 “store” 属性中的 “book” 属性中价格小于 10 的所有元素。 Function Description Example Result text the plain text kind is {....

Ceph对象存储 - 使用s3cmd管理对象存储

s3cmd 是一个 Amazon S3 工具,可以用于创建 s3 bucket、向对象存储中上传,检索和管理数据,在下文将如何在 Linux 上如何安装和使用 “s3cmd” 工具。 在 Linux 上安装 s3cmd s3cmd 在 Ubuntu/Debian, Fedora/CentOS/RHEL 这类发行版上的默认软件包存储库中都是可用的,只需在执行对应发行版的安装命令即可安装。 CentOS/RHEL/Fedora bash 1 2 3 4 # centos 8 $ sudo dnf install s3cmd # centos 7 $ sudo yum install s3cmd Ubuntu/Debian bash 1 sudo apt-get install s3cmd 安装最新版本 通常包管理仓库中的版本比较旧,或者使用的 Linux 没有包管理来获取最新版本的 s3cmd,那么可以使用源代码在系统上安装最新版本的 s3cmd,下载地址可以参考附录1 [1] 下面以 2.2 版本进行安装 bash 1 2 $ wget https://sourceforge.net/projects/s3tools/files/s3cmd/2.2.0/s3cmd-2.2.0.tar.gz $ tar xzf s3cmd-2.2.0.tar.gz 使用以下命令和源文件安装...

Ceph对象存储 - windows上安装s3cmd

s3cmd 是为了管理 Linux 服务器上的 S3 存储桶而创建的。 但我们也在 Windows 服务器上使用这个工具。 本文将帮助您在 Windows 系统中设置 s3cmd Requirment s3cmd 系统要求: s3cmd 需要 Python 2.7 或更高版本才能运行,还需要安装GPG。 步骤1:安装 Python 从 python 官方网站下载并安装 python 2.7 或更高版本并安装。安装python后,将将其加到 PATH 环境变量。 步骤 2: 在 Windows 上安装 GPG Gpg4win (GNU Privacy Guard for Windows) 是一款用于数字加密 (file, email) 的免费软件,可以使用以下链接下载并安装它。 步骤3:配置 s3cmd 下载最新的 s3cmd 源代码 从s3cmd 官方页面 并解压; 提取源代码后,使用以下命令设置 s3 环境。 它会询问您的 对象存储的 AccessKey 和 SecretKey,即 GPG 命令的路径 bat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 C:s3cmd> python s3cmd --configure Enter new values or accept defaults in brackets with Enter....

修改ingress-nginx中default backend默认状态码

什么是 default backend default backend 是 ingress-nginx 中的一个服务,主要用于处理 nginx controller 无法识别的而请求的服务 主要提供了两个接口 /healthz that returns 200 /that returns 404 如何改default backend 状态码 需求:修改 default backend 状态码 404 为 403 原理:nginx-controller 启动时指定了一个 default backend 容器,如下所示 bash 1 2 3 4 5 6 7 8 9 10 11 12 containers: - args: - /nginx-ingress-controller # 这里指的是 default-backend 的名称 {namespace_name}/{service_name} - --default-backend-service=$(POD_NAMESPACE)/ingress-nginx-ext-defaultbackend - --publish-service=$(POD_NAMESPACE)/ingress-nginx-ext-controller - --election-id=ingress-controller-leader - --ingress-class=nginx-yewu-ext - --configmap=$(POD_NAMESPACE)/ingress-nginx-ext-controller - --validating-webhook=:8443 - --validating-webhook-certificate=/usr/local/certificates/cert - --validating-webhook-key=/usr/local/certificates/key 通常情况下在通过定义配置文件方式改变是不容易做的,ingress-nginx 提供了一种自定义方式 “custom-error-pages“ 可以完成 ,完成后该 defaultBackend 支持使用 X-code方式自定义任意的错误页即错误码。...

Ceph对象存储 - 桶策略 Bucket Policy

CEPH RGW 支持 Bucket 的 S3 策略语言,但又不完全类似于 S3 的策略,因为 S3 中策略是基于 AWS 的,某些属性在 CEPH 中并不存在,下面就解开 RGW 关于桶策略的配置。 Bucket Policy (桶策略,下文中统称为 BP) 是对象存储中的管理权限和对象存储访问的机制。 Policy Language 的组成 BP 的格式采用了 JSON 语言,也就是 PL 是基于 JSON 的一种策略语言,他的格式主要为几个元素 json 1 2 3 4 5 6 7 8 9 { "Version": "2012-10-17", "Statement": [{ "Effect": ..., "Principal": ..., "Action": ..., "Resource": ... }] } 该结构由 ==一个== Version (表示当前版本) 和 ==一个或多个== Statement 数组组成,这些数组定义了希望应用的策略。每个语句数组中都有Effect, Principal, Action, Resource 和可选的 Condition 元素。...