成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Traefik mesh:更簡單的服務網格

運維 系統運維
Traefik mesh不使用任何sidecar模式,其路由處理是通過運行在每個節點的proxy完成。網格控制器也是通過單獨的Pod運行,負責處理代理節點的所有配置分析和部署。

[[395512]]

Traefik mesh是一款輕量級的服務網格,它簡單易行,易于安裝并且易于使用。

Traefik mesh建立在Traefik之上,適合于符合最新網絡接口規范SMI的Kubernetes集群。

Traefik mesh的最大特點就是非侵入性,也就是使用Traefik mesh并不會改變你現有的Kubernetes對象。

非侵入性服務網格

Traefik mesh不使用任何sidecar模式,其路由處理是通過運行在每個節點的proxy完成。網格控制器也是通過單獨的Pod運行,負責處理代理節點的所有配置分析和部署。

使用Traefik mesh之后,其邏輯如下。

Traefik mesh沒有通過sidecar的形式進行流量攔截或者修改,那是怎么實現的呢?

它其實是借助于CoreDNS,它通過修改CoreDNS的少量配置,讓用于允許使用Mesh端點而不是標準的Kubernetes端點,Mesh端點和用于服務并行運行,用戶可以選擇是否使用它。

安裝

  • 前提:
  • Kubernetes 1.11+
  • CoreDNS 1.3+
  • Helm v3

Traefik mesh的安裝很簡單,使用Helm即可實現快速的安裝。

(1)添加Helm倉庫

  1. helm repo add traefik-mesh https://helm.traefik.io/mesh 
  2. helm repo update 

(2)下載Chart包

  1. helm pull traefik-mesh/traefik-mesh 

(3)解壓Chart包

  1. tar xf traefik-mesh-3.0.6.tgz 

Traefik mesh會部署4個服務,它們分別是:

  • controller:Mesh的控制器,負責代理節點的所有配置分析和配置
  • proxy:Mesh的代理,負責處理每個節點的流量代理
  • tracing:跟蹤配置
  • metrics:監控配置

(4)安裝traefik mesh

  1. helm install traefik-mesh . 

