跳转到正文
报告库
用途分类 / 数据分析

Azure Kubernetes Skill 安全审计

作者说它能做什么(原文)

Plan, create, and configure production-ready Azure Kubernetes Service (AKS) clusters. Covers Day-0 checklist, SKU selection (Automatic vs Standard), networking options (private API server, Azure CNI Overlay, egress configuration), security, and operations (autoscaling, upgrade strategy, cost analysis). WHEN: create AKS environment, provision AKS, enable AKS observability, design AKS networking, ch

第三方安全检查结论

先别安装或运行

已检查文件
53
发现的风险
9
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。发现 6 项风险
高风险

从可变的 latest URL 直接向集群安装 Gateway API 资源

原文依据:1 处
发现了什么

检测到缺少 Gateway API CRD 时,工作流建议让 `kubectl` 直接读取 GitHub `releases/latest` 下的远程 YAML 并应用。该 URL 未固定发布版本、提交或内容摘要,也没有要求先审查下载内容。

为什么需要注意

远程发布内容变化或分发链路受损时,具有相应集群权限的用户会把未经审查的资源安装到集群。CRD 属于集群范围配置,错误或恶意定义可能影响多个命名空间及后续资源处理。

这是部署阶段的实际条件指令:当 CRD 缺失时,将 GitHub“latest”地址的内容直接交给 kubectl apply。该地址未固定版本或摘要,远端发布内容变化后,同一流程可能向集群安装不同资源。用户可要求固定经过审查的 Gateway API 版本和摘要,并先下载、检查及用 server-side dry-run 验证。

azure-kubernetes-app-deploy/phases/quick-deploy.md:159来自说明文档打开原文件
### Verify Gateway API CRDs (only if Istio Gateway API detected)```bashkubectl get crd gateways.gateway.networking.k8s.io httproutes.gateway.networking.k8s.io 2>/dev/null```If missing: `kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/latest/download/standard-install.yaml`
高风险

可变 GitHub Action 标签在拥有 Azure OIDC 权限的作业中执行

原文依据:3 处
发现了什么

CI 模板使用 `azure/login@v2` 和 `azure/aks-set-context@v4` 等可变主版本标签,而作业具有 `id-token: write`,随后登录 Azure 并取得 AKS 上下文。主版本标签可以在不改变仓库工作流的情况下指向新代码。

为什么需要注意

如果上游 Action 被入侵、发布标签被重指或未来版本引入恶意行为,其代码可在 CI 身份上下文中执行,并可能使用 OIDC 令牌和 Azure 权限访问注册表或集群。

模板给作业 id-token: write,并在同一作业中通过 azure/login 获取 Azure 身份、设置 AKS 上下文。相关第三方 Action 仅固定到可移动的主版本标签 @v2/@v4,而非提交摘要;标签若被上游移动或账户受损,新增代码可在具备云身份的作业内运行。用户可要求把所有 Action 固定到审核过的完整提交 SHA,并对 OIDC 身份采用最小 Azure 权限。

azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:32来自说明文档打开原文件
# OIDC federation requires these permissions so GitHub can issue# an ID token that Microsoft Entra ID will accept.permissions:  id-token: write   # Required for requesting the JWT  contents: read     # Required for actions/checkout
查看另外 2 个位置
azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:124来自说明文档打开原文件
      # -----------------------------------------------------------      - name: Azure Login (OIDC)        uses: azure/login@v2        with:          client-id: ${{ secrets.AZURE_CLIENT_ID }}          tenant-id: ${{ secrets.AZURE_TENANT_ID }}          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:145来自说明文档打开原文件
      - name: Set AKS context        uses: azure/aks-set-context@v4        with:          resource-group: ${{ env.RESOURCE_GROUP }}          cluster-name: ${{ env.AKS_CLUSTER }}
中风险

每次 main 分支代码推送都会自动更改集群,没有环境审批门

原文依据:3 处
发现了什么

模板把 main 分支 push 配置为触发器,随后直接构建镜像、创建或应用命名空间和全部 `k8s/` 清单。可见配置没有 GitHub Environment、人工审批或部署前 server-side dry-run。

为什么需要注意

合并到 main 的错误或被入侵的更改可立即进入有权限的 AKS 集群。清单中的删除性替换、权限变化或错误资源限制可能导致服务中断或扩大工作负载权限。

