首页 > 解决方案 > 如何在 Kuberenetes (GKE) 中为身份验证和负载平衡添加反向代理?

问题描述

好的,我有一个由部署到 GKE 的多个节点组成的数据库。

deployment.yaml 将每个节点添加为 ClusterIP,这是有道理的。这是完整的部署文件:

https://github.com/dgraph-io/dgraph/blob/master/contrib/config/kubernetes/dgraph-ha/dgraph-ha.yaml

无论出于何种原因,数据库的安全功能为零,因此我不能使用 LoadBalancer 服务公开任何部分,因为这样做会给整个数据库带来不安全的访问。供应商辩称,安全性完全是用户的问题。AlphaNode 带有一个 API 端点,它也是不安全的,但我实际上想从外部 IP 连接到该 API 端点。

因此,我能做的最好的事情就是添加一个 NGNIX 作为具有身份验证的(反向)代理,以保护对 Alpha 节点的 API 端点的访问。实际上,我有三个 alpha 节点,因此添加负载平衡是有意义的。我在 Docker Compose 中找到了一个对三个 alpha 节点进行负载平衡的配置,但没有进行身份验证:

https://gist.github.com/MichelDiz/42954e321620159c872c35c20e9d85c6

现在,我遇到的价值百万美元的问题是,如何向 Kubernetes 添加 NGNIX 负载平衡,以对传入 (ClusterIP) alpha 节点的传入流量进行身份验证和负载平衡?

任何指针?有什么帮助吗?

标签: dockerkubernetesgoogle-kubernetes-engine

解决方案


如果你想这样做,你可以部署自己的 nginx 部署并将其公开为LoadBalancer Service. 您可以使用 nginx 支持的不同身份验证机制对其进行配置。

相反,您可以使用支持身份验证Ingress的资源。IngressController检查您的 kubernetes 发行版是否提供IngressController以及是否支持身份验证。如果没有,您可以安装支持身份验证的nginxTraefik IngressControllers。

看起来 GKE 入口最近增加了对基于 IAP 的身份验证的支持,该身份验证仍处于测试阶段 - https://cloud.google.com/iap/docs/enabling-kubernetes-howto

如果您正在寻找更传统的入口身份验证类型,请安装 nginx 或 traefik 并使用kubernetes.io/ingress.class注释,以便只有 IngressController 声明您的入口资源 - https://kubernetes.github.io/ingress-nginx/user-guide/multiple-入口/


推荐阅读