【问题标题】:403 Forbidden on ESPv2, GKE AutoPilot, WIFESPv2、GKE AutoPilot、WIF 上禁止 403
【发布时间】:2023-03-11 09:37:01
【问题描述】:

我正在关注Getting started with Endpoints for GKE with ESPv2。我在 GKE 集群上使用 Workload Identity 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

我已使用以下 yaml 将 WIF svc-act 与集群相关联

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

然后我将 pod 与 test-espv2 svc-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

由于gcr.io/endpoints-release/endpoints-runtime:2是有限的, 我创建了一个测试容器并将其部署到相同的 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/

我可以运行任何其他测试来帮助我调试此问题吗?

提前致谢,

【问题讨论】:

  • Cloud Endpoints 有 这么 个步骤。我感受到了你的痛苦!我编写了我的(基于 gRPC 的 Cloud Run)部署的脚本,部分原因是我总是忘记至少一个步骤!你gcloud services enable你的服务了吗?您是否执行了gcloud endpoints services add-iam-policy-binding 步骤?
  • > gcloud services list | grep -e endpoints -e service bookstore.endpoints..cloud.goog 书店 gRPC API endpoints.googleapis.com Google Cloud Endpoints servicecontrol.googleapis.com 服务控制 API servicemanagement.googleapis.com 服务管理 API > gcloud endpoints services get-iam-policy bookstore.endpoints.&lt;project&gt;.cloud.goog 绑定:- 成员:- serviceAccount:test-espv2@.iam.gserviceaccount.com 角色:roles/servicemanagement.serviceController etag:BwXUzTf4Khc=
  • 您是否运行了第 7 步中记录的 here 的 gcloud iam service-accounts add-iam-policy-binding 命令?需要允许 Kubernetes 服务帐号模拟 Google 服务帐号。
  • @DazWilkin 为格式化道歉,结果很奇怪。简而言之,我已经验证我已经完成了这些步骤,仍然是同样的问题。你的脚本部署,在公共 github 上吗?
  • 不用担心。我没有看到任何明显的错误,但正如我所说,这是一个如此复杂的过程,很容易错过一些东西。我在 Cloud Run 上使用 gRPC,没有 WIF,所以我的场景与你的完全不同。

标签: google-cloud-platform google-kubernetes-engine endpoint grpc-python workload-identity


【解决方案1】:

关于调试 - 我经常通过遵循 Google 教程中的其他方法/编程语言之一来发现我的错误。

您是否看过OpenAPI notes 并尝试跟进?

【讨论】:

    【解决方案2】:

    我终于找到了问题所在。它分为两部分。

    1. 重新部署app,特别注意和验证kubectl annotate serviceaccount命令
      • 为 serviceController 和 cloudtrace.agent 添加 iam-policy-binding
      • 由于自动驾驶仪而省略 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 集群来解决这个问题。 查看我的入口服务中的事件,因为我在共享 vpc 中,并且我的安全策略只允许从宿主项目管理防火墙,所以部署无法更新防火墙规则。

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

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

    解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2022-11-25
      • 1970-01-01
      • 2021-08-08
      • 2021-08-06
      • 1970-01-01
      • 2022-11-11
      • 2022-10-19
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多