【K8s】Kubernetes 服务发现之 Ingress 进阶

2024-09-02 12:46:02 浏览数 (3)

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我

Ingress 进阶使用(示例)

1、Ingress 实现重定向

该功能等价于 Nginx 配置中的 return 语句。

代码语言:javascript复制
...
kind: Ingress
metadata:
  annotations:
    # 当客户端请求的 path 匹配到时,强制重定向至指定地址
    nginx.ingress.kubernetes.io/permanent-redirect: http://demo.com
    # 指定重定向状态码
    nginx.ingress.kubernetes.io/permanent-redirect-code: "301"
    # 当客户端请求的 path 匹配到时,重定向至 HTTPS
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    # 不管客户端请求的 path 是否匹配到,强制重定向至 HTTPS
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
...

2、Ingress 实现路由跳转

该功能等价于 Nginx 配置中的 rewrite 语句。

代码语言:javascript复制
...
kind: Ingress
metadata:
  annotations:
    # 当客户端请求的 path 匹配到时,跳转至指定路由,$2 代表第二个括号的占位符
    nginx.ingress.kubernetes.io/rewrite-target: /$2
...
spec:
...
       /api(/|$)(.*)
...

3、Ingress 实现自定义配置

代码语言:javascript复制
...
kind: Ingress
metadata:
  annotations:
    # 插入 location 块配置片段
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /api/($/.*) /$1 break ;
    # 插入 server 块配置片段
    nginx.ingress.kubernetes.io/server-snippet: |
      server_name demo.com ;
...

4、Ingress 实现 CORS

代码语言:javascript复制
...
kind: Ingress
metadata:
  annotations:
    # 允许 CORS
    nginx.ingress.kubernetes.io/enable-cors: "true"
    # 指定允许的请求源,默认为 *
    nginx.ingress.kubernetes.io/cors-allow-origin: "http://demo.com"
    # 指定允许的请求方法
    nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"
    # 指定允许的请求头
    nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,X-LANG,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Api-Key,X-Device-Id,Access-Control-Allow-Origin"
    # 指定允许传递凭证
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
...

5、Ingress 实现限流

代码语言:javascript复制
...
kind: Ingress
metadata:
  annotations:
    # 单个 IP 地址允许的并发连接数。超出此限制时,将返回 503 错误
    nginx.ingress.kubernetes.io/limit-connections: "100"
    # 速率限制的放大系数,默认值为 5(充当乘数)
    nginx.ingress.kubernetes.io/limit-burst-multiplier: "5"
    # 单个 IP 地址每秒钟接受的请求数
    nginx.ingress.kubernetes.io/limit-rps: "100"
    # 限制发送给后端服务的发送速率(千字节数/秒),0 为禁用速率限制
    nginx.ingress.kubernetes.io/limit-rate: "0"
    # 从速率限制中排除的源 IP 范围
    nginx.ingress.kubernetes.io/limit-whitelist: "xx.xx.xx.xx/xx, ..."
...

Ingress 配置注意事项

  • Ingress 规则是基于路径(path)匹配的,必须确保路径定义清晰,避免重叠或冲突
  • Ingress 规则若不配置 host 字段,则匹配任意未知域名和 IP 地址
  • Ingress 规则若配置有 host 字段,则只能配置并匹配域名
  • Ingress 对象的 apiVersion 必须与 Kubernetes 集群的版本兼容,即需要确定 Kubernetes 集群是否支持 networking.k8s.io/v1 或 extensions/v1beta1
  • 若是 HTTPS 协议访问,建议将 SSL 证书配置在外部 F5 设备或者负载均衡设备上,完成 HTTPS 请求的拆包、解包,并将访问请求转发至后端服务器的 80 端口

0 人点赞