从 ConfigManagement API 迁移到 PolicyController API

本页介绍了如何从 ConfigManagement API 迁移到 PolicyController API 以管理 Policy Controller。PolicyController API 提供了用于安装和管理 Policy Controller 的相同功能。

从 2025 年 4 月开始,configManagement API 1.21 版及更高版本不再支持 Policy Controller 安装或更新。尝试使用此方法升级或安装 Policy Controller 将失败并显示错误。请按照本页面上的说明进行迁移,以便继续使用 Policy Controller。

完全迁移的步骤因您用于安装 Policy Controller 的安装方法而异。

如果您使用以 gcloud container fleet policycontroller 开头的 gcloud CLI PolicyController 命令,则表示您已在使用 PolicyController API。对此,您无需执行任何操作。否则,请查看您用于安装 Policy Controller 的方法的说明:

config management

如果您使用的是以 gcloud alpha container fleet config-management 开头的 gcloud CLI 命令,请改用以 gcloud container fleet policycontroller 开头的 gcloud CLI Policy Controller 命令。如需查看命令列表,请参阅 gcloud CLI 文档。除此之外,您无需采取其他措施。

如果您的 Google Cloud CLI apply spec 文件包含 policyController 区块,请将其移除,以确保与 Config Sync 兼容。

Terraform

如果您使用的 Terraform 资源通过特征名称 "configmanagement" 配置 Policy Controller,则应切换到特征名称为 "policycontroller" 的 Terraform 资源,方法是完成以下步骤:

  1. 将现有 Terraform 文件复制到新文件中,或更新 Terraform 文件,然后添加以下内容:

    resource "google_gke_hub_feature" "feature" {
      name = "policycontroller"
      location = "global"
    }
    
    resource "google_gke_hub_feature_membership" "feature_member" {
      feature = google_gke_hub_feature.feature.name # "policycontroller"
      location = "global"
      membership = MEMBERSHIP_NAME
      project = PROJECT_ID
       policycontroller {
          policy_controller_hub_config {
            install_spec = "INSTALL_SPEC_ENABLED"
        }
      }
    }
    

    替换以下内容:

    • MEMBERSHIP:已安装 Policy Controller 的已注册集群的成员资格名称。
    • PROJECT_ID:您的项目 ID。
  2. 从现有 Terraform 资源中移除 "policy_controller" 区块。您可以在 "configmanagement" 区块下找到该区块。如果您使用该资源仅管理 Policy Controller,则可以移除整个 configmanagement 区块。如果您使用该资源来管理 Config Sync,请确保仅移除 Policy Controller 区块。例如,configmanagement 区块可能类似于以下内容:

    resource "google_gke_hub_feature_membership" "feature_member" {
       provider   = google-beta
       location   = "global"
       feature    = "configmanagement"
       membership = google_gke_hub_membership.membership.membership_id
       configmanagement {
          version = "1.8.0"
          config_sync {
             source_format = "unstructured"
             git {
             }
          }
          # if you're still using the config_sync block, delete only the policy_controller block
          policy_controller {
             enabled                    = true
             template_library_installed = true
             referential_rules_enabled  = true
          }
       }
    }
    
  3. 完成以下其中一个步骤,导入 Policy Controller 成员资格功能设置

    1. 运行以下命令:

      terraform import "google_gke_hub_feature.feature" "projects/PROJECT_ID/locations/global/features/policycontroller"
      terraform import "google_gke_hub_feature_membership.feature_member" "projects/PROJECT_ID/locations/global/features/policycontroller/membershipId/MEMBERSHIP_NAME"
      
    2. 向 Terraform 资源添加导入块

      import {
         to = google_gke_hub_feature_membership.feature_member
         id = "projects/PROJECT_ID/locations/global/features/policycontroller/membershipId/MEMBERSHIP_NAME"
      }
      import {
         to = google_gke_hub_feature.feature
         id = "projects/PROJECT_ID/locations/global/features/policycontroller"
      }
      
  4. 应用 Policy Controller 设置:

    terraform apply
    
  5. 可选:导入完成后,您可以从 Terraform 资源中移除导入块。或者,也可以放心地将导入块留在配置中,作为资源来源的记录。

Config Connector

如需停止使用 configmanagement.policyController 规范,请完成以下步骤:

  1. 使用必需的 policycontroller 字段创建新的 GKEHubFeatureMembership 规范。确保将 resourceID 字段设置为 policyController

  2. 如果您已有使用 spec.configmanagement.policyController 字段的 GKEHubFeatureMembership,请从 configmanagement 规范中移除所有 policycontroller 字段。

kubectl

如果您使用 kubectl 命令通过 ConfigManagement 对象管理 Policy Controller,请改用以 gcloud container fleet policycontroller 开头的 gcloud CLI Policy Controller 命令。除此之外,您无需采取其他措施。

如果您的 ConfigManagement 对象包含 policyController 区块,请将其移除,以便与 Config Sync 兼容。

您可能需要查看以下资源,来详细了解 Policy Controller API: