K8S traffic ingress rewrite 規則

需求如下:

域名 service
www.baidu.com/authorize saas-jcpt-saas-uc-authorize-core-tomcat-online

分析:

1.要到ingress,所以前面不能去掉authorize

2.需要在ingress上配置rewrite

配置

www.baidu.com和saas-jcpt-saas-uc-authorize-core-tomcat-online這兩個在不同的命名空間,所以需要在saas-jcpt-tomcat-online下創建一個新的ingress,配置如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: public-fe-n-saas-uc-node-online-ingress
namespace: saas-jcpt-tomcat-online
annotations:
traefik.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: www.baidu.com
http:
paths:
- backend:
serviceName: saas-jcpt-saas-uc-authorize-core-tomcat-online
servicePort: 8080
path: /authorize
status:
loadBalancer: {}

注意一個小坑:

如下需求:

域名 service

www.abc.com/aaa/ saas-jcpt-saas-uc-authorize-core-tomcat-online/bbb/

我們習慣的寫法可能如下:


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: public-fe-n-saas-uc-node-online-ingress
  namespace: saas-jcpt-tomcat-online
  annotations:
    traefik.ingress.kubernetes.io/rewrite-target: /bbb/
spec:
  rules:
  - host: www.abc.com
    http:
      paths:
      - backend:
          serviceName: saas-jcpt-saas-uc-authorize-core-tomcat-online
          servicePort: 8080
        path: /aaa/
status:
  loadBalancer: {}

這個時候我們訪問http://www.abc.com/aaa/xxx,我們發會現404,容器上抓包發現實際調用的URL爲:saas-jcpt-saas-uc-authorize-core-tomcat-online/bbbxxx,中間的/沒有了。

同時把path及traefik.ingress.kubernetes.io/rewrite-target最後的/去掉,問題可解決:


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: public-fe-n-saas-uc-node-online-ingress
  namespace: saas-jcpt-tomcat-online
  annotations:
    traefik.ingress.kubernetes.io/rewrite-target: /bbb
spec:
  rules:
  - host: www.abc.com
    http:
      paths:
      - backend:
          serviceName: saas-jcpt-saas-uc-authorize-core-tomcat-online
          servicePort: 8080
        path: /aaa
status:
  loadBalancer: {}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章