Anthos 不公开模式已知问题

本页面列出了 Anthos 不公开模式的已知问题,以及可避免这些问题或在发生此类问题时恢复服务的方法。

管理员集群创建卡在 waiting for node update jobs

创建管理员集群通常需要大约 30 分钟。如果集群长时间卡在“等待节点更新作业”阶段,您可以使用 Ctrl + C 结束该进程。此阶段是安装过程的最后一步。结束此过程不会影响安装。

用户集群创建停滞

创建用户集群通常需要大约 10-30 分钟。如果集群卡住了,您可使用以下命令检查集群创建的进度。

kubectl get pods -n cluster-USER_CLUSTER --kubeconfig=ADMIN_KUBECONFIG
kubectl get Cluster -n cluster-USER_CLUSTER -o yaml --kubeconfig=ADMIN_KUBECONFIG

升级具有多个控制层面节点的管理员集群卡住了

升级管理员集群可能会卡在升级控制层面节点的过程。升级命令保留在 Waiting for upgrade to complete... Upgrading <control plane node IP> 中。

只有在配置以下所有条件时,问题才会影响管理员集群:

  • 配置的私有注册表使用由私有证书授权机构签名的证书。

  • 管理员集群配置了多个控制层面节点。例如,如果配置为高可用性

  • 控制层面节点安装了 docker

该问题是由错误配置引起的,它试图在错误的位置获取注册表证书授权机构文件。要解决此问题,您需要在每个节点中手动分发证书授权机构文件。例如,从管理员工作站运行以下脚本:

#!/bin/bash

# Docker login to generate the $HOME/.docker/config.json file
docker login REGISTRY_HOST

# List the IP addresses for all the control plane nodes, separated by whitespace.
IPs=( NODE_IPS_SEPARATED_BY_SPACE )

for ip in "${IPs[@]}"; do
  # Copy the docker config over to the nodes.
  scp $HOME/.docker/config.json USER_NAME@${ip}:docker-config.json

  # Fix the image pull credentials issue
  ssh USER_NAME@${ip} "sudo mkdir -p /root/.docker && sudo cp docker-config.json /root/.docker/config.json"

  # Fix the cert issue, only needed for private registry with self-signed certs.
  ssh USER_NAME@${ip} "sudo mkdir -p /etc/docker/certs.d && sudo cp -r /etc/containerd/certs.d/REGISTRY_HOST /etc/docker/certs.d/"
done

USER_NAMEREGISTRY_HOST 替换为管理员集群配置中配置的值。

专用 IP 访问时发生 400 授权错误

设置 Open ID Connect (OIDC) 身份验证后,如果您仍在使用 IP 地址来访问管理中心,系统会将您重定向到身份验证页面,并且您会收到与专用 IP 访问授权相关的错误。例如:

错误消息:请联系管理员了解详情。

通过使用配置的域名(而不是 IP)来访问平台,运行 actl platform management-center describe 检索整个地址。对于重定向回调,域名是必需的。您的域名可以指向专用地址。

创建初始平台管理员时出现 500 HTTP 失败响应

将 OIDC 配置文件应用于集群时,如果配置文件的用户名或群组前缀包含“/”字符,则点击提交后,您可能会收到 500 Http 失败响应。

要解决此问题,请删除再新建用户名和群组前缀中不含“/”字符的配置文件,并尝试将新的配置文件应用到集群。

RBAC:访问遭拒

如果您在使用 Platform Admin 帐号登录看到 RBAC: access denied 消息,则 OIDC 设置中可能有错误。请参阅重置身份验证配置

使用注册表镜像配置时,使用私有注册表中的映像

如果集群是使用注册表镜像配置设置的,请在直接使用私有注册表中的映像时记下映像路径。

例如,如果使用镜像配置创建管理员集群:

registryMirrors:
- endpoint: https://10.200.0.2/v2/library

映像由 docker push 10.200.0.2/library/test-image:test-tag 上传到私有注册表。创建 Deployment 或 Pod 时,映像 10.200.0.2/library/test-image:test-tag 无法按原样使用。这是因为节点的 containerd 配置 (/etc/containerd/config.toml) 配置为镜像 10.200.0.2/library 中的所有映像拉取。然后,containerd 尝试从 10.200.0.2/library/library/test-image:test-tag 拉取映像。要解决此问题,请尝试以下方法之一:

  • 将映像推送到端点 docker push 10.200.0.2/library/library/test-image:test-tag
  • 使用映像路径 10.200.0.2/test-image:test-tag

