Kubernetes:我应该使用HTTPS在服务之间进行通信

时间:2018-01-09 11:59:14

标签: kubernetes microservices google-kubernetes-engine

假设我正在使用GCE ingress来处理来自群集外部的流量并终止TLS(https://example.com/api/items),从这里请求被路由到两个services之一仅在群集内可用。到现在为止还挺好。

如果我必须从服务A呼叫服务B,如果我一直走到使用集群的外部IP /域并使用HTTPS(https://example.com/api/user/1)来呼叫服务或者我可以使用内部IP怎么办?服务和使用HTTP(http://serviceb/api/user/1)?我是否必须加密数据,或者只要它不离开私有k8s网络,它是否“安全”?

如果我想拥有只能从群集中访问的“内部”端点怎么办?当我总是使用外部https-url时,每个人都可以访问这些端点。直接调用服务,我可以做http://serviceb/internal/info/abc

1 个答案:

答案 0 :(得分:9)

  

如果我必须从服务A呼叫服务B,如果我一直走到使用群集的外部IP /域并使用HTTPS(https://example.com/api/user/1)来呼叫服务,或者我可以使用服务的内部IP并使用HTTP(http://serviceb/api/user/1)?

如果您需要使用API​​ Gateway提供的功能(身份验证,缓存,高可用性,负载平衡),则为YES,否则为DON' T.面向外部的API应仅包含外部客户端(来自群集外部)使用的端点。

  

我是否必须加密数据,或者它是否安全"只要它不离开私人k8s网络?

"安全"是一个非常相对的词,我相信没有100%安全的网络。你应该平衡概率"某人"或"某事"如果发生这种情况,嗅探来自网络的数据以及它对您的业务的影响

如果这对您有所帮助:对于我曾为之工作的任何项目(或者我从我认识的人那里听到),容器/服务之间的专用网络已经绰绰有余了。

  

如果我想要"内部"该怎么办?只能从群集中访问的端点 - 当我总是使用外部https-url时,每个人都可以访问这些端点。

正是我在答案之上所说的话。将这些端点保留在集群内部使得它们无法通过外部设计进行访问。

最后一件事,为许多内部服务管理大量SSL证书是一种痛苦,如果没有必要,应该避免。