99精品人妻无码专区在线视频你的位置:最近2019中文字幕在线高清 > 99精品人妻无码专区在线视频 > APISIX Ingress 高档使用之 Url Rewrite
APISIX Ingress 高档使用之 Url Rewrite

发布日期:2022-06-18 17:01    点击次数:180

  

APISIX Ingress 高档使用之 Url Rewrite

前边咱们了解了 APISIX Ingress 的基本使用,相似咱们来先容下如何使用 APISIX 来竣事 URL Rewrite 操作,如故往日边测试用过的 Nexus 哄骗为例进行线路,通过 ApisixRoute 对象来树立奇迹路由,对应的资源清单如下所示:

# nexus.yaml apiVersion: apps/v1 kind: Deployment metadata:   name: nexus   labels:     app: nexus spec:   selector:     matchLabels:       app: nexus   template:     metadata:       labels:         app: nexus     spec:       containers:       - image: cnych/nexus:3.20.1         imagePullPolicy: IfNotPresent         name: nexus         ports:         - containerPort: 8081 --- apiVersion: v1 kind: Service metadata:   labels:     app: nexus   name: nexus spec:   ports:   - name: nexusport     port: 8081     targetPort: 8081   selector:     app: nexus --- apiVersion: apisix.apache.org/v2beta2 kind: ApisixRoute metadata:   name: nexus   namespace: default spec:   http:     - name: root       match:         hosts:           - ops.qikqiak.com         paths:           - "/*"       backends:       - serviceName: nexus         servicePort: 8081 

平直创建上头的资源对象即可:

➜ kubectl apply -f nexus.yaml ➜ kubectl get apisixroute NAME    HOSTS                   URIS     AGE nexus   ["ops.qikqiak.com"]   ["/*"]   39s ➜ kubectl get pods -l app=nexus NAME                     READY   STATUS    RESTARTS   AGE nexus-6f78b79d4c-b79r4   1/1     Running   0          48s ➜ kubectl get svc -l app=nexus NAME    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE nexus   ClusterIP   10.102.53.243   <none>        8081/TCP   58s 

部署完成后,咱们凭证 ApisixRoute 对象中的树立,只需要将域名 ops.qikqiak.com 理会到 node2 节点(上头通过 port-forward 披露了 80 端口)即可探听:

url rewrite

相似淌若咫尺需要通过一个子旅途来探听 Nexus 哄骗的话又应该怎么来竣事呢?比如通过 http://ops.qikqiak.com/nexus 来探听咱们的哄骗,领先咱们细目需要修改 ApisixRoute 对象中匹配的 paths 旅途,将其修改为 /nexus:

apiVersion: apisix.apache.org/v2beta2 kind: ApisixRoute metadata:   name: nexus   namespace: default spec:   http:     - name: root       match:         hosts:           - ops.qikqiak.com         paths:           - "/nexus*"       backends:       - serviceName: nexus         servicePort: 8081 

更新后咱们不错通过 http://ops.qikqiak.com/nexus 探听哄骗:

