在 terraform 中禁用时默认启用 GKE 屏蔽节点

Posted

技术标签:

【中文标题】在 terraform 中禁用时默认启用 GKE 屏蔽节点【英文标题】:GKE shielded nodes enabled by default when disabled in terraform 【发布时间】:2021-07-17 18:06:41 【问题描述】:

在为 GKE 集群部署部署相同的 terraform google_container_cluster 配置时,我发现两个 GCP 项目之间存在差异。

terraform google_container_cluster 配置明确禁用屏蔽节点:

resource "google_container_cluster" "csurv-cluster" 
   ...
   enable_shielded_nodes       = false
   ...

此 terraform 配置用于跨多个项目配置集群,除一个项目外,这些集群配置为禁用屏蔽节点。

一个项目不遵守此配置,并在最初配置集群时提供屏蔽节点。

稍后在重新连接到集群进行维护时,会检测到请求配置和预置配置之间的差异,这会导致节点被修复以匹配 terraform 配置,从而导致不必要的中断。

关于为什么会发生这种情况以及我可以做些什么来解决的任何建议?

【问题讨论】:

这看起来不像 GKE 的问题。只要您不创建“GKE Autopilot clusters”(对于 GKE Autopilot 集群,屏蔽 GKE 节点功能默认启用且无法覆盖)或使用“shielded VM(其他社区成员建议)”约束,您应该能够通过禁用 Shielded GKE 节点功能来创建集群。 为了确认问题是否与 GKE 集群有关,我建议您直接使用 gcloud 或 UI 部署一个测试集群(使用与您的 terraform 文件完全相同的配置),看看是否是允许在没有屏蔽 GKE 节点功能的情况下创建该集群。如果它允许您创建一个这样的集群,则问题可能出在您的 terraform 代码中。 【参考方案1】:

您有没有机会启用受防护的虚拟机作为该项目的组织策略?策略列表是here。

您可以通过 IAM > Org Policies > 为顶部蓝色下拉菜单选择项目 > 从过滤器搜索栏中选择策略约束 > 单击策略并查看它是否在该项目上强制执行。

【讨论】:

以上是关于在 terraform 中禁用时默认启用 GKE 屏蔽节点的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Terraform 在 GKE 中设置非默认服务帐户?

使用 Terraform 部署时 GKE Autopilot 无法调度

如何使用 terraform gke 模块启用 gce_persistent_disk_csi_driver_config

如何禁用节点自动修复

使用 Terraform 管理 GKE 及其部署

Terraform gcp 与共享 vpc、gke