模板在 main 分支代码推送时自动触发,远程构建并推送镜像,随后创建/应用命名空间和清单并等待发布。可见作业没有 environment 审批步骤,因此一旦启用该模板,合入 main 的代码可直接改变目标集群;OIDC 身份权限过宽时影响更大。用户可要求使用受保护的 GitHub Environment、人工审批、server-side dry-run,并限制哪些路径或发布标签能触发生产部署。

azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:18来自说明文档打开原文件
on:  # Trigger on push to main branch (app code changes only)  push:    branches:      - main    paths-ignore:      - 'docs/**'      - '*.md'      - '.github/**'      - '.vscode/**'  # Allow manual trigger from the Actions tab  workflow_dispatch:
查看另外 2 个位置
azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:171来自说明文档打开原文件
      - name: Deploy to AKS        id: deploy        run: |          # Ensure the namespace exists before applying manifests          kubectl create namespace ${{ env.NAMESPACE }} --dry-run=client -o yaml \            | kubectl apply -f -          kubectl apply -f k8s/ --namespace ${{ env.NAMESPACE }}          kubectl rollout status deployment/${{ env.APP_NAME }} \            --namespace ${{ env.NAMESPACE }} \            --timeout=300s
azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:138来自说明文档打开原文件
      # -----------------------------------------------------------      - name: Build and push image to ACR        run: |          az acr build \            --registry ${{ env.ACR_NAME }} \            --image ${{ env.APP_NAME }}:${{ github.sha }} \            .
中风险

基础镜像策略故意使用可变标签,构建结果无法固定复现

原文依据:4 处
发现了什么

基础镜像规则明确禁止固定 minor/patch,并要求保留浮动 major 或 major.minor 标签。Dockerfile 随后直接从这些标签构建,没有固定镜像摘要。相同源码在不同时间可能获取不同的基础文件和可执行程序。

为什么需要注意

正常上游更新可能未经应用测试进入生产镜像;若镜像仓库或标签被破坏,后续构建还可能执行或打包恶意内容。仅使用 major 标签也无法证明实际部署了哪一份基础镜像。

策略主动禁止固定 minor/patch,要求生成浮动 major 或 major.minor 标签;模板的 FROM 也按此方式构建且没有摘要。注册表所有者之后重建或移动该标签时,相同源码会取得不同基础层,既影响可复现性,也让未经本仓库审查的变化进入镜像。自动获得安全补丁是其明确目的,但不消除供应链风险。用户可要求生产镜像固定摘要,并由受控更新流程定期刷新。

azure-kubernetes-app-deploy/references/base-images.md:7来自说明文档打开原文件
## Rules1. **Never pin minor/patch.** Use a floating **major** (or major.minor) tag.   Floating tags receive security patches automatically — a frozen patch tag   does not.2. **Resolve `<LATEST_STABLE_*>` at generation time.** When generating a   Dockerfile, replace each placeholder with the current stable major the   project targets (see "Resolution" below), then keep that major tag in the   output. A major tag is concrete, so it satisfies Deployment Safeguard DS009   (no `:latest`).3. **Prefer the Microsoft/Azure Linux image when one exists and the project
查看另外 3 个位置
azure-kubernetes-app-deploy/templates/dockerfiles/node.Dockerfile:21来自说明文档打开原文件
# ---------------------------------------------------------------------------# Base: current Node LTS, Alpine variant. See references/base-images.md.FROM node:<LATEST_STABLE_NODE>-alpine AS build
azure-kubernetes-app-deploy/templates/dockerfiles/node.Dockerfile:46来自说明文档打开原文件
# ---------------------------------------------------------------------------FROM node:<LATEST_STABLE_NODE>-alpine# Security: install dumb-init so Node runs as PID > 1 and signals propagate# correctly — avoids zombie processes inside the container.RUN apk add --no-cache dumb-init
azure-kubernetes-app-deploy/references/base-images.md:9来自说明文档打开原文件
1. **Never pin minor/patch.** Use a floating **major** (or major.minor) tag.   Floating tags receive security patches automatically — a frozen patch tag   does not.2. **Resolve `<LATEST_STABLE_*>` at generation time.** When generating a   Dockerfile, replace each placeholder with the current stable major the   project targets (see "Resolution" below), then keep that major tag in the   output. A major tag is concrete, so it satisfies Deployment Safeguard DS009   (no `:latest`).3. **Prefer the Microsoft/Azure Linux image when one exists and the project
中风险

未检测到健康端点时仍默认部署 `/health` 探针

原文依据:4 处
发现了什么

检测流程规定找不到端点就使用 `/health`,生成的 Deployment 会把该路径配置为 liveness/readiness HTTP 探针,并随后直接应用清单。它没有要求确认应用实际提供该路由。

为什么需要注意

若应用没有 `/health` 或该路由需要认证,探针会持续失败;readiness 会停止流量,liveness 还会反复重启本来可以工作的容器,导致部署不可用。

检测规则明确在找不到健康端点时使用 /health;生成模板把所选路径用于存活和就绪探针,部署阶段再直接应用全部清单。若应用没有该路由,探针会持续失败,导致 Pod 不就绪或被反复重启,形成可用性风险。用户可要求在部署前验证端点返回成功,或先确认/实现正确路由并使用 server-side dry-run 和暂存命名空间测试。

azure-kubernetes-app-deploy/phases/quick-deploy.md:13来自说明文档打开原文件
### Port and Health Endpoint DetectionFollow the port and health endpoint detection tables in `references/detection.md` (first match wins). If none found, use `/health` as default in probes.
查看另外 3 个位置
azure-kubernetes-app-deploy/templates/k8s/deployment.yaml:64来自说明文档打开原文件
          # DS002: Liveness probe          livenessProbe:            httpGet:              path: <health-path>              port: <port>            initialDelaySeconds: 10            periodSeconds: 15            timeoutSeconds: 3            failureThreshold: 3          # DS003: Readiness probe          readinessProbe:            httpGet:              path: <ready-path>              port: <port>            initialDelaySeconds: 5            periodSeconds: 10            timeoutSeconds: 3            failureThreshold: 3
azure-kubernetes-app-deploy/phases/quick-deploy.md:183来自说明文档打开原文件
# 2. Apply remaining manifestskubectl apply -f k8s/ --recursive# 3. Wait for rolloutkubectl rollout status deployment/<app-name> -n <namespace> --timeout=300s```
azure-kubernetes-app-deploy/phases/quick-deploy.md:176来自说明文档打开原文件
### Deploy to cluster```bash# 1. Create namespace (must succeed before proceeding)kubectl apply -f k8s/namespace.yamlkubectl get namespace <namespace> -o name   # verify# 2. Apply remaining manifestskubectl apply -f k8s/ --recursive# 3. Wait for rolloutkubectl rollout status deployment/<app-name> -n <namespace> --timeout=300s```
中风险

CI 的“失败自动回滚”条件在发布失败时通常不会成立

原文依据:2 处
发现了什么

工作流先执行 `kubectl apply`,然后等待 rollout;只有 rollout 成功后才写入 `deployed=true`。回滚步骤却要求作业失败且该输出为 true。因此最需要回滚的 rollout 超时或失败会在设置标志之前退出,回滚步骤被跳过。

为什么需要注意

失败的新版本会继续留在集群中,可能伴随不可用 Pod、部分资源更新或服务中断,而模板仍给用户造成已配置自动回滚的预期。

deploy 步骤在 kubectl apply 后先等待 rollout,只有等待成功才写入 deployed=true。若 apply 已改变集群但 rollout 超时或失败,shell 会在写输出前退出;回滚条件又要求该输出为 true,因此回滚通常被跳过。这会留下失败或部分发布状态。用户可要求在 apply 成功后立即记录标志,或根据已应用对象/修订状态独立判断是否回滚,并测试失败路径。

azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:171来自说明文档打开原文件
      - name: Deploy to AKS        id: deploy        run: |          # Ensure the namespace exists before applying manifests          kubectl create namespace ${{ env.NAMESPACE }} --dry-run=client -o yaml \            | kubectl apply -f -          kubectl apply -f k8s/ --namespace ${{ env.NAMESPACE }}          kubectl rollout status deployment/${{ env.APP_NAME }} \            --namespace ${{ env.NAMESPACE }} \            --timeout=300s          # Signal that the deployment was applied — used to gate rollback          echo "deployed=true" >> "$GITHUB_OUTPUT"
查看另外 1 个位置
azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:186来自说明文档打开原文件
      - name: Rollback on failure        if: failure() && steps.deploy.outputs.deployed == 'true'        run: |          kubectl rollout undo deployment/${{ env.APP_NAME }} \            --namespace ${{ env.NAMESPACE }}          kubectl rollout status deployment/${{ env.APP_NAME }} \            --namespace ${{ env.NAMESPACE }} \            --timeout=120s          echo "⚠️ Rolled back to previous revision"
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。未发现风险
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 2 项风险
高风险

