首页 > 解决方案 > 如何为 GKE 集群上运行的后端 API 服务设置 IAP(身份感知代理)身份验证

问题描述

我有一个应用程序在前端做出反应,在后端有一个节点服务。该应用程序部署在 GKE 集群中。这两个应用程序都作为 NodePort 服务公开,并且扇出入口路径如下完成:

- host: example.com
   http:
     paths:
     - backend:
         serviceName: frontend-service
         servicePort: 3000
       path: /*
     - backend:
         serviceName: backend-service
         servicePort: 5000
       path: /api/*

我已经为这两种服务启用了使用 IAP 的身份验证。为 Kubernetes 服务启用 IAP 时,会单独创建新的 Client Id 和 Client Secret。但是我需要从前端为后端 API 提供身份验证,因为他们有 2 个不同的帐户,这是不可能的,即当我从前端调用后端 API 服务时,身份验证失败,因为 cookie FE 提供的与后端服务不匹配。

处理这种情况的最佳方法是什么。有没有办法为这两种服务使用相同的客户端凭据,如果是这样,那是正确的方法还是有办法直接使用 IAP 对 Rest API 进行身份验证。

标签: authenticationkubernetesgoogle-cloud-platformgoogle-kubernetes-enginekubernetes-ingress

解决方案


如果 IAP 是使用 BackendConfig 设置的,那么您可以为前端和后端应用程序设置两个单独的 BackendConfig 对象,但它们都为 oauthclientCredentials 使用相同的秘密 (secretName)。

对于前端应用

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name:  frontend-iap-config
  namespace: namespace-1
spec:
  iap:
    enabled: true
    oauthclientCredentials:
      secretName: common-iap-oauth-credentials

对于后端应用

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name:  backend-iap-config
  namespace: namespace-1
spec:
  iap:
    enabled: true
    oauthclientCredentials:
      secretName: common-iap-oauth-credentials

然后从各自的 kubernetes 服务对象中引用这些 BackendConfigs


推荐阅读