自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Traefik mesh:更簡單的服務(wù)網(wǎng)格

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

[[395512]]

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

Traefik mesh建立在Traefik之上,適合于符合最新網(wǎng)絡(luò)接口規(guī)范SMI的Kubernetes集群。

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

非侵入性服務(wù)網(wǎng)格

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

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

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

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

安裝

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

Traefik mesh的安裝很簡單,使用Helm即可實現(xiàn)快速的安裝。

(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個服務(wù),它們分別是:

  • controller:Mesh的控制器,負(fù)責(zé)代理節(jié)點的所有配置分析和配置
  • proxy:Mesh的代理,負(fù)責(zé)處理每個節(jié)點的流量代理
  • tracing:跟蹤配置
  • metrics:監(jiān)控配置

(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的配置分為靜態(tài)配置和動態(tài)配置。

靜態(tài)配置

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

動態(tài)配置

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

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

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

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

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

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

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

(3)Retry主要配置重試次數(shù),當(dāng)網(wǎng)絡(luò)等異常情況下,會根據(jù)用戶配置發(fā)起幾次重試,如果還是失敗,則返回失敗,配置如下:

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

(4)Cricuit break主要用于配置斷開流量轉(zhuǎn)發(fā),當(dāng)系統(tǒng)處于健康的情況下,默認(rèn)是關(guān)閉的,如果系統(tǒng)異常,則會打開,不再轉(zhuǎn)發(fā)流量到異常的系統(tǒng)中,配置如下:

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

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

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

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

  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路徑。定義好路由還不夠,在默認(rèn)情況下,所有的流量都會被拒絕訪問,如果要授予客戶端訪問權(quán)限,需要配置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主要用于流量拆分,特別是在做金絲雀發(fā)布的時候特別有用,比如如下配置:

  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%的流量轉(zhuǎn)發(fā)到server-v1,20%的流量轉(zhuǎn)發(fā)到server-v2。

例子

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

  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" 

上面部署了兩個應(yīng)用,一個http類型應(yīng)用,一個是tcp類型應(yīng)用。

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

然后可以測試以下應(yīng)用連通性,如下:

  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 

如果現(xiàn)在要為上面的服務(wù)配置Traefik mesh,只需要更改這兩個服務(wù)的service,http類型應(yīng)用的service加mesh.traefik.io/traffic-type: "http"的annotations,tcp類型應(yīng)用的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 

現(xiàn)在訪問服務(wù),只需將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 

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

腳注

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

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

【3】https://coredns.io/

 

責(zé)任編輯:姜華 來源: 運維開發(fā)故事
相關(guān)推薦

2021-06-05 10:16:55

Linkerd 服務(wù)網(wǎng)格Kubernetes

2023-11-07 17:32:31

Istiok8s

2022-11-24 14:21:27

微服務(wù)ISTIO

2023-06-18 19:21:04

技術(shù)架構(gòu)服務(wù)網(wǎng)格

2021-07-21 05:23:06

Linkerd Emoji.voto服務(wù)網(wǎng)格

2020-11-15 23:48:57

服務(wù)網(wǎng)格微服務(wù)網(wǎng)絡(luò)網(wǎng)絡(luò)技術(shù)

2022-05-16 08:00:00

服務(wù)網(wǎng)格架構(gòu)Kuma

2020-01-07 09:25:02

服務(wù)網(wǎng)格微服務(wù)Kubernetes

2019-08-29 08:00:00

微服務(wù)架構(gòu)服務(wù)網(wǎng)格

2020-07-13 07:00:03

微服務(wù)服務(wù)網(wǎng)格架構(gòu)

2020-08-26 05:45:40

服務(wù)網(wǎng)格DevOps開發(fā)

2020-10-21 13:31:53

服務(wù)網(wǎng)格開源微服務(wù)

2022-08-09 08:00:00

服務(wù)網(wǎng)格云原生工具

2022-07-06 08:25:17

服務(wù)網(wǎng)格Kubernetes

2022-09-06 10:46:34

服務(wù)網(wǎng)格可觀測性微服務(wù)

2024-09-27 10:05:02

2021-08-27 11:42:51

Nacos云原生阿里云

2021-04-02 22:00:50

服務(wù)網(wǎng)格微服務(wù)

2022-08-02 16:37:32

服務(wù)網(wǎng)格網(wǎng)絡(luò)服務(wù)

2020-11-30 13:50:13

服務(wù)網(wǎng)格微服務(wù)數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號