从VM迁移到Kubernetes .
我们在多个VM上运行我们的服务 . 服务在多个VM上运行,并且在它们前面有VIP . 客户将访问VIP,VIP将路由流量到服务 . 在这里,我们使用SSL的SSL证书和使用HTTPS的VIP到VIP .
此处,服务将使用JKS文件部署到VM中 . 此JKS文件将具有用于公开HTTPS以及与启用SSL的数据库通信的证书 .
如何在Kubernetes集群中实现相同的功能?需要HTTPS用于VIP和服务,以及从服务到启用SSL的数据库的通信 .
取决于你运行Kubernetes(内部部署,AWS,GKE,GCE等)的平台,你有几种方法可以做到,但我将描述一个适用于所有平台的解决方案 - 带有HTTPS终止的Ingress .
因此,在Kubernetes中,您可以使用Ingress对象提供对集群内应用程序的访问 . 它可以提供负载 balancer ,HTTPS终止,路径路由等 . 在大多数情况下,您可以使用基于Nginx的Ingress控制器 . 此外,如果需要,它还提供TCP负载 balancer 和SSL直通 .
要提供从用户到您的服务的路由,您需要:
将您的应用程序部署为Pods和Service的组合 .
部署Ingress controlle r,它将管理您的Ingress对象 .
为您的证书创建secret .
使用TLS设置创建一个 Ingress 对象,指向您的服务,让Ingress将您的 secret 与您的证书一起使用,如下所示:
Ingress
secret
spec: tls: hosts: - foo.bar.com secretName: foo-secret
foo.bar.com
service
如何在集群内的服务之间进行加密通信 - 您可以使用与 secrets 相同的方案为所有服务提供SSL密钥,并设置服务以使用应用程序的HTTPS endpoints 而不是HTTP . 从技术上讲,它与在没有Kubernetes的安装中使用https upstream相同,但是Nginx的所有配置都将根据您的 Service 和 Ingress 对象配置自动提供 .
secrets
Service
1 回答
取决于你运行Kubernetes(内部部署,AWS,GKE,GCE等)的平台,你有几种方法可以做到,但我将描述一个适用于所有平台的解决方案 - 带有HTTPS终止的Ingress .
因此,在Kubernetes中,您可以使用Ingress对象提供对集群内应用程序的访问 . 它可以提供负载 balancer ,HTTPS终止,路径路由等 . 在大多数情况下,您可以使用基于Nginx的Ingress控制器 . 此外,如果需要,它还提供TCP负载 balancer 和SSL直通 .
要提供从用户到您的服务的路由,您需要:
将您的应用程序部署为Pods和Service的组合 .
部署Ingress controlle r,它将管理您的Ingress对象 .
为您的证书创建secret .
使用TLS设置创建一个
Ingress
对象,指向您的服务,让Ingress将您的secret
与您的证书一起使用,如下所示:spec: tls: hosts: - foo.bar.com secretName: foo-secret
foo.bar.com
地址时,Ingress使用基于FQDN的路由,并使用service
对象在您的客户端和群集中的pod之间提供HTTPS连接,该对象知道您的pod的确切位置 . 你可以阅读它的工作原理here和here .如何在集群内的服务之间进行加密通信 - 您可以使用与
secrets
相同的方案为所有服务提供SSL密钥,并设置服务以使用应用程序的HTTPS endpoints 而不是HTTP . 从技术上讲,它与在没有Kubernetes的安装中使用https upstream相同,但是Nginx的所有配置都将根据您的Service
和Ingress
对象配置自动提供 .