Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes CloudRun:来自curl的调试身份验证错误_Kubernetes_Google Cloud Platform_Escaping_Google Cloud Run - Fatal编程技术网

Kubernetes CloudRun:来自curl的调试身份验证错误

Kubernetes CloudRun:来自curl的调试身份验证错误,kubernetes,google-cloud-platform,escaping,google-cloud-run,Kubernetes,Google Cloud Platform,Escaping,Google Cloud Run,我正在从GKE旋转一个容器(吊舱/作业) 我已在集群的VM上设置了相应的服务帐户 因此,当我手动对特定CloudRun服务端点执行curl时,我可以执行请求(并获得授权,在响应中使用200) 然而,当我试图通过如下方式将图像设置为在作业中运行来实现自动化时,我得到了401 - name: pre-upgrade-job image: "google/cloud-sdk" args: - curl - -s

我正在从GKE旋转一个容器(吊舱/作业)

我已在集群的VM上设置了相应的服务帐户

因此,当我手动对特定CloudRun服务端点执行
curl
时,我可以执行请求(并获得授权,在响应中使用
200

然而,当我试图通过如下方式将图像设置为在
作业中运行来实现自动化时,我得到了
401

      - name:  pre-upgrade-job
        image: "google/cloud-sdk"
        args:
          - curl
          - -s
          - -X
          - GET
          - -H
          - "Authorization: Bearer $(gcloud auth print-identity-token)"
          - https://my-cloud-run-endpoint
以下是
Stackdriver

{
 httpRequest: {
  latency: "0s"   
  protocol: "HTTP/1.1"   
  remoteIp: "gdt3:r787:ff3:13:99:1234:avb:1f6b"   
  requestMethod: "GET"   
  requestSize: "313"   
  requestUrl: "https://my-cloud-run-endpoint"   
  serverIp: "212.45.313.83"   
  status: 401   
  userAgent: "curl/7.59.0"   
 }
 insertId: "29jdnc39dhfbfb"  
 logName: "projects/my-gcp-project/logs/run.googleapis.com%2Frequests"  
 receiveTimestamp: "2019-09-26T16:27:30.681513204Z"  
 resource: {
  labels: {
   configuration_name: "my-cloud-run-service"    
   location: "us-east1"    
   project_id: "my-gcp-project"    
   revision_name: "my-cloudrun-service-d5dbd806-62e8-4b9c-8ab7-7d6f77fb73fb"    
   service_name: "my-cloud-run-service"    
  }
  type: "cloud_run_revision"   
 }
 severity: "WARNING"  
 textPayload: "The request was not authorized to invoke this service. Read more at https://cloud.google.com/run/docs/securing/authenticating"  
 timestamp: "2019-09-26T16:27:30.673565Z"  
}

我的问题是,如何查看“身份验证”头是否到达端点(日志不会给我太多启示),如果到达端点,在调用image命令/args时是否正确呈现。

在作业中,
gcloud auth print identity token
可能不会返回任何tocken。
原因是,在本地,gcloud使用您的身份创建令牌,但在作业中,您没有登录到gcloud。

在作业中,
gcloud auth print identity token
可能不会返回任何tocken。
原因是,在本地,gcloud使用您的身份创建令牌,但在作业中,您没有登录到gcloud。

在作业中,您使用此容器
google/cloud sdk
,这是一个全新安装的
gcloud
工具。它是通用的,没有任何定制

调用此
$(gcloud auth print identity token)
时,您需要在
gcloud
工具中配置的服务帐户的标识

如果我们将这两段放在一起,您希望从
gcloud
工具的通用/空白安装中生成标识。顺便说一下,您的
gcloud
中没有定义服务帐户,您的令牌是空的(如@johnhanley所说)

要解决此问题,请添加如下环境变量

env: 
  - GOOGLE_APPLICATION_CREDENTIAL=<path to your credential.json>
更新

尝试在
gcloud
容器之外运行命令。这是你工作的更新

 - name:  pre-upgrade-job
        image: "google/cloud-sdk"
        entrypoint: "bash"
        args:
          - -c
          - "curl -s -X GET -H \"Authorization: Bearer $(gcloud auth print-identity-token)\" https://my-cloud-run-endpoint"

我不确定这是否有效。让我知道

在您的工作中,您使用了这个容器
google/cloud sdk
,这是一个全新的
gcloud
工具安装。它是通用的,没有任何定制

调用此
$(gcloud auth print identity token)
时,您需要在
gcloud
工具中配置的服务帐户的标识

如果我们将这两段放在一起,您希望从
gcloud
工具的通用/空白安装中生成标识。顺便说一下,您的
gcloud
中没有定义服务帐户,您的令牌是空的(如@johnhanley所说)

要解决此问题,请添加如下环境变量

env: 
  - GOOGLE_APPLICATION_CREDENTIAL=<path to your credential.json>
更新

尝试在
gcloud
容器之外运行命令。这是你工作的更新

 - name:  pre-upgrade-job
        image: "google/cloud-sdk"
        entrypoint: "bash"
        args:
          - -c
          - "curl -s -X GET -H \"Authorization: Bearer $(gcloud auth print-identity-token)\" https://my-cloud-run-endpoint"

我不确定这是否有效。让我知道

错误401表示“请求的凭据无效”
gcloud
是一个脚本。这意味着作业需要启动shell并运行python程序。这可能是失败的。在接收服务上,关闭IAP并手动记录HTTP头。您收到的HTTP授权标头可能如下所示
authorization:bearer
。请注意,令牌可能丢失。错误401表示“请求的凭据无效”
gcloud
是一个脚本。这意味着作业需要启动shell并运行python程序。这可能是失败的。在接收服务上,关闭IAP并手动记录HTTP头。您收到的HTTP授权标头可能如下所示
authorization:bearer
。请注意,令牌可能已丢失。鉴于
pod
已附加GCP ServiceAccount(基础VM之一),我不必登录到帐户。我已经尝试了上面的命令,当手动执行时,它可以工作
gcloud auth print identity token
在虚拟机连接了SA时会返回一个令牌。如果
pod
连接了GCP ServiceAccount(基础虚拟机之一),则我不必登录到帐户。我已经尝试了上面的命令,当手动执行时,它可以工作
gcloud auth print identity token
在VM附加SA时返回令牌。请查看我发布给用户Steren的注释请查看我发布给用户Steren的注释