失败回滚可能删除整个清单集中的既有资源和命名空间

原文依据:3 处
发现了什么

部署流程会在 `k8s/` 中生成 namespace 清单,而失败恢复命令是对整个目录执行 `kubectl delete -f k8s/`。该命令按文件中声明的名称删除资源,并不区分本次运行新建的对象与部署前已经存在的对象。

为什么需要注意

如果目录包含已有或共享命名空间及资源,回滚会删除它们;删除 Namespace 还会级联删除其中其他不属于本次部署的工作负载、配置和 Secret,造成严重中断或数据丢失。

工作流会生成命名空间清单,也会对已有清单原地修改;失败指南随后建议对整个 k8s/ 集合执行 delete。kubectl 按对象名称删除,无法识别对象是否早于本次部署存在;若集合包含 Namespace,删除还会级联移除其中其他工作负载。用户应要求按本次创建的对象清单或标签回滚,并在删除前预览精确对象,尤其不要自动删除既有命名空间。

azure-kubernetes-app-deploy/phases/quick-deploy.md:104来自说明文档打开原文件
| Manifest | Template | Notes ||----------|----------|-------|| `k8s/namespace.yaml` | `templates/k8s/namespace.yaml` | || `k8s/serviceaccount.yaml` | `templates/k8s/serviceaccount.yaml` | Workload Identity || `k8s/deployment.yaml` | `templates/k8s/deployment.yaml` | image tag set after `az acr build`, not at generation time || `k8s/service.yaml` | `templates/k8s/service.yaml` | |
查看另外 2 个位置
azure-kubernetes-app-deploy/references/rollback.md:22来自说明文档打开原文件
## kubectl apply Failed (Section 4 — Deploy to Cluster)```bash# Remove the partially applied resources:kubectl delete -f k8s/
azure-kubernetes-app-deploy/phases/quick-deploy.md:100来自说明文档打开原文件
**If existing manifests found** (in `k8s/`, `manifests/`, or `deploy/`): Validate against AKS Deployment Safeguards (Section 3) and apply targeted fixes. Do not regenerate — improve in place.**If no manifests found:** Generate from `templates/k8s/` templates. Replace `<angle-bracket>` placeholders with detected values.
中风险

部署流程会无条件覆盖现有 kubeconfig 集群条目

原文依据:1 处
发现了什么

部署命令使用 `az aks get-credentials ... --overwrite-existing`。这会替换本机 kubeconfig 中同名集群/用户信息,并可能改变当前上下文,而不是为本次部署使用隔离配置。

为什么需要注意

用户原有的认证设置或上下文选择可能丢失;后续手工或自动化 `kubectl` 命令可能连接到非预期集群,造成读取或修改错误环境的风险。

部署流程明确执行带 --overwrite-existing 的 get-credentials,没有为本次任务使用独立 kubeconfig,也未在该步骤要求确认。对同名条目,该选项会替换本机已有凭据/连接信息;命令通常还会切换当前上下文,从而影响用户之后的 kubectl 决策,尤其在多集群环境中。用户可要求使用临时 KUBECONFIG、保存并恢复当前上下文,或在覆盖前显示目标并取得确认。

azure-kubernetes-app-deploy/phases/quick-deploy.md:151来自说明文档打开原文件
## Section 4: Deploy### Ensure kubectl context```bashaz aks get-credentials -g <resource_group> -n <aks_cluster_name> --overwrite-existing```
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
高风险

只读评估要求可取得集群用户凭据的权限

原文依据:4 处
发现了什么

就绪评估自称只读,但列出的必需权限包括 `listClusterUserCredential/action`,故障参考还建议在缺少权限时授予“AKS Cluster User Role”。该权限不仅是读取配置,还允许调用者取得集群用户凭据。

为什么需要注意

获授角色的主体可能获得 Kubernetes API 访问能力;实际可执行的操作取决于集群的 Kubernetes/Azure RBAC 配置。评估身份一旦被滥用,影响会超出只读兼容性检查。

该评估虽明确要求只读,却把取得集群用户凭据的操作权限列为必需权限;故障参考还给出创建角色分配的命令。若用户或管理员照做,主体将能请求 AKS 用户凭据,而不仅是读取集群配置。该权限可能是实时工作负载评估所需,但仍扩大了凭据与集群访问面。用户可要求作者说明为何离线或 MCP 评估必须取得凭据,并将授权限定到目标集群和临时主体。

azure-kubernetes-automatic-readiness/SKILL.md:97来自说明文档打开原文件
**Required permissions:**- `Microsoft.ContainerService/managedClusters/read`- `Microsoft.ContainerService/managedClusters/listClusterUserCredential/action`
查看另外 3 个位置
azure-kubernetes-automatic-readiness/references/mcp-integration.md:55来自说明文档打开原文件
# Minimum permissions required:# - Microsoft.ContainerService/managedClusters/read# - Microsoft.ContainerService/managedClusters/listClusterUserCredential/action# Assign if missing (requires Owner or User Access Administrator)az role assignment create \  --assignee <principal-id> \  --role "Azure Kubernetes Service Cluster User Role" \  --scope /subscriptions/<subscription-id>/resourceGroups/<rg>/providers/Microsoft.ContainerService/managedClusters/<cluster>```
azure-kubernetes-automatic-readiness/SKILL.md:49来自说明文档打开原文件
1. **Read-only**: NEVER modify cluster state. Assessment is read-only. Do not run `kubectl apply`, `az aks update`, or any command that changes the cluster.2. **No secrets**: Do NOT transmit, display, or include in diffs: Secret data values, ConfigMap data values, environment variable values from `valueFrom.secretKeyRef`, service account tokens, or connection strings.
azure-kubernetes-automatic-readiness/references/mcp-integration.md:59来自说明文档打开原文件
# Assign if missing (requires Owner or User Access Administrator)az role assignment create \  --assignee <principal-id> \  --role "Azure Kubernetes Service Cluster User Role" \  --scope /subscriptions/<subscription-id>/resourceGroups/<rg>/providers/Microsoft.ContainerService/managedClusters/<cluster>```
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

8 个说明模块

主技能用于规划和配置 AKS:先通过 Azure MCP 发现可用的 AKS 操作,缺少功能时再使用 Azure CLI。它覆盖网络、安全、可观测性、升级、节点池和成本配置。

查看原文
SKILL.md:42来自说明文档打开原文件
## Rules1. Start with the user's requirements for provisioning compute, networking, security, and other settings.2. Use the `azure` MCP server and select `mcp_azure_mcp_aks` first to discover the exact AKS-specific MCP tools surfaced by the client. Choose the smallest discovered AKS tool that fits the task, and fall back to Azure CLI (`az aks`) only when the needed functionality is not exposed through the AKS MCP surface.3. Determine if AKS Automatic or Standard SKU is more appropriate based on the user's need for control vs convenience. Default to AKS Automatic unless specific customizations are required.4. Document decisions and rationale for cluster configuration choices, especially for Day-0 decisions that are hard to change later (networking, API server access).

应用部署子技能会检查项目和 Azure 环境,生成或修改 Dockerfile 与 Kubernetes 清单,然后构建并推送镜像、把清单应用到现有集群并等待发布完成。这不只是生成建议,而是可对本地文件、镜像仓库和运行中集群产生更改。

查看原文
azure-kubernetes-app-deploy/phases/quick-deploy.md:70来自说明文档打开原文件
## Section 2: File GenerationWrite all files in a single response turn.### Dockerfile**If existing Dockerfile:** Validate against best practices (multi-stage build, non-root USER, base tags pinned to a stable major tag (not :latest, not a frozen patch), layer caching, .dockerignore). Apply targeted fixes for failures — do not regenerate the file.
azure-kubernetes-app-deploy/phases/quick-deploy.md:167来自说明文档打开原文件
### Build and push```bashIMAGE_TAG=$(git rev-parse --short HEAD)   # fallback: date +%Y%m%d%H%M%Saz acr build --registry <acr_name> --image <app-name>:$IMAGE_TAG --file Dockerfile .```
azure-kubernetes-app-deploy/phases/quick-deploy.md:176来自说明文档打开原文件
### Deploy to cluster```bash# 1. Create namespace (must succeed before proceeding)kubectl apply -f k8s/namespace.yamlkubectl get namespace <namespace> -o name   # verify# 2. Apply remaining manifestskubectl apply -f k8s/ --recursive# 3. Wait for rolloutkubectl rollout status deployment/<app-name> -n <namespace> --timeout=300s```

