kebectl ingress 用法【draft】

2020/06/18 k8s

ingress

访问服务的入口。

Service的服务是基于端口的,端口是有限资源,且有产生冲突的场景,一旦服务多起来管理就是个很大的问题 Ingress是K8s的一个入口网关,默认在80/443端口上提供服务。并且可以设置路由转发到集群内部的Service上,用它实现gRPC的转发,可以避免端口管理的问题,同时也实现了端口复用,所有的服务都通过一个入口来对外提供服务。

但是Ingress是基于HTTP的,虽然gRPC也可以是基于HTTP2但是仍然有许多坑会踩到。

Service只支持4层负载均衡,而Ingress有7层功能。

  • ingress是k8s中的一个api对象,一般用yaml配置。作用是定义请求转发的规则,可以理解为配置模板或者配置文件。

  • ingress-controller是具体实现反向代理及负载均衡的程序,通过对ingress中定义的规则进行解析,根据其规则来实现转发。

作用

  1. 基于http-header 的路由

  2. 基于 path 的路由

  3. 单个ingress 的 timeout

  4. 请求速率limit

  5. rewrite 规则

ingress 根据参数拆分服务

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: bigdata
  name: adc-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/server-snippet: |
        set $flag 0;
        if ( $uri = /click) {
          set $flag 1;
        }
        if ( $args ~ project=ios ) {
          set $flag 1$flag;
        }
        if ( $flag = 11 ) {
          rewrite ^/(.*) $uri-ios break;
        }
spec:
  rules:
    - host: walking.sun.com
      http:
        paths:
          - path: /click/google
            backend:
              serviceName: google-srv
              servicePort: 8080
          - path: /click-ios
            backend:
              serviceName: web-ios-srv
              servicePort: 8080
          - path: /click
            backend:
              serviceName: web-srv
              servicePort: 8080
    - host: walking.sun123.com
      http:
        paths:
          - path: /click/google
            backend:
              serviceName: google-srv
              servicePort: 8080
  tls:
    - hosts:
        - walking.sun.com
      secretName: sun.com
    - hosts:
        - walking.sun123.com
      secretName: sun123.com

Search

    Table of Contents