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 控制器的定义。不同的控制器可能会有不同的路径匹配方式。