设置 OIDC 后,无法将 Management Center 从 0.8 升级到 0.9

设置 OIDC 后,将 Management Center 从 0.8 升级到 0.9 会失败,并显示以下错误消息:

level=fatal msg="Unable to initialize options: unable to resolve management center cluster: The given \"management center\" cluster \"admin-admin@admin\" does not appear to be a valid management center cluster.  Did you choose the right cluster?\nunable to list DomainIDPMapping objects: the server could not find the requested resource"

如需解决此问题,请使用 DomainIDPMapping CRD 创建文件。

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.4.0
  creationTimestamp: null
  name: domainidpmappings.managementcenter.anthos.cloud.google.com
spec:
  group: managementcenter.anthos.cloud.google.com
  names:
    kind: DomainIDPMapping
    listKind: DomainIDPMappingList
    plural: domainidpmappings
    singular: domainidpmapping
  scope: Cluster
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: DomainIDPMapping is the Schema for the domainidpmappings API
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: DomainIDPMappingSpec is the struct that contains the mapping
              from the domain to the authentication method name specified in the AIS
              ClientConfig.
            properties:
              authMethodName:
                description: AuthMethodName is the name of the authentication method
                  configured in the AIS ClientConfig.
                type: string
              domainName:
                description: DomainName is the domain used to serve the Anthos web
                  endpoints. The domain should not include the protocol such as http
                  or https. Wild cards are not supported in the domain name.
                type: string
            required:
            - authMethodName
            - domainName
            type: object
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []

应用 CRD:

kubectl --kubeconfig=ADMIN_KUBECONFIG apply -f domainIDPMappingCRD.yaml

删除 EnvoyFilter 和 oauth2-proxy 命名空间。

kubectl --kubeconfig=ADMIN_KUBECONFIG delete envoyfilter istio-ingressgateway -n istio-system
kubectl --kubeconfig=ADMIN_KUBECONFIG delete namespace oauth2-proxy

为前缀为 anthos-log-forwarder 的 pod 拉取映像时出错

如果在安装集群时启用 --private-registry,则 anthos-log-forwarder 路径中 initContainer 使用的映像路径不会被 --private-registry 中指定的路径覆盖。只有管理员集群才会发生这种情况。

例如,如果您在管理员集群中观察到以下错误:

kubectl -n kube-system get pods --selector=app=anthos-log-forwarder
anthos-log-forwarder-2n96b                           0/1     Init:ErrImagePull       0          16s
anthos-log-forwarder-8fxm8                           0/1     Init:ErrImagePull       0          16s
anthos-log-forwarder-bh7rb                           0/1     Init:ImagePullBackOff   0          16s

只有设置了 --private-registry 的管理员集群才会受到此问题的影响,并将在下一版本中解决此问题。

Pod 连接失败和反向路径过滤

Anthos 不公开模式会在节点上配置反向路径过滤以停用来源验证 (net.ipv4.conf.all.rp_filter=0)。如果 rp_filter 设置被更改为 12,则 Pod 会因节点外通信超时而失败。

反向路径过滤是使用 IPv4 配置文件夹 (net/ipv4/conf/all) 中的 rp_filter 文件设置的。此值也可能被 sysctl 替换,后者会将反向路径过滤设置存储在网络安全配置文件(例如 /etc/sysctl.d/60-gce-network-security.conf)中。

如需恢复 Pod 连接,请手动将 net.ipv4.conf.all.rp_filter 设置回 0,或者重新启动 anetd Pod 以将 net.ipv4.conf.all.rp_filter 设置回 0。如需重启 anetd Pod,请使用以下命令定位并删除 anetd Pod,一个新的 anetd Pod 将在其位置启动:

kubectl get pods -n kube-system
kubectl delete pods -n kube-system ANETD_XYZ

ANETD_XYZ 替换为 anetd Pod 的名称。

升级后机器页面上未列出任何机器

重启 anthos-cluster-operator pod。

kubectl --kubeconfig ADMIN_KUBECONFIG delete pods -l control-plane=anthos-cluster-operator -n kube-system

升级后无法修改用户集群

重启 anthos-cluster-operator pod。

kubectl --kubeconfig ADMIN_KUBECONFIG delete pods -l control-plane=anthos-cluster-operator -n kube-system

后续步骤