簡體   English   中英

403 禁止訪問 ESPv2、GKE AutoPilot、WIF

[英]403 Forbidden on ESPv2, GKE AutoPilot, WIF

我正在關注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

我已將 WIF svc-act 與具有以下 yaml 的集群相關聯

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/

我可以運行任何其他測試來幫助我調試此問題嗎?

提前致謝,

圍繞調試 - 我經常通過遵循 Google 教程中的其他方法/編程語言之一來發現我的錯誤。

您是否查看過OpenAPI 說明並嘗試跟進?

我終於弄清楚了這個問題。 它分為兩部分。

  1. 重新部署app,特別注意和驗證kubectl annotate serviceaccount命令
    • 為 serviceController 和 cloudtrace.agent 添加 iam-policy-binding
    • 省略nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"由於 Autopilot

這樣做可以成功部署 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/kube.netes-engine/docs/concepts/ingress#manually_provision_firewall_rules_from_the_host_project

解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM