我是 kubernetes 和 openshift 的新手(来自 docker swarm world(,我在处理一些 kubernetes 和 openshift 文档时遇到了麻烦,尤其是与路由和服务相关的文档。我一直在寻找如何在外部公开容器的副本集,我发现 kubernetes 文档使用服务来公开 pod,而 openshift 使用路由。谁能向我解释一下差异?
使用的工具只有细微的差异。OpenShift 是一个 Kubernetes 发行版,这意味着它是一个自以为是的预选组件的集合。因此,对于入口,OpenShift使用HAProxy将(HTTP(流量引入集群。其他 Kubernetes 发行版可能使用 NGINX 入口控制器或类似的东西。
因此,Services
用于对群集内的流量进行负载平衡。因此,当您创建ReplicaSet
时,您将运行多个 Pod。要与这些 Pod "对话",您通常会创建一个Service
。该Service
将在您的 Pod 之间均匀分配流量。
因此,为了将HTTP(S(流量从外部传输到您的Service
,OpenShift使用Routes
(在其他Kubernetes发行版中Ingress
(:
+-----+
+-->+ Pod |
+-------+ +---------+ | +-----+
Traffic--->+ Route +------>+ Service +--+-->+ Pod |
+-------+ +---------+ | +-----+
+-->+ Pod |
+-----+
因此,若要向外界公开应用程序,通常使用oc create service
创建内部Service
,然后使用oc expose
创建Route
:
# Create a new ClusterIP service named myservice
oc create service clusterip myservice --tcp=8080:8080
oc expose service myservice
OCP中的"Routes"
不能与K8S"Services"
进行比较,而是与K8S"Ingress"
进行比较
Routes
和Ingress
之间的比较在这里
有关如何在群集外部公开OCP中的"服务"的文档在这里
早在 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识别,并由路由器翻译/实现。这是朝着与为 Kubernetes 准备的配置兼容迈出的一大步,现在可以在 OpenShift 上启动而无需任何修改。