403禁止在ESPv2、GKE AutoPilot、WIF上使用



我正在使用ESPv2学习GKE的端点入门。我在GKE集群上使用WorkloadIdentity Federation和Autopilot。

我遇到了错误:

F0110 03:46:24.304229 8 server.go:54] fail to initialize config manager: http call to GET https://servicemanagement.googleapis.com/v1/services/name:bookstore.endpoints.<project>.cloud.goog/rollouts?filter=status=SUCCESS returns not 200 OK: 403 Forbidden

这最终导致传输故障错误并关闭Pod。

我的第一步是调查许可问题,但我真的可以从外部角度来看待这个问题,因为我一直在这个问题上兜圈子。

这是我的配置:

>> gcloud container clusters describe $GKE_CLUSTER_NAME 
--zone=$GKE_CLUSTER_ZONE 
--format='value[delimiter="n"](nodePools[].config.oauthScopes)'
['https://www.googleapis.com/auth/devstorage.read_only', 
'https://www.googleapis.com/auth/logging.write', 
'https://www.googleapis.com/auth/monitoring', 
'https://www.googleapis.com/auth/service.management.readonly', 
'https://www.googleapis.com/auth/servicecontrol', 
'https://www.googleapis.com/auth/trace.append']
>> gcloud container clusters describe $GKE_CLUSTER_NAME 
--zone=$GKE_CLUSTER_ZONE 
--format='value[delimiter="n"](nodePools[].config.serviceAccount)'
default
default

服务帐户名称:test-espv2

角色

Cloud Trace Agent
Owner
Service Account Token Creator
Service Account User
Service Controller
Workload Identity User

我已将WIF svc行为与集群与以下yaml 关联

apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
iam.gke.io/gcp-service-account: test-espv2@<project>.iam.gserviceaccount.com
name: test-espv2
namespace: eventing

然后我将吊舱与test-espv2svc-act 关联起来

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: esp-grpc-bookstore
namespace: eventing
spec:
replicas: 1
selector:
matchLabels:
app: esp-grpc-bookstore
template:
metadata:
labels:
app: esp-grpc-bookstore
spec:
serviceAccountName: test-espv2
由于CCD_ 3是有限的,我创建了一个测试容器,并将其部署到相同的eventing命名空间中。

在容器中,我可以使用以下命令检索端点服务配置:

curl --fail -o "service.json" -H "Authorization: Bearer $(gcloud auth print-access-token)" 
"https://servicemanagement.googleapis.com/v1/services/${SERVICE}/configs/${CONFIG_ID}?view=FULL" 

同样在容器中,我以模拟服务帐户的身份运行,使用进行测试

curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/

有没有其他测试可以帮助我调试这个问题?

提前感谢

关于调试-我经常发现自己的错误,因为我遵循了谷歌教程中的其他方法/编程语言之一。

你有没有看过OpenAPI的注释并试着跟上?

我终于解决了这个问题。它分为两部分。

  1. 重新部署应用程序,特别注意并验证kubectl annotate serviceaccount命令
    • 为serviceController和cloudtrace.agent添加iam策略绑定
    • 由于自动驾驶而省略nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"

这样做可以成功部署kube,如日志所示。

我的下一个错误是

<h1>Error: Server Error</h1>
<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
  1. 这是通过将注意力转回Kube集群来修复的。查看我的ingress服务中的事件,由于我在共享vpc中,并且我的安全策略只允许从主机项目进行防火墙管理,因此部署未能更新防火墙规则

手动配置它们,如下所示:

https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#manually_provision_firewall_rules_from_the_host_project

解决了我的问题。

最新更新