本页面列出了 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_NAME 和 REGISTRY_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
设置被更改为 1
或 2
,则 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