目标:探讨 Kuberntes Ingress 和 Openshift Router 异同
前提:对Kubernetes 及 Openshift 有了解
背景: Kubernetes Ingress 及Openshift Route都可以以路由的方式暴露服务(Service),便于外界访问集群内部资源,同时也提供负载均衡。

Kubernetes Ingress 简述:

Kubernetes Ingress 是一种 Kubernetes 资源,用于管理和配置将外部流量引导到集群内部服务的方式。它充当了集群和外部网络之间的入口点,可以轻松管理流量路由和负载均衡。Ingress 提供了一种规范的方法来定义应用程序的路由规则,包括主机名和路径匹配,以便根据不同的规则将请求路由到不同的后端服务。
具体请参考 Kubernetes文档

Openshift Route

OpenShift Route 是 OpenShift 容器平台的一项关键功能,用于管理应用程序的外部访问。它提供了集成的安全性、负载均衡、域名路由和TLS认证等功能。通过配置 Route,可以将外部流量引导到集群中的应用程序,实现强大的流量控制和安全性,同时简化了应用程序的公开和管理。Route充分利用了OpenShift的生态系统,支持OAuth、角色授权等特性,提供了灵活的路由策略,是在容器编排环境中轻松管理应用程序访问的关键工具。
具体请参考 Openshift官网

工作原理

Kubernetes Ingress 工作原理

  1. Ingress 资源创建: 首先,创建一个 Kubernetes Ingress 资源。这个资源定义了如何将外部流量引导到集群内部的服务。
  2. Ingress Controller: Kubernetes 集群中运行一个或多个 Ingress Controllers,它们是实际处理 Ingress 配置的组件。
  3. Ingress 路由规则: Ingress Controller 解析 Ingress 资源中定义的路由规则,包括主机名和路径匹配。
  4. 负载均衡和路由: Ingress Controller 使用负载均衡机制将传入的请求路由到相应的后端服务(Pod)。这涉及到 Ingress 配置中的主机名和路径匹配。
  5. SSL 认证: Ingress Controller 可以实现 SSL/TLS 认证,以保护传输的数据。
  6. 高级路由和安全性: 一些 Ingress Controllers 提供高级的路由策略和安全性特性,如基于标签选择服务、认证和授权等。
    kuberntes ingress 和 openshift router 异同_主机名

OpenShift Route 工作原理

  1. Route 对象创建: 首先,OpenShift 集群管理员或开发者创建一个 Route 对象。这个对象定义了如何将外部流量引导到集群内部的服务。
  2. 路由规则配置: Route 可以配置主机名(例如,myapp.example.com)和路径规则,以确定如何匹配传入的请求。还可以配置 TLS 认证来提供加密。
  3. OpenShift Router: OpenShift 集群中的 Router 组件负责处理 Route 配置。Router 是 OpenShift 的入口点,负责接收传入的流量。
  4. 负载均衡和路由: Router 使用负载均衡机制将传入的请求路由到相应的后端服务(Pod)。这涉及到 Route 配置中的主机名和路径匹配。
  5. 安全性: Route 可以集成 OpenShift 的安全性特性,如 OAuth 和角色授权,以确保只有授权的用户或服务可以访问应用程序。
  6. 流量管理: Router 支持权重分配、负载均衡策略和其他高级流量管理功能,以提高性能和可用性。

kuberntes ingress 和 openshift router 异同_主机名_02

使用方法

Kubernetes Ingress

你必须拥有一个 Ingress 控制器 才能满足 Ingress 的要求。仅创建 Ingress 资源本身没有任何效果。
你可能需要部署一个 Ingress 控制器,例如 ingress-nginx。 你可以从许多 Ingress 控制器中进行选择。
理想情况下,所有 Ingress 控制器都应遵从参考规范。 但实际上,各个 Ingress 控制器操作略有不同。
本次就以 higress 为例,本文未涉及用法可以参考  higress官网

  1. 随便创建一个pod
复制
apiVersion: v1
kind: Pod
metadata:
  name: httpd-pod
  labels:
    app: httpd
spec:
  containers:
    - name: httpd-container
      image: httpd:latest
      ports:
        - containerPort: 80
# 创建pod
kubectl apply -f httpd-pod.yaml

      
      
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  1. 创建一个service
复制
apiVersion: v1
kind: Service
metadata:
  name: httpd-service
spec:
  selector:
    app: httpd
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80