traefik mesh需要coredns的配合,主要改動部分如下:

  1. #### Begin Maesh Block 
  2. maesh:53 { 
  3.     errors 
  4.     rewrite continue { 
  5.         name regex ([a-zA-Z0-9-_]*)\.([a-zv0-9-_]*)\.maesh default-{1}-6d61657368-{2}.default.svc.cluster.local 
  6.         answer name default-([a-zA-Z0-9-_]*)-6d61657368-([a-zA-Z0-9-_]*)\.default\.svc\.cluster\.local {1}.{2}.maesh 
  7.     } 
  8.     kubernetes cluster.local in-addr.arpa ip6.arpa { 
  9.         pods insecure 
  10.         upstream 
  11.         fallthrough in-addr.arpa ip6.arpa 
  12.     } 
  13.     forward . /etc/resolv.conf 
  14.     cache 30 
  15.     loop 
  16.     reload 
  17.     loadbalance 
  18. #### End Maesh Block 
  19.  
  20. #### Begin Traefik Mesh Block 
  21. traefik.mesh:53 { 
  22.     errors 
  23.     rewrite continue { 
  24.         name regex ([a-zA-Z0-9-_]*)\.([a-zv0-9-_]*)\.traefik.mesh default-{1}-6d61657368-{2}.default.svc.cluster.local 
  25.         answer name default-([a-zA-Z0-9-_]*)-6d61657368-([a-zA-Z0-9-_]*)\.default\.svc\.cluster\.local {1}.{2}.traefik.mesh 
  26.     } 
  27.     kubernetes cluster.local in-addr.arpa ip6.arpa { 
  28.         pods insecure 
  29.         upstream 
  30.         fallthrough in-addr.arpa ip6.arpa 
  31.     } 
  32.     forward . /etc/resolv.conf 
  33.     cache 30 
  34.     loop 
  35.     reload 
  36.     loadbalance 
  37. #### End Traefik Mesh Block 

如果在部署過程中,coredns報以下錯誤:

  1. plugin/forward: this plugin can only be used once per Server Block 

請檢查coredns的configMap配置,看DNS下是否有兩個forward。

配置

Traefik mesh的配置分為靜態配置和動態配置。

靜態配置

  • 可以手動指定controller鏡像版本和Traefik鏡像版本
  • 可以配置controller和proxies的日志級別和格式
  • 可以配置mesh的模式,默認是HTTP
  • 可以打開tracing功能
  • 可以開啟ACL權限控制功能,這配置了 Traefik 網格以 ACL 模式運行,除非通過 SMI流量目標明確允許,否則禁止所有流量

動態配置

在Kubernetes service上使用annotations 和 SMI 對象可向 Traefik Mesh 提供動態配置。支持的動態配置參數主要有:

  • Traffic-Type
  • Scheme
  • Retry
  • Circuit-Breaker
  • Rate-Limit
  • Traffic-Split
  • Traffic-Targe

這里簡單介紹如何在Kubernetes的service中使用annotations進行配置。

(1)Traffic-Type主要用于配置流量類型,可以配置tcp,udp,http三種類型,如果沒有配置,默認使用http類型,配置如下:

  1. mesh.traefik.io/traffic-type: "http" 

(2)Scheme主要配置請求的協議,可以配置http,https,h2c三種類型,配置如下:

  1. mesh.traefik.io/scheme: "h2c" 

(3)Retry主要配置重試次數,當網絡等異常情況下,會根據用戶配置發起幾次重試,如果還是失敗,則返回失敗,配置如下:

  1. mesh.traefik.io/retry-attempts: "2" 

(4)Cricuit break主要用于配置斷開流量轉發,當系統處于健康的情況下,默認是關閉的,如果系統異常,則會打開,不再轉發流量到異常的系統中,配置如下:

  1. mesh.traefik.io/circuit-breaker-expression: "Expression" 

(5)Rate limit主要用于配置限流,單位是請求次數/秒,可以配置平均請求和突發請求,配置如下:

  1. mesh.traefik.io/ratelimit-average: "100" 
  2. mesh.traefik.io/ratelimit-burst: "200" 

(6)Access control主要用于配置權限控制,可以配置應用允許哪些客戶端訪問。比如定義如下路由:

  1. --- 
  2. apiVersion: specs.smi-spec.io/v1alpha3 
  3. kind: HTTPRouteGroup 
  4. metadata: 
  5.   name: server-routes 
  6.   namespace: server 
  7. spec: 
  8.   matches: 
  9.     - name: api 
  10.       pathRegex: /api 
  11.       methods: ["*"
  12.     - name: metrics 
  13.       pathRegex: /metrics 
  14.       methods: ["GET"

它表示可以通過任何方法訪問/api路徑,只允許使用GET方法訪問/metrics路徑。定義好路由還不夠,在默認情況下,所有的流量都會被拒絕訪問,如果要授予客戶端訪問權限,需要配置TrafficTarget,如下:

  1. --- 
  2. apiVersion: access.smi-spec.io/v1alpha2 
  3. kind: TrafficTarget 
  4. metadata: 
  5.   name: client-server-target 
  6.   namespace: server 
  7. spec: 
  8.   destination: 
  9.     kind: ServiceAccount 
  10.     name: server 
  11.     namespace: server 
  12.   rules: 
  13.     - kind: HTTPRouteGroup 
  14.       name: server-routes 
  15.       matches: 
  16.         - api 
  17.   sources: 
  18.     - kind: ServiceAccount 
  19.       name: client 
  20.       namespace: client 

該配置表示允許運行在client namespace下的具有sa為client的所有pod訪問api路由。

(7)Traffic Split主要用于流量拆分,特別是在做金絲雀發布的時候特別有用,比如如下配置:

  1. apiVersion: split.smi-spec.io/v1alpha3 
  2. kind: TrafficSplit 
  3. metadata: 
  4.   name: server-split 
  5.   namespace: server 
  6. spec: 
  7.   service: server 
  8.   backends: 
  9.     - service: server-v1 
  10.       weight: 80 
  11.     - service: server-v2 
  12.       weight: 20 

其表示將80%的流量轉發到server-v1,20%的流量轉發到server-v2。

例子

上面已經安裝部署好Traefik mesh,下面以官方的例子來進行簡單的測試。(1)部署應用

  1. apiVersion: v1 
  2. kind: Namespace 
  3. metadata: 
  4.   name: whoami 
  5.  
  6. --- 
  7. apiVersion: v1 
  8. kind: ServiceAccount 
  9. metadata: 
  10.   name: whoami-server 
  11.   namespace: whoami 
  12.  
  13. --- 
  14. apiVersion: v1 
  15. kind: ServiceAccount 
  16. metadata: 
  17.   name: whoami-client 
  18.   namespace: whoami 
  19. --- 
  20. kind: Deployment 
  21. apiVersion: apps/v1 
  22. metadata: 
  23.   name: whoami 
  24.   namespace: whoami 
  25. spec: 
  26.   replicas: 2 
  27.   selector: 
  28.     matchLabels: 
  29.       app: whoami 
  30.   template: 
  31.     metadata: 
  32.       labels: 
  33.         app: whoami 
  34.     spec: 
  35.       serviceAccount: whoami-server 
  36.       containers: 
  37.         - name: whoami 
  38.           image: traefik/whoami:v1.6.0 
  39.           imagePullPolicy: IfNotPresent 
  40.  
  41. --- 
  42. kind: Deployment 
  43. apiVersion: apps/v1 
  44. metadata: 
  45.   name: whoami-tcp 
  46.   namespace: whoami 
  47. spec: 
  48.   replicas: 2 
  49.   selector: 
  50.     matchLabels: 
  51.       app: whoami-tcp 
  52.   template: 
  53.     metadata: 
  54.       labels: 
  55.         app: whoami-tcp 
  56.     spec: 
  57.       serviceAccount: whoami-server 
  58.       containers: 
  59.         - name: whoami-tcp 
  60.           image: traefik/whoamitcp:v0.1.0 
  61.           imagePullPolicy: IfNotPresent 
  62.  
  63. --- 
  64. apiVersion: v1 
  65. kind: Service 
  66. metadata: 
  67.   name: whoami 
  68.   namespace: whoami 
  69.   labels: 
  70.     app: whoami 
  71. spec: 
  72.   type: ClusterIP 
  73.   ports: 
  74.     - port: 80 
  75.       name: whoami 
  76.   selector: 
  77.     app: whoami 
  78.  
  79. --- 
  80. apiVersion: v1 
  81. kind: Service 
  82. metadata: 
  83.   name: whoami-tcp 
  84.   namespace: whoami 
  85.   labels: 
  86.     app: whoami-tcp 
  87. spec: 
  88.   type: ClusterIP 
  89.   ports: 
  90.     - port: 8080 
  91.       name: whoami-tcp 
  92.   selector: 
  93.     app: whoami-tcp 
  94.  
  95. --- 
  96. apiVersion: v1 
  97. kind: Pod 
  98. metadata: 
  99.   name: whoami-client 
  100.   namespace: whoami 
  101. spec: 
  102.   serviceAccountName: whoami-client 
  103.   containers: 
  104.     - name: whoami-client 
  105.       image: giantswarm/tiny-tools:3.9 
  106.       command: 
  107.         - "sleep" 
  108.         - "3600" 

上面部署了兩個應用,一個http類型應用,一個是tcp類型應用。

可以通過以下命名查看應用啟動情況kubectl get all -n whoami。

然后可以測試以下應用連通性,如下:

  1. # kubectl -n whoami exec whoami-client -- curl -s whoami.whoami.svc.cluster.local 
  2. Hostname: whoami-576cb59fd-qvnl7 
  3. IP: 127.0.0.1 
  4. IP: 172.16.235.193 
  5. RemoteAddr: 172.16.7.181:33150 
  6. GET / HTTP/1.1 
  7. Host: whoami.whoami.svc.cluster.local 
  8. User-Agent: curl/7.64.0 
  9. Accept: */* 
  10.  
  11. # kubectl -n whoami exec -ti whoami-client -- nc whoami-tcp.whoami.svc.cluster.local 8080 
  12. my data 
  13. Received: my data 
  14.  
  15. Received:  
  16. eee 
  17. Received: eee 
  18. eee 
  19. Received: eee 

如果現在要為上面的服務配置Traefik mesh,只需要更改這兩個服務的service,http類型應用的service加mesh.traefik.io/traffic-type: "http"的annotations,tcp類型應用的service加mesh.traefik.io/traffic-type: "tcp"的annotations,如下:

  1. --- 
  2. apiVersion: v1 
  3. kind: Service 
  4. metadata: 
  5.   name: whoami 
  6.   namespace: whoami 
  7.   labels: 
  8.     app: whoami 
  9.   annotations: 
  10.     mesh.traefik.io/traffic-type: "http" 
  11.     mesh.traefik.io/retry-attempts: "2" 
  12. spec: 
  13.   type: ClusterIP 
  14.   ports: 
  15.     - port: 80 
  16.       name: whoami 
  17.   selector: 
  18.     app: whoami 
  19.  
  20. --- 
  21. apiVersion: v1 
  22. kind: Service 
  23. metadata: 
  24.   name: whoami-tcp 
  25.   namespace: whoami 
  26.   labels: 
  27.     app: whoami-tcp 
  28.   annotations: 
  29.     mesh.traefik.io/traffic-type: "tcp" 
  30. spec: 
  31.   type: ClusterIP 
  32.   ports: 
  33.     - port: 8080 
  34.       name: whoami-tcp 
  35.   selector: 
  36.     app: whoami-tcp 

現在訪問服務,只需將svc.cluster.local改為traefik.mesh即可。比如之前訪問方式如下:

  1. kubectl -n whoami exec whoami-client -- curl -s whoami.whoami.svc.cluster.local 

加了traefik mesh之后,即為:

  1. kubectl -n whoami exec whoami-client -- curl -s whoami.whoami.traefik.mesh 

 當然之前的訪問方式依然存在,用什么樣的方式由用戶自己決定。

腳注

【1】https://traefik.io/traefik/

【2】https://smi-spec.io/

【3】https://coredns.io/

 

責任編輯:姜華 來源: 運維開發故事
相關推薦

2021-06-05 10:16:55

Linkerd 服務網格Kubernetes

2023-11-07 17:32:31

Istiok8s

2023-06-18 19:21:04

技術架構服務網格

2022-11-24 14:21:27

微服務ISTIO

2021-07-21 05:23:06

Linkerd Emoji.voto服務網格

2020-01-07 09:25:02

服務網格微服務Kubernetes

2020-11-15 23:48:57

服務網格微服務網絡網絡技術

2022-05-16 08:00:00

服務網格架構Kuma

2019-08-29 08:00:00

微服務架構服務網格

2020-07-13 07:00:03

微服務服務網格架構

2020-10-21 13:31:53

服務網格開源微服務

2020-08-26 05:45:40

服務網格DevOps開發

2022-08-09 08:00:00

服務網格云原生工具

2022-07-06 08:25:17

服務網格Kubernetes

2021-04-02 22:00:50

服務網格微服務

2022-09-06 10:46:34

服務網格可觀測性微服務

2024-09-27 10:05:02

2021-08-27 11:42:51

Nacos云原生阿里云

2022-08-02 16:37:32

服務網格網絡服務

2020-11-30 13:50:13

服務網格微服務數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黑人巨大精品欧美黑白配亚洲 | 国产免费a视频 | 伊人超碰在线 | 亚洲精品一区二区三区 | 日韩有码一区 | 国产亚洲一区二区三区在线 | 国产欧美一区二区三区另类精品 | 国产综合一区二区 | 黄色成人在线网站 | 国产成人av一区二区三区 | 久久一区二区免费视频 | 久久精品国产一区二区电影 | 日韩一级精品视频在线观看 | www.国产日本 | 日韩av中文 | 日韩欧美国产一区二区 | 精品国产一区二区在线 | 在线亚洲人成电影网站色www | 国产精品国产精品国产专区不卡 | 91超碰caoporn97人人 | 亚州精品成人 | 一级黄色毛片 | 一区二区福利视频 | 亚洲网站在线观看 | 精品91久久久 | 亚洲欧美国产精品一区二区 | 日韩欧美国产精品 | 天天看天天操 | 99热在线播放 | 亚洲高清免费观看 | 四虎在线观看 | 亚洲国产一区二区三区在线观看 | 麻豆视频在线看 | 久久成人一区 | dy天堂 | 国产欧美一区二区三区在线看 | 国产亚洲精品久久久优势 | 成人免费淫片aa视频免费 | 欧美精品一区二区三区在线 | 久久久久国产一区二区三区 | av中文字幕在线观看 |