跳转至

坑合集

学习过程中实际碰到的问题,按类别整理。详细经过见各 Phase 的页面。

Windows / PowerShell

现象 原因 对策 出处
-backend-config=backend.hcl 被拆成两个参数 PowerShell 5.1 在 . 处拆分参数 整个参数加引号:"-backend-config=backend.hcl"(-out=、-generate-config-out= 也一样) Phase 3
zip 在 Linux(Cloud Shell / Resource Manager)上解不开 Compress-Archive 的路径分隔符是 \ tar.exe -a -c -f x.zip -C <dir> . 或者用 tar.gz Phase 5b
pip install oci-cli → FileNotFoundError Windows 路径上限 259 字符 先查 wheel 里最长的路径;改用 Python SDK,或装到短路径(官方安装脚本也一样装不上) Phase 5b、Phase 7
git push 卡住:auto-detection of host provider took too long Git Credential Manager 判断服务类型时超时 git config credential.<URL>.provider generic Phase 7
checkov → UnicodeDecodeError: 'cp932' 用系统编码读文件,中文注释读不了 $env:PYTHONUTF8 = '1' Phase 5a
刚装的 terraform / tflint 找不到 PATH 是终端启动时读的 重开终端 Phase 0

OCI 设定

现象 原因 对策 出处
did not find a proper configuration for private key key_file=... # TODO,config 不支持行尾注释 删掉 # TODO Phase 0
Resource Search 里删掉的资源还是 ACTIVE 搜索索引有延迟 用 get_xxx API 直接查 Phase 4
dnf install 成功,但不能证明 NAT GW 通了 OCI 的 dnf 仓库属于 Oracle Services,走 Service GW 用 curl ifconfig.me 确认出口 IP Phase 4
NSG 规则的 import ID 在 Console 上看不到 规则 ID 不显示 用 data source oci_core_network_security_group_security_rules 查 Phase 3
SDK 的 drift 结果 json.loads 报 TypeError 已经是 dict 了 直接当 dict 用 Phase 5b

Cloud Shell

现象 原因 对策 出处
ED25519 keys are not allowed in FIPS mode Cloud Shell 是 FIPS 模式 用 RSA(-t rsa -b 4096) Phase 4
ansible.posix.firewalld → couldn't resolve module Cloud Shell 的 Ansible 是 2.9 用短名 firewalld Phase 2
subnet 删不掉(Terraform 一直重试) Cloud Shell private network 的 VNIC 还挂在 subnet 里 destroy 前把 Network 切回 Public Phase 6
Upload 只能传一个文件 规格如此 打成 tar.gz 再传 Phase 2
build 的镜像在 Function 上跑不了 Cloud Shell 默认是 ARM(aarch64) Actions → Architecture → x86_64 Phase 8
docker push 后没有 digest: Cloud Shell 的 docker 是 Podman 看最后的 Writing manifest to image destination Phase 8

网络 / 本机环境

现象 原因 对策 出处
从本机 SSH → Connection timed out 所在网络屏蔽了出站 22 端口 Cloud Shell + private network,或 OCI Bastion(在 Cloud Shell 里用) Phase 2
想放行 Cloud Shell 的 IP 出口 IP 是 Oracle 共用的,而且会变 不放行公网 IP,改用 private network Phase 2
浏览器打不开 GitHub(命令行能连) 所在网络屏蔽 不绕过 → CI/CD 改用 OCI DevOps Phase 7
OCI DevOps 的仓库 SSH 连不上 22 端口被屏蔽 HTTPS + Auth Token Phase 7
Bastion session 连不上(Security List 只放行了 Oracle 服务 443) Bastion 的 private endpoint 在同一个 subnet,它 → VM 的 22 是"出站" 加"subnet 内 22 出站" Phase 9
curl ifconfig.me 在 Flow Logs 里没有记录 没有路由的通信不出现(推测:路由阶段就被丢掉) 出不了公网的确认用 curl 的结果,不靠 Flow Logs Phase 9

OCI DevOps

