我正在安装 Istio 的本地 Kubernetes 集群中部署 ECK。 我们在网关处划定了安全边界。这意味着所有服务只能通过完成 TLS 和身份验证的网关访问。由于我们使用 Istio,我们的 K8s 服务本身不需要 TLS(Envoy 代理为每个 Pod 带来 mTLS)。
Elasticsearch 需要 TLS 才能通过 OIDC 启用身份验证。我不明白为什么,但好吧。
我无法使用 cert-manager 使用有效证书配置 Elasticsearch - 无法从互联网访问 elasticsearch-es-http K8s 服务。
如果我在 Elasticsearch 上使用自签名证书配置 TLS,我需要将其 CA 添加到与 ES 通信的所有服务中。这似乎不合理。
为什么?为什么我必须在 ES 上启用 TLS 才能使 OIDC 正常运行?
OAuth2 流程中的哪个“资源服务器”(本例中为 ES)需要具有 TLS?无论如何,IDP 不会直接向资源服务器发送请求。 身份验证服务器已配置 TLS。
我在这里缺少什么?
查看为您的授权服务器配置具有外部端点(使用 HTTPS)的 ES 是否适合您。如果是这样的话,管理起来会更容易。
Kibana 登录需要使用授权和令牌端点。或者您可以使用发行者或发现端点来配置 ES。
将 OIDC 与 Kubernetes 仪表板等组件一起使用需要类似的设置。当前存在一个限制,Kubernetes API 服务器无法解析内部 DNS 名称并调用授权服务器。因此,在我的 AWS 集群中,我配置了如下设置:
identityProviders:
- name: oidc-provider
type: oidc
issuerUrl: https://login.example.com
clientId: kubernetes_client
groupsClaim: kubernetes_groups
在某些情况下,这可能会导致 K8S 组件离开集群,联系授权服务器。这种情况不应该经常发生,例如 API 服务器可以缓存 JWKS。
需要注意的一个烦恼是,在开发设置中,这只能在 Linux 主机上运行。在 Windows 和 macOS 上,K8S 集群无法调用主机公开的公共 URL。