rancher+kubernetes负载均衡根据路径路由服务
一、注意(最大的坑)
1、从0.22.0版开始,使用注释的入口定义nginx.ingress.kubernetes.io/rewrite-target与先前版本不向后兼容。在版本0.22.0及更高版本中,必须在捕获组中显式定义请求URI中需要传递到重写路径的任何子字符串。
2、捕获组保存在编号占位符,按时间顺序,形式$1,$2... $n。这些占位符可用作rewrite-target注释中的参数。
3、官方文档链接: https://kubernetes.github.io/ingress-nginx/examples/rewrite/
二、kubernetes Ingress规则配置
注意配置中的:$2 和 something(/|$)(.*)
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: rewrite
namespace: default
spec:
rules:
- host: rewrite.bar.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /something(/|$)(.*)
三、Rancher Ingress规则配置
访问:http:/host/model01/,请求会被发送到web-server-01工作负载中
访问:http:/host/model02/,请求会被发送到web-server-02工作负载中
访问:http:/host/model03/,请求会被发送到web-server-03工作负载中
配置如下:
This example demonstrates how to use the Rewrite annotations
Prerequisites
You will need to make sure your Ingress targets exactly one Ingress controller by specifying the ingress.class annotation, and that you have an ingress controller running in your cluster.
Deployment
Rewriting can be controlled using the following annotations:
Name Description Values nginx.ingress.kubernetes.io/rewrite-target Target URI where the traffic must be redirected string nginx.ingress.kubernetes.io/ssl-redirect Indicates if the location section is accessible SSL only (defaults to True when Ingress contains a Certificate) bool nginx.ingress.kubernetes.io/force-ssl-redirect Forces the redirection to HTTPS even if the Ingress is not TLS Enabled bool nginx.ingress.kubernetes.io/app-root Defines the Application Root that the Controller must redirect if it's in '/' context string nginx.ingress.kubernetes.io/use-regex Indicates if the paths defined on an Ingress use regular expressions bool Examples
Rewrite Target
Attention
Starting in Version 0.22.0, ingress definitions using the annotation
nginx.ingress.kubernetes.io/rewrite-target
are not backwards compatible with previous versions. In Version 0.22.0 and beyond, any substrings within the request URI that need to be passed to the rewritten path must explicitly be defined in a capture group.Note
Captured groups are saved in numbered placeholders, chronologically, in the form
$1
,$2
...$n
. These placeholders can be used as parameters in therewrite-target
annotation.Create an Ingress rule with a rewrite annotation:
$ echo ' apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 name: rewrite namespace: default spec: rules: - host: rewrite.bar.com http: paths: - backend: serviceName: http-svc servicePort: 80 path: /something(/|$)(.*) ' | kubectl create -f -
In this ingress definition, any characters captured by
(.*)
will be assigned to the placeholder$2
, which is then used as a parameter in therewrite-target
annotation.For example, the ingress definition above will result in the following rewrites:
rewrite.bar.com/something
rewrites torewrite.bar.com/
rewrite.bar.com/something/
rewrites torewrite.bar.com/
rewrite.bar.com/something/new
rewrites torewrite.bar.com/new
App Root¶
Create an Ingress rule with a app-root annotation:
$ echo " apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/app-root: /app1 name: approot namespace: default spec: rules: - host: approot.bar.com http: paths: - backend: serviceName: http-svc servicePort: 80 path: / " | kubectl create -f -
Check the rewrite is working
$ curl -I -k http://approot.bar.com/ HTTP/1.1 302 Moved Temporarily Server: nginx/1.11.10 Date: Mon, 13 Mar 2017 14:57:15 GMT Content-Type: text/html Content-Length: 162 Location: http://stickyingress.example.com/app1 Connection: keep-alive
https://kubernetes.github.io/ingress-nginx/examples/rewrite/
相关文章
- Kubernetes-Rbac
- 理解Kubernetes联合鉴权的工作机制
- 快速上手kubernetes——minikube最小实现
- kubernetes基础入门知识点
- Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)
- kubernetes | 存储
- Kubernetes 启用GPU
- Kubernetes核心实战
- 【prometheus】-06 Kubernetes云原生监控之cAdvisor容器资源监控
- Kubernetes kube-proxy详细说明
- 设备集群上的Kubernetes | 系列文章(6)
- “开箱即用” 的 Kubernetes 集群
- 使用 KRAWL 扫描 Kubernetes 错误
- 每周开源点评:Kubernetes 网络、OpenStack Train 以及更多的行业趋势