authentication - 如何为 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 进行身份验证。
解决方案
如果 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
推荐阅读
- solr - solr:copyField 之后不可搜索的文本索引和存储
- python-3.x - 无法在串行 Python 中发送(或不接收)0 值
- python - 学习 Python BeautifulSoup,为什么我必须在 For 循环中使用两个元素?
- reactjs - 使用节点媒体服务器托管 RTMP 服务器
- typo3 - 错字3 | powermail - 保存和使用会话数据(预填字段)
- firebase - 如何根据我之前发送的数据获取firebase数据
- tensorflow - ResNet 模型在加载到 Flask Web 应用程序时错误地预测一个类?不匹配保存的模型预测
- numpy - 难以理解张量的广播行为
- python - 谁能告诉我在我的代码中哪里出错了?
- angular - 从角度 7 的数组中减去三行