如何在 Kubernetes 中验证 api 调用

How to authenticate api calls in Kubernetes

我计划构建一个包含许多微服务的 K8s 集群(pods 中的每个 运行 服务确保通信)。我试图了解如何确保这些微服务之间的通信是安全的。通过通信,我指的是微服务 A 和微服务 B 之间的 HTTP 调用 API.

通常,我会实现一个 OAuth 流程,其中 auth 服务器会接收一些凭据作为输入和 return JWT。然后客户端可以在任何后续调用中使用此 JWT。

我希望 K8s 有一些可以生成令牌的内置身份验证服务器(如 JWT),但我似乎找不到。 K8s 确实对其 API 服务器进行了身份验证,但这似乎只对执行 Kubernetes 特定操作(例如缩放 pod 或获取机密等)的调用进行身份验证。 但是,没有提及简单地验证 HTTP 调用(GET POST 等)。

我应该只创建自己的身份验证服务器并使其可通过服务访问,还是有一种简单干净的方法可以在 Kubernetes 中自动验证 API 调用?

不知道如何回答这个大问题,不过,我会尽力的。

您可以应用多种解决方案,但同样在 K8s 中没有任何您可以使用的身份验证解决方案。

要么您必须设置 third-party OAuth 服务器或 IAM 服务器等,要么您编写并创建自己的微服务。

有不同的区域不能合并,

服务互联服务A服务B最好使用像Istio[这样的服务网格LinkerD 提供 相互 TLS 安全支持并且也易于设置。

所以服务之间的连接将是 HTTPS 并且是安全的,但是您需要管理和设置它。

如果您只是 运行 后端内部的普通流量,您可以按照您描述的相同方法进行操作。

在后端服务中传递带有 jwt 负载的纯 HTTP

Keycloak is also a good idea to use the OAuth server, i would also recommend checking out Oauth2-proxy

列出几篇可能有用的文章

https://medium.com/codex/api-authentication-using-istio-ingress-gateway-oauth2-proxy-and-keycloak-a980c996c259

我自己关于 Keycloak with Kong 的文章API Kubernetes 上的网关

https://faun.pub/securing-the-application-with-kong-keycloak-101-e25e0ae9ec56

GitHub 个 POC 文件:https://github.com/harsh4870/POC-Securing-the--application-with-Kong-Keycloak

K8s 上的 Keycloak 部署:https://github.com/harsh4870/Keycloack-postgres-kubernetes-deployment