Kubernetes 大使外部身份验证设置返回404

Kubernetes 大使外部身份验证设置返回404,kubernetes,api-gateway,envoyproxy,Kubernetes,Api Gateway,Envoyproxy,我使用大使作为API网关,并试图让外部身份验证工作。我已经部署了带有相应注释的auth服务 ... metadata: name: auth-service-svc annotations: getambassador.io/config: | --- apiVersion: ambassador/v1 kind: AuthService name: authentication proto: http

我使用大使作为API网关,并试图让外部身份验证工作。我已经部署了带有相应注释的auth服务

...
metadata:
  name: auth-service-svc
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind:  AuthService
      name:  authentication
      proto: http
      path_prefix: "/api"
      auth_service:  auth-service-svc:8080    
spec:
  ports:
    - port: 8080
      targetPort: 8080
      name: http
  selector:
    app: auth-service
  type: ClusterIP

当我执行一个curl来启动一个Get请求时,我希望调用auth服务。然而,这似乎没有发生。当我查看大使日志时,我看到以下信息:

[2019-04-12 15:10:42.977][75][debug][main] [source/server/connection_handler_impl.cc:257] [C20117] new connection
[2019-04-12 15:10:42.977][75][debug][http] [source/common/http/conn_manager_impl.cc:243] [C20117] new stream
[2019-04-12 15:10:42.977][75][debug][http] [source/common/http/conn_manager_impl.cc:580] [C20117][S12856858676043764009] request headers complete (end_stream=true):
':authority', '<some-prefix>.elb.amazonaws.com'
':path', '/api/'
':method', 'GET'
'user-agent', 'curl/7.61.0'
'accept', '*/*'

[2019-04-12 15:10:42.977][75][debug][http] [source/common/http/conn_manager_impl.cc:1037] [C20117][S12856858676043764009] request end stream
[2019-04-12 15:10:42.977][75][debug][router] [source/common/router/router.cc:277] [C20117][S12856858676043764009] no cluster match for URL '/api/'
[2019-04-12 15:10:42.977][75][debug][http] [source/common/http/conn_manager_impl.cc:1278] [C20117][S12856858676043764009] encoding headers via codec (end_stream=true):
':status', '404'
'date', 'Fri, 12 Apr 2019 15:10:42 GMT'
'server', 'envoy'

[2019-04-12 15:10:43.013][75][debug][connection] [source/common/network/connection_impl.cc:502] [C20117] remote close
[2019-04-12 15:10:43.013][75][debug][connection] [source/common/network/connection_impl.cc:183] [C20117] closing socket: 0
关于为什么未检测到路径并将其路由到外部身份验证服务的任何提示?

路径前缀:/api不会为您的身份验证服务创建映射,它只告诉您/api将附加到您的请求中,并且身份验证服务需要该前缀。在中定义身份验证服务时,所有请求都将重定向到身份验证服务。如果需要直接向身份验证服务发出请求,请为其创建映射

例如: 如果您有一个带有映射的服务:

apiVersion: ambassador/v1
kind:  Mapping
name:  myapp-mapping
prefix: /myapp/
service: myapp:8000
当您执行curl$URL/myapp/时,请求将被重定向到位于$URL/api/myapp的身份验证服务。身份验证服务需要有/api/myapp的端点。如果返回HTTP状态200,则ambassador将向myapp发送原始请求。否则,它将向客户端返回身份验证服务响应。 如果您想使用curl$URL/api/myapp,那么您可以删除auth服务中的前缀,并将myapp的前缀更改为/api/myapp/

请阅读以了解更多详细信息。

路径前缀:/api不会为您的身份验证服务创建映射,它只会告诉您/api将附加到您的请求中,并且身份验证服务需要该前缀。在中定义身份验证服务时,所有请求都将重定向到身份验证服务。如果需要直接向身份验证服务发出请求,请为其创建映射

例如: 如果您有一个带有映射的服务:

apiVersion: ambassador/v1
kind:  Mapping
name:  myapp-mapping
prefix: /myapp/
service: myapp:8000
当您执行curl$URL/myapp/时,请求将被重定向到位于$URL/api/myapp的身份验证服务。身份验证服务需要有/api/myapp的端点。如果返回HTTP状态200,则ambassador将向myapp发送原始请求。否则,它将向客户端返回身份验证服务响应。 如果您想使用curl$URL/api/myapp,那么您可以删除auth服务中的前缀,并将myapp的前缀更改为/api/myapp/


请阅读了解更多详细信息。

感谢您的澄清。我的假设是,200以外的任何东西都将被视为未经授权的401。我没有意识到来自AuthService的HTTP 404正在传递到客户端。@Victorv auth服务中的端点需要使用与原始请求相同的HTTP谓词吗?也就是说,如果对/myapp的请求是GET,则身份验证服务中的端点也需要是GET?如果后端中的端点是DELETE怎么办?有没有办法指定对$URL/api/myapp的请求应该始终是一篇文章?感谢您的澄清。我的假设是,200以外的任何东西都将被视为未经授权的401。我没有意识到来自AuthService的HTTP 404正在传递到客户端。@Victorv auth服务中的端点需要使用与原始请求相同的HTTP谓词吗?也就是说,如果对/myapp的请求是GET,则身份验证服务中的端点也需要是GET?如果后端中的端点是DELETE怎么办?有没有办法指定对$URL/api/myapp的请求应该始终是一篇文章?