Automatic 就绪评估子技能明确要求只读,并要求每次文件修改先展示差异并取得明确同意;它支持连接集群的 MCP 评估以及本地清单离线评估。

查看原文
azure-kubernetes-automatic-readiness/SKILL.md:47来自说明文档打开原文件
## Guardrails — READ FIRST1. **Read-only**: NEVER modify cluster state. Assessment is read-only. Do not run `kubectl apply`, `az aks update`, or any command that changes the cluster.2. **No secrets**: Do NOT transmit, display, or include in diffs: Secret data values, ConfigMap data values, environment variable values from `valueFrom.secretKeyRef`, service account tokens, or connection strings.3. **User approval for file changes**: Present every fix as a diff. The user must explicitly accept before you write to any file.4. **Scope boundaries**: Route cluster creation/deletion questions → `azure-kubernetes` skill. Route live troubleshooting → `azure-diagnostics` skill.
azure-kubernetes-automatic-readiness/SKILL.md:65来自说明文档打开原文件
**Option A — Cluster-connected assessment (via AKS MCP)**Use when the user has a connected cluster context (subscription + resource group + cluster name).**Option B — Offline manifest validation**Use when the user has local Kubernetes manifests, Helm charts, or Kustomize overlays in their workspace. Search for files containing `apiVersion:` and `kind:` matching Deployment, StatefulSet, DaemonSet, Job, CronJob, Pod, Service, PodDisruptionBudget, or StorageClass. For Helm charts, look for `Chart.yaml` and rendered templates under `templates/`.**Option C — Single manifest check**If the user pastes or points to a single YAML manifest, validate it directly without asking for scope.

随附的 GitHub Actions 模板在 main 分支推送时通过 OIDC 登录 Azure,远程构建镜像,并把 k8s 目录中的资源应用到 AKS。

查看原文
azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:18来自说明文档打开原文件
on:  # Trigger on push to main branch (app code changes only)  push:    branches:      - main    paths-ignore:      - 'docs/**'      - '*.md'      - '.github/**'      - '.vscode/**'  # Allow manual trigger from the Actions tab  workflow_dispatch:
azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:124来自说明文档打开原文件
      # -----------------------------------------------------------      - name: Azure Login (OIDC)        uses: azure/login@v2        with:          client-id: ${{ secrets.AZURE_CLIENT_ID }}          tenant-id: ${{ secrets.AZURE_TENANT_ID }}          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
azure-kubernetes-app-deploy/templates/github-actions/deploy.yml:171来自说明文档打开原文件
      - name: Deploy to AKS        id: deploy        run: |          # Ensure the namespace exists before applying manifests          kubectl create namespace ${{ env.NAMESPACE }} --dry-run=client -o yaml \            | kubectl apply -f -          kubectl apply -f k8s/ --namespace ${{ env.NAMESPACE }}          kubectl rollout status deployment/${{ env.APP_NAME }} \            --namespace ${{ env.NAMESPACE }} \            --timeout=300s
从这里开始 · 工作说明SKILL.md
azure-kubernetes
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。

文件引用关系图

