AI PLAY玩法更新持续收录
← 回到更新流

2026-09-08 · 原文发布日

Slack里说人话建K8s资源,带护栏和审批

在Slack里@机器人用大白话描述要建的Kubernetes资源,Claude生成结构化清单和解释后,先用确定性规则做硬校验:命名空间白名单、必须声明CPU内存请求与上限、禁止特权模式和hostNetwork/hostPath。违规直接打回并列出原因;通过则发到Slack等人工批准,批准后才调用K8s API创建,随后检查就绪状态,不健康就自动删除回滚并在Slack告警。

原文要点

来源说明该流程从Slack应用提及或手动触发获取大白话需求,Claude生成结构化JSON清单和短解释,再用确定性规则校验命名空间白名单、CPU/内存请求与上限、禁用特权模式、hostNetwork与hostPath;失败回Slack列违规并停止,成功发Slack等人工批准,批准后才调Kubernetes API创建,随后查就绪,不健康则删除并告警。设置需Anthropic、Slack bot与HTTP Header Auth bearer token,并配置API base URL、命名空间、频道、宽限/超时。

这次做成什么

在测试环境搭一个“Slack说人话→生成清单→硬性护栏→人工审批→创建→健康检查→失败回滚”的闭环练习;用合成Deployment和独立校验配置跑通分支,不导入也不宣称复刻原工作流。

准备什么

  • 一个可丢弃的Kubernetes测试集群或命名空间,且有权创建/删除Deployment
  • Slack测试工作区、可接收app mention并发消息的bot token与目标频道
  • Anthropic Claude凭据;Kubernetes bearer token仅放HTTP Header Auth测试凭据
  • n8n实例可访问Slack与集群网络;原模板字段、按钮名与超时需在导入页面核对

具体怎么做

  1. 捕获请求并统一字段

    用Slack Trigger订阅测试频道的app mention,或先手动运行;把消息文本、用户、频道、时间戳映射为request_text、requester、channel、thread_ts。测试数据只用合成描述,禁止包含真实命名空间管理员账号、IP或密钥。

  2. 让模型只输出可解析结构

    在Claude步骤使用下方提示词,要求返回JSON对象manifest与explanation,不要Markdown围栏。解析后若JSON失败,直接走失败分支,把parse_error与原文截断回Slack线程,避免把坏输出送去校验。

  3. 确定性护栏先拦截

    在解析/校验步骤读取本站guardrail配置:namespace必须在白名单;containers[].resources.requests和limits必须同时有cpu、memory;securityContext.privileged不得为true;spec.hostNetwork不得为true;volumes不得含hostPath。违规集合非空即回复逐条原因并停止。

  4. 通过后才进入人工批准

    校验通过时把manifest美化摘要、explanation、风险点发到Slack同一线程,等待approve/reject。记录approver与decision;reject或超时都不得调用创建,只回写已取消及原因。

  5. 创建、观察、不健康回滚

    批准后才用HTTP Header Auth bearer token调用集群既有发布入口或API;端点路径按你的集群核对,不硬编码来源未给的路径。等待配置的grace/timeout后读取就绪与可用状态;失败则删除刚创建资源并在Slack告警,成功则发确认。

可直接复制的材料

Claude结构化清单提示词

本站独立编写;{{allowed_namespace}}与{{request_text}}需替换为流程变量,模型名称/参数按你的凭据核对。

你是Kubernetes发布助手。只输出一个JSON对象,不要Markdown、不要额外文字。字段:manifest必须是合法Kubernetes Deployment对象;explanation用不超过120字中文解释;risks是字符串数组。硬性要求:metadata.namespace使用{{allowed_namespace}};每个container必须有resources.requests.cpu、resources.requests.memory、resources.limits.cpu、resources.limits.memory;禁止securityContext.privileged=true;禁止spec.hostNetwork=true;禁止volumes[].hostPath。用户需求:{{request_text}}。若无法满足,返回{"manifest":null,"explanation":"无法安全生成","risks":[原因]}。

护栏配置示例

本站示例值;命名空间、频道、宽限/超时需换成测试环境,来源未给精确性能边界,不作为SLA。

{"allowedNamespaces":["sandbox-dev","sandbox-qa"],"requiredResources":["requests.cpu","requests.memory","limits.cpu","limits.memory"],"forbidden":{"privileged":true,"hostNetwork":true,"hostPathVolume":true},"slackTargetChannel":"#k8s-guardrail-lab","rolloutGraceSeconds":30,"rolloutTimeoutSeconds":180,"approvalTimeoutMinutes":15}

合成Slack测试事件

合成数据;channel/user/ts需替换为测试工作区事件,不要放真实客户信息。

{"type":"app_mention","channel":"C0TESTLAB","user":"U0TESTUSER","text":"@k8s-bot 在 sandbox-dev 建一个 web-demo Deployment,镜像 nginx:1.27-alpine,2个副本,每容器请求cpu 100m内存128Mi,上限cpu 500m内存512Mi,不要特权不要宿主机网络","ts":"1760000000.000100"}

输入与输出示例

本站虚构演示,非原作者结果/未运行;输入输出字段相互对应。

输入

@k8s-bot 在 sandbox-dev 建一个 web-demo Deployment,镜像 nginx:1.27-alpine,2个副本,每容器请求cpu 100m内存128Mi,上限cpu 500m内存512Mi,不要特权不要宿主机网络

对应输出

校验通过摘要:namespace=sandbox-dev在白名单;replicas=2;resources四件套齐全;privileged=false;hostNetwork=false;hostPath=0。进入审批,批准后创建;若180秒内readyReplicas<2,则删除deployment/web-demo并发Slack告警:rollback=deleted, reason=rollout_timeout。

做完检查这些

  • 违规样例缺少limits.memory时必须被拒,Slack回复列出missing: limits.memory且流程停止
  • hostNetwork=true或任一hostPath卷出现时不得进入审批,更不得调用创建接口
  • 只有approve后才出现创建动作;reject/超时只产生取消记录,不产生集群变更
  • 就绪失败时必须执行删除并告警,成功消息只在健康判定通过后发送

容易卡住的地方

  • Slack app mention未订阅目标频道会无触发;bot无发帖权限会卡在审批通知
  • 把bearer token写进消息或示例数据会泄露;只用HTTP Header Auth隔离凭据
  • 模型输出带Markdown围栏会导致parse_error,必须在提示词和解析处双重限制
  • 命名空间白名单过宽会削弱护栏;hostPath/特权例外不应在练习中开放
  • 来源未提供精确API路径与按钮名,实施前要在原模板和集群文档核对

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Create Kubernetes resources from Slack with Anthropic Claude and safety guardrails
原作者
Oneclick AI Squad
原始发布日期
2026-09-08T04:23:02.357Z
来源
https://n8n.io/workflows/19354