问题描述
是Kubernetes的新手,他想要公开暴露一个应用程序。他使用的是Scaleway作为云提供商。他了解到有多种方法可以实现这个目标。
1. 创建一个Ingress Controller:通过这种方式,Ingress会公开一个节点的IP地址和端口,并将所有请求转发到所附加的服务。用户将DNS记录指向公开的IP地址。使用cert-manager创建SSL证书,并且似乎与Ingress Controller很好地配合使用,这意味着证书会自动创建并附加到Ingress资源上。当集群具有可以自动删除/创建的多个节点时,如何管理DNS记录?
2. 创建一个Load Balancer类型的服务:这将创建一个由云提供商提供的负载均衡器,该负载均衡器在内部配置为将所有流量路由到集群中的所有节点。通过这种方法,用户可以将DNS记录指向负载均衡器IP,负载均衡器可以配置为保留公共IP,这意味着集群节点的添加/删除不会影响DNS记录。但是,用户不知道如何使用这种方法添加SSL证书。
用户想知道这两种方法中哪种最适合公开暴露应用程序,同时考虑到DNS管理和SSL证书。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1:使用Ingress Controller和Load Balancer
根据云提供商的支持人员、文档和其他云提供商的做法,我认为这两种方法都是需要的。
为了简化DNS区域管理,您需要以某种方式公开所有集群节点,而这种方式就是使用外部负载均衡器。
负载均衡器确保始终指向所有集群节点,即使节点本身发生更改(添加/删除)。这样,您可以通过将DNS区域指向负载均衡器IP来更新所需的域的DNS记录。当然,您需要确保此IP不会更改。
现在,有了一种将外部流量从自定义域路由到Kubernetes集群的方法,您需要知道将该流量重定向到何处。
这就是Ingress Controller的作用。
使用Ingress Controller,您可以根据主机名(例如)转发流量,以便到达所需的服务。
比较两个云提供商及其公开暴露应用程序的方法,我发现它们都使用外部负载均衡器以及Ingress Controller:
1. Scaleway:为了通过负载均衡器公开所有集群节点,您需要创建一个具有以下配置的服务:
spec:
type: LoadBalancer
ports:
- port: 80
name: http
targetPort: 80
- port: 443
name: https
targetPort: 443
targetPort
必须是这些确切的端口。
创建负载均衡器后,您可以使用其IP地址作为DNS记录。
现在,您可以创建Ingress Controller来将流量转发到服务。
2. AWS:您可以创建一个Ingress Controller,它本身会创建一个AWS应用程序负载均衡器(ALB)。
ALB没有IP地址,而是依赖于CNAME记录。
它们都使用外部负载均衡器将流量转发到集群,并使用Ingress Controller将流量重定向到服务。
我认为这是在Kubernetes集群后面公开暴露应用程序的方式。
方案2:使用Istio和VirtualService
如果您考虑使用Istio作为服务网格,您可以使用VirtualService来通过负载均衡器公开DNS。
请注意,使用Istio和VirtualService可能会增加复杂性,并且需要对Istio有一定的了解。
总结
在Kubernetes中,要公开暴露应用程序,您可以使用Ingress Controller和Load Balancer的组合。通过外部负载均衡器,您可以将流量路由到集群中的所有节点,并使用Ingress Controller将流量转发到所需的服务。这样,您可以通过更新DNS记录来管理域名,并使用SSL证书来保护流量。如果您考虑使用Istio作为服务网格,您可以使用VirtualService来公开DNS。请根据您的需求选择适合您的方法。