kubernetes vs openshift(路由和服务)

kubernetes vs openshift (routes and services)

我是 kubernetes 和 openshift 的新手(来自 docker swarm world),我在使用一些 kubernetes 和 openshift 文档时遇到了问题,尤其是与 route 服务 。我一直在寻找如何在外部公开一组容器的副本,我找到了 kubernetes documentation uses a service to expose the pod while openshift uses routes。谁能给我解释一下区别?

所使用的工具只有细微差别。 OpenShift 是一个 Kubernetes 发行版,这意味着它是一个自以为是的预选组件的集合。因此,对于 Ingress,OpenShift 使用 HAProxy 将 (HTTP) 流量引入集群。其他 Kubernetes 发行版可能使用 NGINX Ingress Controller 或类似的东西。

所以Services用于集群内的负载均衡流量。因此,当您创建一个 ReplicaSet 时,您将拥有多个 Pods 运行。要 "talk" 到这些 Pods,您通常会创建一个 ServiceService 将在您的 Pods.

之间平均分配流量

因此,为了从外部获取 HTTP(S) 流量到您的 Service,OpenShift 使用 Routes(在其他 Kubernetes 发行版中为 Ingress):

                                            +-----+
                                        +-->+ Pod |
           +-------+       +---------+  |   +-----+
Traffic--->+ Route +------>+ Service +--+-->+ Pod |
           +-------+       +---------+  |   +-----+
                                        +-->+ Pod |
                                            +-----+

因此,为了向外界公开您的应用程序,您通常使用 oc create service 创建一个内部 Service,然后使用 oc expose:[=23 创建一个 Route =]

# Create a new ClusterIP service named myservice
oc create service clusterip myservice --tcp=8080:8080
oc expose service myservice

"Routes"在OCP中不与K8S比较"Services"而是与K8S"Ingress"

RoutesIngressis here

的比较

关于如何在集群外部的 OCP 中公开 "Services" 的文档 is here

早在 Kubernetes 提出 Ingress 之前,Red Hat 就需要在 OpenShift 上为容器 运行 提供自动反向代理解决方案。所以现在在 OpenShift 中我们有一个 Route 对象,它做的工作几乎与 Kubernetes 中的 Ingress 相同。主要区别在于路由由良好的旧 HAproxy 实现,可以由基于 F5 BIG-IP 的商业解决方案取代。然而,在 Kubernetes 上,您有更多选择,因为 Ingress 是一个由多个服务器实现的接口,从最流行的 nginx、traefik、AWS ELB/ALB、GCE、Kong 和其他服务器开始,包括 HAproxy。

所以你可能会问哪个更好?就我个人而言,我认为 OpenShift 中的 HAproxy 更加成熟,尽管没有一些 Ingress 实现那么多的功能。然而,在 Kubernetes 上,您可以使用不同的增强功能——我最喜欢的是与 cert-manager 的集成,它允许您自动管理 SSL 证书。不再需要手动操作来颁发和续订证书,此外,由于与 Letsencrypt 集成,您可以免费使用受信任的 CA!

作为一个有趣的事实,我想提一下,从 OpenShift 3.10 开始,Kubernetes Ingress 对象被 OpenShift 识别,并且 translated/implemented 由...路由器。这是朝着与为 Kubernetes 准备的配置兼容迈出的一大步,现在无需任何修改即可在 OpenShift 上启动。