40 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录53 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • references/azure-aks-autoscaler.md已纳入全文
  • references/azure-aks-rightsizing.md已纳入全文
  • references/azure-aks-spot.md已纳入全文
  • references/azure-aks-vpa.md已纳入全文
  • references/cli-reference.md已纳入全文
  • azure-kubernetes-app-deploy/references/base-images.md已纳入全文
  • azure-kubernetes-app-deploy/references/detection.md已纳入全文
  • azure-kubernetes-app-deploy/references/rollback.md已纳入全文
  • azure-kubernetes-app-deploy/references/safeguards.md已纳入全文
  • azure-kubernetes-app-deploy/references/workload-identity.md已纳入全文
  • azure-kubernetes-automatic-readiness/references/common-fixes.md已纳入全文
  • azure-kubernetes-automatic-readiness/references/constraint-spec-v1.yaml已纳入全文
  • azure-kubernetes-automatic-readiness/references/mcp-integration.md已纳入全文
  • azure-kubernetes-automatic-readiness/references/migration-guide-summary.md已纳入全文
  • azure-kubernetes-app-deploy/SKILL.md已纳入全文
  • azure-kubernetes-automatic-readiness/SKILL.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/aspnet-core.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/django.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/express.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/fastapi.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/flask.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/go.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/nestjs.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/nextjs.md已纳入全文
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/spring-boot.md已纳入全文
  • azure-kubernetes-app-deploy/phases/quick-deploy.md已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/dotnet.Dockerfile已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/dotnet.dockerignore已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/go.Dockerfile已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/go.dockerignore已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/java.Dockerfile已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/java.dockerignore已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/node.Dockerfile已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/node.dockerignore已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/python.Dockerfile已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/python.dockerignore已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/rust.Dockerfile已纳入全文
  • azure-kubernetes-app-deploy/templates/dockerfiles/rust.dockerignore已纳入全文
  • azure-kubernetes-app-deploy/templates/github-actions/deploy.yml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/configmap.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/deployment.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/gateway.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/hpa.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/httproute.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/ingress.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/namespace.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/networkpolicy.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/pdb.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/service.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/k8s/serviceaccount.yaml已纳入全文
  • azure-kubernetes-app-deploy/templates/mermaid/architecture-diagram.md已纳入全文
  • azure-kubernetes-app-deploy/templates/mermaid/summary-dashboard.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • azure-kubernetes-app-deploy/SKILL.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/aspnet-core.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/django.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/express.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/fastapi.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/flask.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/go.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/nestjs.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/nextjs.md配套文件
  • azure-kubernetes-app-deploy/knowledge-packs/frameworks/spring-boot.md配套文件
  • azure-kubernetes-app-deploy/phases/quick-deploy.md配套文件
  • azure-kubernetes-app-deploy/references/base-images.md配套文件
  • azure-kubernetes-app-deploy/references/detection.md配套文件
  • azure-kubernetes-app-deploy/references/rollback.md配套文件
  • azure-kubernetes-app-deploy/references/safeguards.md配套文件
  • azure-kubernetes-app-deploy/references/workload-identity.md配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/dotnet.Dockerfile配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/dotnet.dockerignore配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/go.Dockerfile配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/go.dockerignore配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/java.Dockerfile配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/java.dockerignore配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/node.Dockerfile配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/node.dockerignore配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/python.Dockerfile配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/python.dockerignore配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/rust.Dockerfile配套文件
  • azure-kubernetes-app-deploy/templates/dockerfiles/rust.dockerignore配套文件
  • azure-kubernetes-app-deploy/templates/github-actions/deploy.yml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/configmap.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/deployment.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/gateway.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/hpa.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/httproute.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/ingress.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/namespace.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/networkpolicy.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/pdb.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/service.yaml配套文件
  • azure-kubernetes-app-deploy/templates/k8s/serviceaccount.yaml配套文件
  • azure-kubernetes-app-deploy/templates/mermaid/architecture-diagram.md配套文件
  • azure-kubernetes-app-deploy/templates/mermaid/summary-dashboard.md配套文件
  • azure-kubernetes-automatic-readiness/SKILL.md配套文件
  • azure-kubernetes-automatic-readiness/references/common-fixes.md配套文件
  • azure-kubernetes-automatic-readiness/references/constraint-spec-v1.yaml配套文件
  • azure-kubernetes-automatic-readiness/references/mcp-integration.md配套文件
  • azure-kubernetes-automatic-readiness/references/migration-guide-summary.md配套文件
  • references/azure-aks-autoscaler.md配套文件
  • references/azure-aks-rightsizing.md配套文件
  • references/azure-aks-spot.md配套文件
  • references/azure-aks-vpa.md配套文件
  • references/cli-reference.md配套文件

代码和说明中提到的操作