现象 原因 对策 出处
Unable to fetch build_spec file ... RelatedResourceNotAuthorizedOrNotFound repos 是 OCIR 的资源类型 read devops-repository Phase 7
runner 里 pip → ProxyError ... Name or service not known runner 镜像的 pip 配置里有 Oracle 内部代理 PIP_CONFIG_FILE=/dev/null Phase 7
第一次 push 被拒(non-fast-forward) 建仓库时自动生成了空的 "Initial Commit" git push --force(只覆盖空 commit) Phase 7
default_branch 每次 plan 都有差异 API 存成 refs/heads/main 代码里写 refs/heads/main Phase 7

Monitoring / Functions

现象 原因 对策 出处
告警邮件是 JSON message_format = "PRETTY_JSON" ONS_OPTIMIZED(只改邮件,Function 收到的仍是 JSON) Phase 8
恢复网站后又被停掉 告警恢复(FIRING_TO_OK)的消息也会调用 Function Function 里跳过 FIRING_TO_OK / RESET Phase 8
其他 Budget 的告警也把网站停掉 Events 规则会收到所有 Budget、所有规则的事件 Function 不看事件内容,自己查 Budget 的实际费用 Phase 8
新建 Budget → 400-LimitExceeded 每个 compartment 只能有 1 个 Budget data source 读现有的 Budget,只加告警规则(不 import) Phase 8
docker push 到 OCIR 403 切换 Cloud Shell 架构后登录凭证没了 重新 docker login Phase 8
docker login 到 OCIR 失败 用户名格式和 git 不一样 <namespace>/<用户名> Phase 8

Vault / Logging

现象 原因 对策 出处
新建 bucket(CMK)→ 404-NotAuthorizedOrFoundKmsKey Policy 刚建好,IAM 还没生效(depends_on 只保证顺序) 过一会儿再 apply Phase 9
Connector → Invalid batchRolloverTimeInMs 范围 60000〜420000 ms 最长 7 分钟(420000) Phase 9
读 Secret → NotAuthorizedOrNotFound(404) 没权限和不存在都返回 404 确认 Policy(read secret-bundles)和 Dynamic Group Phase 9
Flow Logs 里有 Oracle 服务 → VM 临时端口的 REJECT 推测:连接结束后迟到的包 正常现象 Phase 9

Terraform 的行为

现象 原因 对策 出处
in-place(~)的 apply 后 LB 返回 502 改的属性会让 VM 重启,两台同时重启 一台一台改(-target 分开 apply 等) Phase 5a
改 user_data 后 VM 被重建 cloud-init 的内容是 # forces replacement 配置管理交给 Ansible Phase 2
新镜像发布后 VM 要被重建 data source 查到了新镜像 ignore_changes = [source_details[0].source_id] Phase 3
node pool "complete" 了,但节点还没 ready Terraform 只等 API 返回 用 SDK 确认节点状态 Phase 6
checkov 判定失败,但代码是对的 checkov 只认 launch_options 里的写法 按 checkov 的写法改,或看 checkov 的源码 Phase 5a
If LaunchOptions is provided, NetworkType must be specified 写了 launch_options 就必须指定 network_type = "PARAVIRTUALIZED"(和镜像的默认值一致) Phase 9
建 VM 时 in-transit 加密被忽略(API 是 false) 建时的请求不生效 第 2 次 apply(in-place update,会重启);用 API 确认 Phase 9
(sensitive value) 的密码在 state 里是明文 sensitive 只是不显示 密码让 Vault 生成(enable_auto_generation),Terraform 只建框 Phase 9

Kubernetes / OKE

现象 原因 对策 出处
Service LB 建好后 Terraform 出现 drift OKE 自动往 Security List 加规则 提前放行 NodePort,annotation security-rule-management-mode: "None" Phase 6
terraform destroy 删不掉 LB LB 是 K8s 建的,不在 state 里 先 kubectl delete,再 destroy Phase 6
drain 后 uncordon,Pod 还是集中在一台节点 K8s 不会主动重新分配 rollout restart;正式环境用 topologySpreadConstraints Phase 6