k8s---使用ingress配置域名轉發時的traefik路徑規則詳解

ingress中traefik的使用方式如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: spark-client-test
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefix
spec:
  rules:
  -
    host: api-beta.test.com
    http:
      paths:
      - path: /api/spark-client-test
        backend:
          serviceName: spark-client-test
          servicePort: 4040

這裏注意traefik.frontend.rule.type的區別:

Path: /products/, /articles/{category}/{id:[0-9]+}: Path 可以添加一個URL路徑的匹配。它接受一個以{}包括起來的爲空或更多url變量的模版。

PathStrip: /products/ 和 Path 相同,但從請求的URL路徑中去掉的給定的前綴。

PathStripRegex: /articles/{category}/{id:[0-9]+} Match exact path and strip off the path prior to forwarding the request to the backend. It accepts a sequence of literal and regular expression paths.

PathPrefix: /products/, /articles/{category}/{id:[0-9]+} PathPrefix 可以添加一個URL路徑前綴的匹配。它匹配給定模版中的完整URL路徑前綴。

PathPrefixStrip: /products/ 和 PathPrefix 相同,但從請求的URL路徑中去掉的給定的前綴。

PathPrefixStripRegex: /articles/{category}/{id:[0-9]+} Match request prefix path and strip off the path prefix prior to forwarding the request to the backend. It accepts a sequence of literal and regular expression prefix paths. Starting with Traefik 1.3, the stripped prefix path will be available in the X-Forwarded-Prefix header.

也就是說

Path 和 PathPrefix 使用在 我們的web 服務中本身時帶有路由的。

比如 在web服務 本機 訪問 使用的 鏈接時 : localhost:4040/api/spark-client-test

則配置如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: spark-client-test
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefix
spec:
  rules:
  -
    host: api-beta.test.com
    http:
      paths:
      - path: /api/spark-client-test
        backend:
          serviceName: spark-client-test
          servicePort: 4040

在瀏覽器中訪問使用 api-beta.test.com/api/spark-client-test 就可以對應訪問到。

如果我們使用PathPrefixStrip參數,訪問 api-beta.test.com/api/spark-client-test 時,會把 /api/spark-client-test去掉, 實際上訪問的時 api-beta.test.com,也就是對應到 localhost:4040 。

根據這樣的特性 我們可以根據 自己的 需求來選用 使用 PathPrefix 還是 PathPrefixStrip。

如果我們是想訪問到 沒有路徑的入口 比如 localhost:4040 這種類型,則使用PathPrefixStrip,訪問的時候會忽略到我們設置的path

如果我們是想訪問到 有路徑的入口 比如 localhost:4040/api/spark-client-test 這種類型,則使用PathPrefix,訪問的時候會帶上到我們設置的path

具體例子可以參考

hadoop組件—spark實戰----spark on k8s模式k8s原生方式spark2.4.4 通過web UI界面查看任務運行情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章