以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!
目录
一、官方文档
Ingress Controllers | Kubernetes
Command line arguments - Ingress-Nginx Controller
ConfigMap - Ingress-Nginx Controller
二、Ingress 进阶使用(示例)
1、Ingress 实现重定向
该功能等价于 Nginx 配置中的 return 语句。
...
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 语句。
...
kind: Ingress
metadata:
annotations:
# 当客户端请求的 path 匹配到时,跳转至指定路由,$2 代表第二个括号的占位符
nginx.ingress.kubernetes.io/rewrite-target: /$2
...
spec:
...
/api(/|$)(.*)
...
3、Ingress 实现自定义配置
...
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
CORS(跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了其本身以外的其它 origin(域、协议和端口),使得浏览器可以访问加载这些资源。
...
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 实现限流
...
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 端口