我正计划构建一个包含许多微服务的K8s集群(每个微服务都在pod中运行,服务确保通信(。我正在努力了解如何确保这些微服务之间的通信是安全的。所谓通信,我指的是微服务A和微服务B的API之间的HTTP调用。
通常,我会实现OAuth流,其中auth服务器会接收一些凭据作为输入并返回JWT。然后客户端可以在任何后续调用中使用此JWT。
我希望K8有一些内置的身份验证服务器,可以生成令牌(比如JWT(,但我似乎找不到。K8s确实对其API服务器进行了身份验证,但这似乎只对执行Kubernetes特定操作(如扩展pod或获取机密等(的调用进行身份验证。但是,并没有提到简单地验证HTTP调用(GET POST等(。
我应该创建自己的身份验证服务器并通过服务访问它吗?还是有一种简单干净的方法可以在Kubernetes中自动验证API调用?
不知道如何回答这个巨大的问题,但是,我会尽我所能。
您可以应用多种解决方案,但K8s中没有可供使用的身份验证。
要么你必须设置第三方OAuth服务器或IAM服务器等,要么你编写并创建自己的微服务。
有不同的区域你不能合并,
对于服务互连,服务A到服务B最好使用服务网格,如Istio和LinkerD,它们提供双向TLS安全支持,并且易于设置。
因此,服务之间的连接将是HTTPS并且是安全的,但由您来管理和设置它。
如果你只是在后台运行普通流量,你可以遵循你描述的相同方法。
在后端服务中传递带有jwt负载的普通HTTP。
Key斗篷也是使用OAuth服务器的好主意,我还建议查看Oauth2代理
列出一些可能对有用的文章
https://medium.com/codex/api-authentication-using-istio-ingress-gateway-oauth2-proxy-and-keycloak-a980c996c259
我自己的文章与孔API网关在Kubernetes
https://faun.pub/securing-the-application-with-kong-keycloak-101-e25e0ae9ec56
POC的GitHub文件:https://github.com/harsh4870/POC-Securing-the--application-with-Kong-Keycloak
K8s上的密钥斗篷部署:https://github.com/harsh4870/Keycloack-postgres-kubernetes-deployment