连接外部网站
SKILL.md:69来自说明文档打开原文件
- **Azure CNI (VNet-routable)**: pod IPs directly from VNet (pod subnet or node subnet), use when pods must be directly addressable from VNet or on-prem  - Docs: https://learn.microsoft.com/azure/aks/azure-cni-overlay
azure-kubernetes-app-deploy/knowledge-packs/frameworks/aspnet-core.md:181来自说明文档打开原文件
- **Default port:** 8080 (since .NET 8; previously 80 in .NET 7 and earlier)- **Env var override:** `ASPNETCORE_URLS=http://+:8080` or `ASPNETCORE_HTTP_PORTS=8080`- **Code override:** `builder.WebHost.UseUrls("http://+:8080")` in `Program.cs`
azure-kubernetes-app-deploy/knowledge-packs/frameworks/aspnet-core.md:182来自说明文档打开原文件
- **Env var override:** `ASPNETCORE_URLS=http://+:8080` or `ASPNETCORE_HTTP_PORTS=8080`- **Code override:** `builder.WebHost.UseUrls("http://+:8080")` in `Program.cs`
读取密钥或账号配置
SKILL.md:87来自说明文档打开原文件
### 3. Security- Use **Microsoft Entra ID** everywhere (control plane, Workload Identity for pods, node access). Avoid static credentials.- Azure Key Vault via **Secrets Store CSI Driver** for secrets
SKILL.md:155来自说明文档打开原文件
|-----------------|--------------|-------------|| MCP tool call fails or times out | Invalid credentials, subscription, or AKS context | Verify `az login`, confirm the active subscription context with `az account show`, and check the target resource group without echoing subscription identifiers back to the user || Quota exceeded | Regional vCPU or resource limits | Request quota increase or select different region/VM SKU |
azure-kubernetes-app-deploy/knowledge-packs/frameworks/django.md:158来自说明文档打开原文件
- **CLI flag:** `--bind 0.0.0.0:8000` passed to `gunicorn`- **Env var override:** `PORT` (read via `gunicorn --bind 0.0.0.0:$PORT` or `int(os.environ.get("PORT", 8000))`)- **Workers formula:** `2 * CPU_CORES + 1` (e.g. `--workers 3` for a 1-vCPU container)
运行命令
azure-kubernetes-app-deploy/knowledge-packs/frameworks/aspnet-core.md:54来自说明文档打开原文件
```bashdotnet add package AspNetCore.HealthChecks.NpgSql
azure-kubernetes-app-deploy/knowledge-packs/frameworks/django.md:22来自说明文档打开原文件
```bashpip install django-health-check
azure-kubernetes-app-deploy/knowledge-packs/frameworks/nestjs.md:36来自说明文档打开原文件
```bashnpm install @nestjs/terminus
读取文件
azure-kubernetes-app-deploy/knowledge-packs/frameworks/aspnet-core.md:127来自说明文档打开原文件
When `readOnlyRootFilesystem: true` is set, ASP.NET Core needs `/tmp` writable:
azure-kubernetes-app-deploy/knowledge-packs/frameworks/aspnet-core.md:184来自说明文档打开原文件
The port change from 80 to 8080 in .NET 8 aligns with non-root container best practices — port 80 requires elevated privileges. Set `DOTNET_EnableDiagnostics=0` to disable diagnostic pipes that require writable paths not available in read-only filesystems.
azure-kubernetes-app-deploy/knowledge-packs/frameworks/django.md:117来自说明文档打开原文件
When `readOnlyRootFilesystem: true` is set, Django apps need `/tmp` writable and optionally `/app/staticfiles`:
安装其他软件包
azure-kubernetes-app-deploy/knowledge-packs/frameworks/django.md:23来自说明文档打开原文件
```bashpip install django-health-check```
azure-kubernetes-app-deploy/knowledge-packs/frameworks/express.md:35来自说明文档打开原文件
| npm | `npm ci` | `npm ci --omit=dev` | `package-lock.json` || yarn | `yarn install --frozen-lockfile` | `yarn install --frozen-lockfile --production` | `yarn.lock` || pnpm | `pnpm install --frozen-lockfile` | `pnpm install --frozen-lockfile --prod` | `pnpm-lock.yaml` |
azure-kubernetes-app-deploy/knowledge-packs/frameworks/express.md:36来自说明文档打开原文件
| yarn | `yarn install --frozen-lockfile` | `yarn install --frozen-lockfile --production` | `yarn.lock` || pnpm | `pnpm install --frozen-lockfile` | `pnpm install --frozen-lockfile --prod` | `pnpm-lock.yaml` |
修改文件
azure-kubernetes-app-deploy/knowledge-packs/frameworks/go.md:32来自说明文档打开原文件
    w.WriteHeader(http.StatusOK)    w.Write([]byte(`{"status":"ok"}`))})
azure-kubernetes-app-deploy/knowledge-packs/frameworks/go.md:37来自说明文档打开原文件
        w.WriteHeader(http.StatusServiceUnavailable)        w.Write([]byte(`{"status":"not ready"}`))        return
azure-kubernetes-app-deploy/knowledge-packs/frameworks/go.md:41来自说明文档打开原文件
    w.WriteHeader(http.StatusOK)    w.Write([]byte(`{"status":"ready"}`))})
读取了多少行
5,793
文件校验值(用于核对版本)
e5c8695ecefb3f8f53374d0a5c2dcf0cd091abaeb3055e68144c953e266551c4