k8s Ingress实现流量路由规则控制的定义格式类型

 更新时间:2023年04月10日 08:39:51   作者:路由器没有路  
这篇文章主要为大家介绍了k8s Ingress 实现流量路由规则控制的定义格式及类型详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

在 Kubernetes 中,Ingress 是一个非常重要的概念。它可以将外部流量路由到 Kubernetes 集群内的不同服务。

Ingress 可以让你更加方便地管理 HTTP 和 HTTPS 流量,并且可以配置负载均衡、SSL 证书等功能。本文将会介绍 Ingress 的定义、类型、更新、以及相关的控制器和类别。

什么是 Ingress

通常情况下,service 和 pod 的 IP 仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到 service 在 Node 上暴露的 NodePort 上,然后再由 kube-proxy 通过边缘路由器 (edge router) 将其转发给相关的 Pod 或者丢弃。

Ingress 是 Kubernetes 的一个 API 对象,它定义了如何将外部流量路由到 Kubernetes 集群内的不同服务。它可以通过 HTTP 和 HTTPS 协议进行流量路由,并且支持域名和路径的匹配。

Ingress 是一个非常强大的功能,可以让你更加方便地管理流量,并且可以轻松实现负载均衡、SSL 证书等功能。

Ingress 的定义格式

Ingress 的定义格式如下:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-name
  annotations:
    key: value
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /path
            backend:
              serviceName: service-name
              servicePort: service-port

其中,apiVersion字段表示 Ingress 对象的 API 版本,kind字段表示对象的类型,metadata字段包含了 Ingress 对象的元数据,例如对象名称和标签等,spec字段则包含了 Ingress 对象的配置信息,例如规则和后端服务等。

Ingress 的类型有哪几种?

Kubernetes 支持多种不同类型的 Ingress,每种类型都有自己的特点和用途。下面是一些常见的 Ingress 类型:

1. Simple fanout

简单的 Fanout Ingress 会将流量路由到指定的多个服务上。它可以通过域名和路径进行匹配,并且支持负载均衡功能。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /service1
        backend:
          serviceName: service1
          servicePort: 80
      - path: /service2
        backend:
          serviceName: service2
          servicePort: 80

2. Name-based virtual hosting

基于名称的虚拟主机 Ingress 会将流量路由到指定的服务上,具体的服务由请求的 Host 头部决定。它可以通过域名进行匹配,并且支持负载均衡和 SSL 证书等功能。

foo.example.com --|                 |-> foo.example.com s1:80
                  | 168.92.133.131  |
bar.example.com --|                 |-> bar.example.com s2:80

下面是一个基于 Host header 路由请求的 Ingress:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-based-virtual-hosting-ingress
spec:
  rules:
  - host: foo.example.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: bar.example.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80

3. Path-based routing

基于路径的路由 Ingress 会将流量路由到指定的服务上,具体的服务由请求的 URL 路径决定。它可以通过路径进行匹配,并且支持负载均衡和 SSL 证书等功能。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: path-based-routing-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /service1
        backend:
          serviceName: service1
          servicePort: 80
      - path: /service2
        backend:
          serviceName: service2
          servicePort: 80

该如何实现更新 Ingress

更新 Ingress 非常简单,只需要修改 Ingress 对象的定义文件,然后执行kubectl apply命令即可。例如,假设我们想要将simple-fanout-ingress的路径/service1修改为/service3,则可以编辑 Ingress 对象的定义文件,然后执行以下命令:

$ kubectl apply -f ingress.yaml

其中,ingress.yaml是 Ingress 对象的定义文件。

更新后:

$ kubectl get ing
NAME      RULE          BACKEND   ADDRESS
test      -                       168.92.133.131
          foo.example.com
          /foo          s1:80
          bar.example.com
          /bar          s2:80

Ingress Controller

Ingress Controller 是一个运行在 Kubernetes 集群内的服务,它可以监听 Kubernetes API 服务器上的 Ingress 对象,并将外部流量路由到 Kubernetes 集群内的不同服务。

每种类型的 Ingress 都需要特定的 Ingress Controller 来处理。例如,简单的 Fanout Ingress 需要使用 Nginx Ingress Controller,而基于名称的虚拟主机 Ingress 则需要使用 Traefik Ingress Controller。

Ingress Class

Ingress Class 是一个可选的字段,它可以让你更加精细地控制 Ingress 对象的路由方式。

每个 Ingress 对象都可以指定一个 Ingress Class,这个 Ingress Class 可以对应不同的 Ingress Controller,并且可以让你更加方便地控制路由方式。

总结

Ingress 是 Kubernetes 中非常重要的一个资源对象,它可以将外部流量路由到 Kubernetes 集群内的不同服务,并且支持多种不同类型的路由方式。

换言之,Ingress 就是为进入集群的请求提供路由规则的集合,可以给 service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由等功能。

以上就是k8s Ingress 实现流量路由规则控制的详细内容,更多关于k8s Ingress 实现流量路由规则控制的资料请关注脚本之家其它相关文章!

相关文章

  • 从小饭馆客流量变大论云原生负载均衡

    从小饭馆客流量变大论云原生负载均衡

    这篇文章主要为大家介绍了从小饭馆客流量变大来讨论云原生负载均衡,为大家做出更生动易懂的云原生解释说明有需要的朋友可以借鉴参考下
    2022-03-03
  • kubernetes k8s入门定义一个Pod

    kubernetes k8s入门定义一个Pod

    这篇文章主要为大家介绍了k8s入门定义一个Pod以及破底的定义内容详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多计步,早日升职加薪
    2022-03-03
  • RFO SIG之openEuler AWS AMI 制作详解

    RFO SIG之openEuler AWS AMI 制作详解

    这篇文章主要为大家介绍了RFO SIG之openEuler AWS AMI 制作详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Rainbond部署组件Statefulset的使用官方文档

    Rainbond部署组件Statefulset的使用官方文档

    这篇文章主要为大家介绍了官方文档Rainbond部署组件Statefulset的使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • 详解Rainbond云原生平台简化Kubernetes业务问题排查

    详解Rainbond云原生平台简化Kubernetes业务问题排查

    这篇文章主要介绍了详解Rainbond云原生平台简化Kubernetes业务问题排查,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • tkestack/gpu-manager在k8s1.23版本之后的使用方法

    tkestack/gpu-manager在k8s1.23版本之后的使用方法

    这篇文章主要介绍了tkestack/gpu-manager在k8s1.23版本之后的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • 自定义资源CRD使用介绍

    自定义资源CRD使用介绍

    这篇文章主要为大家介绍了自定义资源CRD的使用示例介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • k8s service nodePort无法访问的问题解决

    k8s service nodePort无法访问的问题解决

    今天有一个项目做service nodeport转发,结果设置完之后发现外网访问失败,下面这篇文章主要给大家介绍了关于k8s service nodePort无法访问的问题解决,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Kubernetes组件和架构简介

    Kubernetes组件和架构简介

    Kubernetes是google开源的容器编排工具,本质是一组服务器集群,在集群的各个节点上运行程序来进行容器进行管理,最终实现资源管理智能化、自动化,这篇文章主要介绍了Kubernetes组件和架构简介,需要的朋友可以参考下
    2023-09-09
  • Rancher部署配置开源Rainbond云原生应用管理平台

    Rancher部署配置开源Rainbond云原生应用管理平台

    这篇文章主要为大家介绍了Rancher部署配置开源Rainbond云原生应用管理平台,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04

最新评论