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

Posted

技术标签:

【中文标题】Kubernetes:我应该使用 HTTPS 在服务之间进行通信吗【英文标题】:Kubernetes: should I use HTTPS to communicate between services 【发布时间】:2018-06-18 11:07:56 【问题描述】:

假设我正在使用 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

【问题讨论】:

问题是你能保证“它不会离开私有 k8s 网络”以应对未来的所有变化吗?胭脂用户不会添加包含专用网络的路径/硬件?我不会打赌,为了规避安全限制,我曾多次成为流氓。 【参考方案1】:

如果我必须从服务 A 调用服务 B,我应该一直使用集群的外部 IP/域并使用 HTTPS (https://example.com/api/user/1) 来调用服务还是可以使用内部 IP服务和使用 HTTP (http://serviceb/api/user/1)?

如果您需要使用 API Gateway 提供的功能(身份验证、缓存、高可用性、负载平衡),请选择“是”,否则不要。面向外部的 API 应仅包含外部客户端(来自集群外部)使用的端点。

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

“安全”是一个非常相对的词,我相信没有 100% 安全的网络。您应该权衡“某人”或“某物”从网络中嗅探数据的概率以及如果发生这种情况对您的业务产生的影响。 p>

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

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

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

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

【讨论】:

您知道在两个本地系统之间设置 https 流量的简单方法吗?这意味着呼叫将是 localservicaA 到 https:localserviceB @Astronaut 简单吗?不。复杂:你可以看看 Service Meshes。 最后我们会尝试走Service Mesh路线,这很难,因为我们没有集群管理员权限,让我们看看我们能走多远。谢谢你的回复

以上是关于Kubernetes:我应该使用 HTTPS 在服务之间进行通信吗的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes CronJob 公网 IP

为什么 Kubernetes 很酷 | Linux 中国

Kubernetes 学习总结(22)—— 应用程序迁移到 Kubernetes 应该注意些什么?

Kubernetes 学习总结(22)—— 应用程序迁移到 Kubernetes 应该注意些什么?

Google Kubernetes Engine:为服务类型启用 HTTPS

k8s应该监控哪些指标及原因