首页 > 其他分享 >kuberntes ingress 和 openshift router 异同

kuberntes ingress 和 openshift router 异同

时间:2023-10-23 11:31:40浏览次数:42  
标签:httpd ingress Kubernetes Route kuberntes Ingress router OpenShift 路由

目标:探讨 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 提供高级的路由策略和安全性特性,如基于标签选择服务、认证和授权等。 image.png

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 支持权重分配、负载均衡策略和其他高级流量管理功能,以提高性能和可用性。

image.png

使用方法

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. 创建一个service
apiVersion: v1
kind: Service
metadata:
  name: httpd-service
spec:
  selector:
    app: httpd
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

kubectl apply -f httpd-service.yaml

目前我们拥有了一个httpd pod 和一个service,通过labels: app: httpd 绑定在一起。 3. 安装ingress controller

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

或者

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
  1. 创建ingress 配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: httpd-ingress
spec:
  rules:
    - host: httpd.example.com  # 域名
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: httpd-service 
                port:
                  number: 80
# 配置生效
kubectl apply -f httpd-ingress.yaml

再随便一个节点访问URL httpd.example.com 可以看到 httpd的欢迎信息。

OpenShift Route

Openshift 支持两种方式创建Route资源,CLI 及 WEB。

  1. 先创建pod和service,参考上面的pod和service即可,不赘述。
  2. 创建 Openshift route资源配置

CLI

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: httpd-route
spec:
  to:
    kind: Service
    name: httpd-service
    weight: 100
  port:
    targetPort: 80
  tls:
    termination: edge
  wildcardPolicy: None

# 配置生效
oc create -f httpd-route.yaml
  1. 在节点访问 http://httpd-route-default.apps.<集群名称>.<集群基域> 即可

WEB

在Openshift Console可以 简单直接的创建出route资源,如下图 image.png 填好必要信息,在节点访问。

总结

Kubernetes Ingress 和 OpenShift Route 有很多相似之处,因为它们都是用于路由流量到 Kubernetes 集群内部服务的资源。

  • 路由流量到服务: 无论是 Kubernetes Ingress 还是 OpenShift Route,它们的主要目标都是将外部流量路由到集群内部的服务(Service)。
  • 负载均衡: 两者都支持负载均衡,可以将传入的请求分发到多个后端 Pod,从而提高可伸缩性和可用性。
  • 主机和路径匹配: Kubernetes Ingress 和 OpenShift Route 都支持主机名和路径匹配,可以根据不同的主机名或 URL 路径将请求路由到不同的服务。
  • TLS 支持: 两者都支持 TLS 认证,可以在 Ingress 或 Route 中配置 SSL/TLS 证书,以加密传输的数据。
  • 流量控制: Kubernetes Ingress 和 OpenShift Route 都支持高级流量控制和策略,例如基于标签选择服务、认证、授权和流量重定向。

尽管有这些相似之处,还是有一些重要的区别:

  • 生态系统: Kubernetes Ingress 是 Kubernetes 的原生资源,而 OpenShift Route 是 OpenShift 的特定资源。它们通常用于不同的容器编排平台。
  • 配置语法: Kubernetes Ingress 和 OpenShift Route 的配置语法略有不同。Kubernetes Ingress 使用标准的 Kubernetes YAML 格式,而 OpenShift Route 使用 OpenShift 的自定义资源定义(CRD)。
  • 安全性特性: OpenShift Route 在 OpenShift 平台上提供了额外的安全性特性,如 OAuth 和角色授权,以满足 OpenShift 生态系统的要求。

综上所述,Kubernetes Ingress 和 OpenShift Route 是强大的工具,可根据特定平台和需求选择使用。无论选择哪种工具,都能够帮助管理和控制应用程序的外部访问,以确保应用程序在云原生环境中高效运行。

参考

互联网永远不会忘记,但人会。

标签:httpd,ingress,Kubernetes,Route,kuberntes,Ingress,router,OpenShift,路由
From: https://blog.51cto.com/mahmut/7932433

相关文章

  • ingressgateway访问授权
    当externalTrafficPolicy设置为Local时,Istio会保留外部客户端的原始源IP地址,在IngressGateway层面进行IP访问控制时,你可以基于客户端的源IP地址来定义访问规则。kubectlpatchsvcistio-ingressgateway-nistio-system-p'{"spec":{"externalTrafficPolicy":"L......
  • 405-503 搞懂Kubernetes调度 (DNS ingress NodeSelector NodeAffinity)4.5-5.3
    一、Kubernetes里的DNSK8S集群默认使用CoreDNS作为DNS服务:#kubectlgetsvc-nkube-system|grepdnskube-dnsClusterIP10.96.0.10<none>53/UDP,53/TCP,9153/TCP24d测试在node-1-231安装bind-utilsyuminstall-ybind-utils解析外网域名dig@10......
  • import { useRouter } from 'next/router'; 在非hooks 文件或组件中使用
    将 import{useRouter}from'next/router';改为 importRouterfrom"next/router";使用: Router.push('/');原来使用 import{useRouter}from'next/router';会导致报错如下  ......
  • Go 布道者框架beego的Router 功能详解
    Beego是一个用于构建Web应用程序和后端服务的Go语言框架。它提供了一整套功能,包括路由、模型、视图、会话管理等。0go框架beego现在被淘汰了吗?2016年提出的这个问题,由于当时自己刚入门学习go,就想找一个快速入门的框架学习使用,所以提出了这个很无脑的问题,在此,也向框架作者表......
  • vue进行跳转之后出现Cannot read properties of undefined (reading 'router') TypeEr
    问题描述使用router进行页面跳转时,就出现了这样的问题:也就是这里出现了问题:问题解决本来是按照网上的教程:const_this=this;但是,但是,我本来就是用的这种方法呀~然后就打算直接在这个界面引用:importrouterfrom'@/router'router.push('/one');里面引用的跳转页面......
  • python3的模块FastAPI,APIRouter
    FastAPI将依赖项的值从include_router传递给路由FastAPI依赖项和include_router在FastAPI中,依赖项是一种重要的机制,用于处理从请求到响应的整个过程中所需的各种依赖关系,例如数据库连接、身份验证等。依赖项可以被注入到请求处理函数中,并在执行时提供所需的值。在FastAPI中,我......
  • router-link:导航链接 / 声明式导航
    vue-router提供了一个全局组件router-link(取代a标签)router-link本质还是a标签router-link功能:①能跳转,配置to属性指定路径(必须),本质还是a标签,to无需#②能高亮,默认就会提供高亮类名,可以直接设置高亮样式 router-link会自动给当前导航添加两个类名:router-li......
  • vite.config.js base 与 vue-router base
    vite.config.jsbase决定了打包后,资源引用的前缀base:'/hlw/'linkref='/hlw/assets'打包后的dist要放到/hlw路径下base的值与process.env.BASE_URL、import.meta.env.BASE_URL一致vuerouter的base决定了,多页面的访问路径当vite.config.js与router中的base......
  • 使用vue-router添加动态路由时遇到的坑
    在开发后台管理的时候,用户登录时需要根据权限来分配路由,这时候可以在路由守卫里通过router.addRoute()方法动态添加路由。importrouterfrom'./router'importstorefrom'./store'importstoragefrom'@/utils/storage'import{asyncRoute}from"@/router/routers";......
  • Vue-router、localStorange
    Vue-Router的使用作用: 借助于router可以实现单页面组件之间的跳转this.router的一些使用方法:this.$router.push(path):相当于点击路由链接(可以返回到当前路由界面)this.$router.replace(path):用新路由替换当前路由(不可以返回到当前路由界面)this.$router.......