kubernetes-ingress-nginx-rule的配置-将外部流量路由到集群内部的规则配置

Kubernetes Ingress 资源配置文件主要定义了如何通过 NGINX Ingress 控制器来处理进入集群的 HTTP/HTTPS 流量

apiVersion: networking.k8s.io/v1    #表示这是一个 Ingress 资源,并使用了 Kubernetes 网络 API v1 版本
kind: Ingress     #kind: 定义了资源的类型。在这里是 Ingress,用来管理外部 HTTP 和 HTTPS 流量并将其路由到集群内部的服务。
metadata:
  annotations:  #注释提供了对 NGINX Ingress 控制器的一些额外配置。
    kubernetes.io/ingress.class: nginx    #指定了使用的 Ingress 控制器类。在这里使用的是 nginx Ingress 控制器。通过这个注释,Kubernetes 知道该 Ingress 资源应由 NGINX Ingress 控制器来处理。
    nginx.ingress.kubernetes.io/cors-allow-methods: '*'   #配置允许的 HTTP 方法,用于跨域资源共享(CORS)。'*' 表示允许所有 HTTP 方法。
    nginx.ingress.kubernetes.io/cors-allow-origin: '*'    #配置允许的跨域来源。'*' 表示允许所有来源,可以访问资源。这是一个非常开放的设置,意味着任何域都可以访问该服务。
    nginx.ingress.kubernetes.io/enable-cors: "true"       #启用 CORS(跨域资源共享)。设置为 "true" 表示开启 CORS 功能
    nginx.ingress.kubernetes.io/proxy-body-size: 1024m    #配置允许的请求体的最大大小。1024m 表示允许最大 1024MB 的请求体。这对于上传大文件的应用非常有用。
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30" #配置与上游服务器建立连接的超时时间。30 秒内未建立连接则会超时
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"   #配置从上游服务器读取数据的超时时间。600 秒内未收到数据则会超时。这是读取整个请求的超时时间。
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"   #配置发送数据到上游服务器的超时时间。600 秒内未完成发送数据则会超时
    nginx.ingress.kubernetes.io/send-timeout: "600"         #配置发送数据到客户端的超时时间。600 秒内未完成数据发送则会超时
    nginx.ingress.kubernetes.io/upstream-hash-by: $http_x_forwarded_for #配置上游服务器的哈希负载均衡策略。$http_x_forwarded_for 表示基于请求的 X-Forwarded-For 头部来进行哈希,用于实现基于客户端 IP 的会话保持。
  name: ingress-rule      #Ingress 资源的名称。这个名称在集群中是唯一的,可以用来标识该 Ingress 资源。
  namespace: ops-system   #Ingress 资源所属的命名空间
spec: 
  rules:                  #定义了具体的路由规则,决定了哪些请求会被转发到哪个后端服务。
  - http:                 #http 表示规则适用于 HTTP 请求,定义了 HTTP 路径和对应的后端服务。
      paths:              #paths 是一个列表,每个元素定义了一个路径及其对应的后端服务。
      - backend:                            #指定了处理请求的后端服务 相当于 location xxx {} 指向一个名为 ops-webui-svc 的服务,并指定了服务的端口号 80
          service:                          #定义了将请求转发到哪个 Kubernetes 服务(Service)。指定了 ops-webui-svc,这意味着所有匹配的请求都会被转发到这个服务
            name: ops-webui-svc             #name 是 service 的名称。在 Kubernetes 中,服务是通过名称来标识的。     kubectl get svc -n ops-system
            port:
              number: 80                    #访问的端口
        path: /                             #路由的路径定义了 URL 路径,该路径决定哪些请求应该被转发到指定的后端服务
        pathType: Prefix                    #定义了路径匹配的类型。Prefix 表示路径前缀匹配,也就是说,所有以指定前缀开头的请求路径都会被认为是匹配 /images 会匹配 /images 本身以及所有以 /images 开头的路径

      - backend:    
          service:
            name: ops-webui-svc
            port:
              number: 80
        path: /images
        pathType: Prefix
      - backend:
          service:
            name: ops-webui-svc
            port:
              number: 80
        path: /static
        pathType: Prefix
      - backend:
          service:
            name: ops-webui-svc
            port:
              number: 80
        path: /models
        pathType: Prefix
      - backend:
          service:
            name: ops-webui-svc
            port:
              number: 80
        path: /fonts
        pathType: Prefix
      - backend:
          service:
            name: ops-webui-svc
            port:
              number: 80
        path: /iconfont
        pathType: Prefix
      - backend:
          service:
            name: ops-static-svc
            port:
              number: 80
        path: /diffhtml/css_js
        pathType: Prefix
      - backend:
          service:
            name: ops-static-svc
            port:
              number: 80
        path: /data/key_cfg_compare/export
        pathType: Prefix
      - backend:
          service:
            name: iam-svc
            port:
              number: 8888
        path: /api
        pathType: Prefix
      - backend:
          service:
            name: kong-svc
            port:
              number: 8000
        path: /asset
        pathType: Prefix
      - backend:
          service:
            name: kong-svc
            port:
              number: 8000
        path: /ops-manage/ws
        pathType: Prefix
      - backend:
          service:
            name: kong-svc
            port:
              number: 8000
        path: /ops-manage
        pathType: Prefix
      - backend:
          service:
            name: kong-svc
            port:
              number: 8000
        path: /ops-elink
        pathType: Prefix
      - backend:
          service:
            name: kong-svc
            port:
              number: 8000
        path: /ops-metrics
        pathType: Prefix
      - backend:
          service:
            name: lap-svc
            port:
              number: 8889
        path: /lap
        pathType: Prefix
  tls:                          #添加tls加密证书 https
  - hosts:
    - 需要加密的主机服务所在的ip
    secretName: ops-tls-secret  #证书存放的 secret - kubectl get secret -n ops-system
status:
  loadBalancer:                 #负载均衡
    ingress:
    - ip: 负载均衡的ip

 

对其中pathType 扩展说明

路径匹配类型
pathType 可以有不同的类型,每种类型定义了不同的匹配逻辑:

# 1、Exact:
精确匹配路径,只有完全与指定路径相同的请求才会匹配。
例如,/images 只会匹配 /images,而不会匹配 /images/ 或 /images/photo.jpg。

# 2、Prefix:
前缀匹配,所有以指定前缀开头的路径都会匹配。
例如,/images 会匹配 /images 及所有以 /images 开头的路径。
ImplementationSpecific:


具体实现依赖于 Ingress 控制器的定义。不同的控制器可能会有不同的路径匹配方式。

 

posted @ 2024-06-13 21:06  little小新  阅读(44)  评论(0编辑  收藏  举报