k8s -ingress

概念

Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由,ingress能代理集群为内部的网络,将集群外部的HTTP/HTTPS网络请求转发至不同的service,其本质就是创建一个NodePort类型的svc,和一个nginx
k8s -ingress_第1张图片

组成

k8s中的ingress 其实是指的两个部分,第一个为ingress-controller (nginx) , 另一个为Ingress resource (nginx配置)那么到现在,有了 Ingress 和 Ingress Controller,我们是不是就可以完美地管理集群的进出流量了呢?

ingress控制器类似于nginx,Ingress类似于nginx的配置文件。如果只安装nginx,而没有nginx的配置文件,则此nginx将毫无意义;反过来,若只有nginx的配置文件,但没安装nginx,则配置文件无运行载体

IngressClass

最初 Kubernetes 也是这么想的,一个集群里有一个 Ingress Controller,再给它配上许多不同的 Ingress 规则,应该就可以解决请求的路由和分发问题了。
但随着 Ingress 在实践中的大量应用,很多用户发现这种用法会带来一些问题,比如:
由于某些原因,项目组需要引入不同的 Ingress Controller,但 Kubernetes 不允许这样做;
Ingress 规则太多,都交给一个 Ingress Controller 处理会让它不堪重负;
多个 Ingress 对象没有很好的逻辑分组方式,管理和维护成本很高;
集群里有不同的租户,他们对 Ingress 的需求差异很大甚至有冲突,无法部署在同一个 Ingress Controller 上。
所以,Kubernetes 就又提出了一个 Ingress Class 的概念,让它插在 Ingress 和 Ingress Controller 中间,作为流量规则和控制器的协调人,解除了 Ingress 和 Ingress Controller 的强绑定关系。
现在,Kubernetes 用户可以转向管理 Ingress Class,用它来定义不同的业务逻辑分组,简化 Ingress 规则的复杂度。比如说,我们可以用 Class A 处理博客流量、Class B 处理短视频流量、Class C 处理购物流量
k8s -ingress_第2张图片

ingress的类型

ingress重写转发路径

文档地址:https://kubernetes.github.io/ingress-nginx/examples/rewrite/

ingress 转发的时候是默认是将匹配的到路径直接转发到对应的svc
也就是说path中设置的前缀是会直接带到svc中去的,比如path为/java
访问www.abc/java 到svc中就是 svcIP:port/java,如果想重写url 比如
www.abc/java 到svc中变成 svcIP:port/就需要使用到注解 nginx.ingress.kubernetes.io/rewrite-target

k8s -ingress_第3张图片

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: rewrite
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - path: /something(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: http-svc
            port: 
              number: 80

效果:

rewrite.bar.com/something rewrites to rewrite.bar.com/
rewrite.bar.com/something/ rewrites to rewrite.bar.com/
rewrite.bar.com/something/new rewrites to rewrite.bar.com/new

你可能感兴趣的:(k8s,kubernetes,容器,云原生)