仔细分析发现好多静态资源404了,这是因为咫尺咱们只匹配了 /nexus 的苦求,而咱们的静态资源是 /static 旅途泉源的,天然就匹配不到了,是以就出现了404,是以咱们只需要加上这个 /static 旅途的匹配就不错了,相似更新 ApisixRoute 对象,新增 /static/* 旅途复旧:

apiVersion: apisix.apache.org/v2beta2 kind: ApisixRoute metadata:   name: nexus   namespace: default spec:   http:     - name: root       match:         hosts:           - ops.qikqiak.com         paths:           - "/nexus*"           - "/static/*"       backends:       - serviceName: nexus         servicePort: 8081 

更新后发现固然静态资源不错简单探听了,然则当咱们探听 http://ops.qikqiak.com/nexus 的时刻依然会出现 404 失实。

这是因为咱们这里是将 /nexus 旅途的苦求平直路由到后端奇迹去了,尔后端奇迹莫得对该旅途做任哪里理,是以也等于404的反应了,在之前 ingress-nginx 或者 traefik 中咱们是通过 url 重写来竣事的,而在 APISIX 中相似不错竣事这个处理,高出于在苦求在着实到达上游奇迹之前将苦求的 url 重写到根目次就不错了,а√天堂最新版在线资源这里咱们需要用到 proxy-rewrite 这个插件(需要确保在装配的时刻照旧包含了该插件),proxy-rewrite 是上游代理信息重写插件,复旧对 scheme、uri、host 等信息的重写,该插件可树立的属性如下表所示:

咱们咫尺的需求是但愿将扫数 /nexus 底下的苦求都重写到根旅途 / 底下去,是以咱们应该使用 regex_uri 属性,转发到上游的新 uri 地址, 使用正则抒发式匹配来自客户端的 uri,当匹配告成后使用模板替换转发到上游的 uri, 未匹配告成时将客户端苦求的uri 转发至上游,重新修改后的 ApisixRoute 对象如下所示,99精品人妻无码专区在线视频新增 plugins 属性来树立插件:

apiVersion: apisix.apache.org/v2beta2 kind: ApisixRoute metadata:   name: nexus   namespace: default spec:   http:     - name: root       match:         hosts:           - ops.qikqiak.com         paths:           - "/nexus*"           - "/static/*"       plugins:       - name: proxy-rewrite         enable: true         config:           regex_uri: ["^/nexus(/|$)(.*)", "/$2"]       backends:       - serviceName: nexus         servicePort: 8081 

这里咱们启用一个 proxy-rewrite 插件,何况将扫数 /nexus 旅途的苦求都重写到了 / 跟旅途下,重新更新后再次探听 http://ops.qikqiak.com/nexus 应该就不错简单探听了:

惟有终末一个小问题了,从浏览器鸠合苦求中不错看出咱们莫得去匹配 /service 这个旅途的苦求,只需要树立上该旅途即可,如下所示:

apiVersion: apisix.apache.org/v2beta2 kind: ApisixRoute metadata:   name: nexus   namespace: default spec:   http:     - name: root       match:         hosts:           - ops.qikqiak.com         paths:           - "/nexus*"           - "/static/*"           - "/service/*"       plugins:       - name: proxy-rewrite         enable: true         config:           regex_uri: ["^/nexus(/|$)(.*)", "/$2"]       backends:       - serviceName: nexus         servicePort: 8081 

咫尺重新探听子旅途就完成简单了:

redirect

咫尺当咱们探听 http://ops.qikqiak.com/nexus 或者 http://ops.qikqiak.com/nexus/ 的时刻都不错取得简单的后果,一般来说咱们可能但愿简略融合探听旅途,比如探听 /nexus 子旅途的时刻不错自动跳转到 /nexus/ 以 Splash 收尾的旅途上去。相似要竣事该需求咱们只需要使用一个名为 redirect 的插件即可,该插件是 URI 重定向插件,可树立的属性如下所示:

要竣事咱们的需求平直使用 regex_uri 这个属性即可,只需要去匹配 /nexus 的苦求,然后进行跳转即可,更新 ApisixRoute 对象:

apiVersion: apisix.apache.org/v2beta2 kind: ApisixRoute metadata:   name: nexus   namespace: default spec:   http:     - name: root       match:         hosts:           - ops.qikqiak.com         paths:           - "/nexus*"           - "/static/*"           - "/service/*"       plugins:       - name: proxy-rewrite         enable: true         config:           regex_uri: ["^/nexus(/|$)(.*)", "/$2"]       - name: redirect         enable: true         config:           regex_uri: ["^(/nexus)$", "$1/"]       backends:       - serviceName: nexus         servicePort: 8081 

咱们新启用了一个 redirect 插件,并树立 regex_uri: ["^(/nexus)$", "$1/"],这么当探听 /nexus 的时刻会自动跳转到 /nexus/ 旅途底下去。

相似淌若咱们想要重定向到 https,只需要在该插件底下蛊惑 config.http_to_https=true 即可:

# ... 其他部分概略 - name: redirect   enable: true   config:     http_to_https: true 
tls

通过使用上头的 redirect 插件树立 http_to_https 不错将苦求重定向到 https 上去,然则咱们咫尺并莫得对咱们的 ops.qikqiak.com 树立 https 文凭,这里咱们就需要使用 ApisixTls 对象来进行文凭处分。

咱们先使用 openssl 创建一个自签名的文凭,天然你有正规 CA 机构购买的文凭的话平直将文凭下载下来使用即可:

➜ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=ops.qikqiak.com" 

然后通过 Secret 对象来援用上头创建的文凭文献:

# 要留意文凭文献称号必须是 tls.crt 和 tls.key ➜ kubectl create secret tls ops-tls --cert=tls.crt --key=tls.key 

然后就不错创建一个 ApisixTls 资源对象,援用上头的 Secret 即可:

apiVersion: apisix.apache.org/v1 kind: ApisixTls metadata:   name: ops-tls spec:   hosts:     - ops.qikqiak.com   secret:     name: ops-tls     namespace: default 

同期 APISIX TLS 还不错树立 spec.client,用于进行 mTLS 双向认证的树立。上头的资源对象创建完成后,即可探听 https 奇迹了(chrome 浏览器默许会规模不安全的文凭,只需要在页面上输入 thisisunsafe 即可探听了):

而且当探听 http 的时刻也会自动跳转到 https 上头去,此外咱们还不错集合 cert-manager 来竣事自动化的 https。

圆善的资源对象如下所示:

apiVersion: apisix.apache.org/v2beta2 kind: ApisixRoute metadata:   name: nexus   namespace: default spec:   http:     - name: root       match:         hosts:           - ops.qikqiak.com         paths:           - "/nexus*"           - "/static/*"           - "/service/*"       plugins:       - name: proxy-rewrite         enable: true         config:           regex_uri: ["^/nexus(/|$)(.*)", "/$2"]       - name: redirect         enable: true         config:           regex_uri: ["^(/nexus)$", "$1/"]       - name: redirect         enable: true         config:           http_to_https: true       backends:       - serviceName: nexus         servicePort: 8081 --- apiVersion: apisix.apache.org/v1 kind: ApisixTls metadata:   name: ops-tls spec:   hosts:     - ops.qikqiak.com   secret:     name: ops-tls     namespace: default 

对于 APISIX Ingress 更多高档用法请连接和蔼后续著述。

 



Powered by 最近2019中文字幕在线高清 @2013-2022 RSS地图 HTML地图