排查 Config Controller 问题

本页面介绍了如何解决 Config Controller 的问题。

默认网络不可用

创建配置控制器时,您可能会收到默认网络不可用的错误:

Error 400: Project \"PROJECT_ID\" has no network named \"default\"., badRequest\n\n  on main.tf line 35, in resource \"google_container_cluster\" \"acp_cluster\"

发生此错误是因为配置控制器依赖于 Google Cloud 中的默认网络。要解决此问题,您应该创建一个新的默认网络:

gcloud compute networks create default --subnet-mode=auto

或者,您也可以在 gcloud anthos config controller create 命令中使用 --network 标志来选择其他网络。

MasterIpv4CidrBlock 的值无效

Config Controller 创建将 172.16.0.128/28 的默认子网用于控制层面 IPv4 CIDR。如果 IPv4 CIDR 地址块发生冲突,则 Config Controller 创建将失败并显示以下错误:

Cloud SSA\n\nError: Error waiting for creating GKE cluster: Invalid value for field PrivateClusterConfig.MasterIpv4CidrBlock: 172.16.0.128/28 conflicts with an existing subnet in one of the peered VPCs.

如果出现此错误,请选择其他专用 IPv4 CIDR 并通过在 gcloud config controller create 命令中使用 --master-ipv4-cidr-block 标志来使用该 CIDR。

如需查找已在使用的 IPv4 CIDR 地址块,请完成以下步骤:

  1. 找到对等互连的名称:

    gcloud compute networks peerings list --network=NETWORK
    

    NETWORK 替换为您要查找的网络的名称。

    输出内容类似如下:

    NAME                                     NETWORK  PEER_PROJECT               PEER_NETWORK                            PEER_MTU  IMPORT_CUSTOM_ROUTES  EXPORT_CUSTOM_ROUTES  STATE   STATE_DETAILS
    gke-n210ce17a4dd120e16b6-7ebf-959a-peer  default  gke-prod-us-central1-59d2  gke-n210ce17a4dd120e16b6-7ebf-0c27-net            False                 False                 ACTIVE  [2021-06-08T13:22:07.596-07:00]: Connected.
    
  2. 显示对等互连使用的 IPv4 CIDR:

    gcloud compute networks peerings list-routes PEERING_NAME \
        --direction=INCOMING \
        --network=NETWORK \
        --region=us-central1
    

    替换以下内容:

    • PEERING_NAME 替换为您要查找的对等互连的名称
    • NETWORK 替换为您要查找的网络的名称

同步错误

Git 代码库中的配置通过 Config Sync 同步到配置控制器。 您可以使用 nomos status 命令检查此同步过程中是否存在错误:

nomos status  --contexts $(kubectl config current-context)

排查 Config Connector 资源问题

不可变字段和资源

底层 Google Cloud 资源上的某些字段不可变,例如项目 ID 或 VPC 网络的名称。Config Connector 会阻止修改此类字段,并且无法使更改生效。如果您要修改某个不可变字段,则必须先删除原始资源(通过 Git),然后再使用您需要的新值重新添加该资源。

资源卡住

在某些情况下,资源可能无法正确删除(根据 nomos status 的报告)。若要解决此问题,您可以移除资源上的终结器,然后手动删除资源。

例如,如需删除卡住的 IAMPolicyMember,请运行以下命令:

kubectl patch IAMPolicyMember logging-sa-iam-permissions -p '{"metadata":{"finalizers":[]}}' --type=merge -n config-control
kubectl delete IAMPolicyMember logging-sa-iam-permissions -n config-control