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

Istio服務(wù)網(wǎng)格:為忙碌人士而生

開發(fā) 開發(fā)工具
Istio 是一個強(qiáng)大的工具,它簡化了微服務(wù)的流量管理、安全性和可觀測性。為 Istio 做貢獻(xiàn)讓我了解了它如何幫助解決運(yùn)行分布式系統(tǒng)時遇到的一些復(fù)雜挑戰(zhàn)。

我最近為Istio做出了一個小貢獻(xiàn),Istio 是一個開源服務(wù)網(wǎng)格項目。我的貢獻(xiàn)包括為 Istio CLI 的一個命令添加了一些測試。如果你想查看詳細(xì)信息,可以在此處找到 pull 請求。這不是一個巨大的改變,但它是一個很棒的學(xué)習(xí)體驗。在 Istio 上工作幫助我更深入地理解了服務(wù)網(wǎng)格。我很高興能做出更多貢獻(xiàn)。在這篇文章中,我將解釋什么是 Istio,它為什么有用以及它是如何工作的。

譯自The Istio Service Mesh for People Who Have Stuff to Do | Blog,作者 Luca Cavallin。

從本質(zhì)上講,Istio 是一個服務(wù)網(wǎng)格。服務(wù)網(wǎng)格管理微服務(wù)之間的通信,負(fù)責(zé)處理諸如路由流量、保護(hù)通信和提供可觀測性等事項。隨著微服務(wù)數(shù)量的增長,管理這些交互會變得很復(fù)雜。Istio 自動執(zhí)行許多這些任務(wù),因此你可以專注于構(gòu)建應(yīng)用程序,而不是管理服務(wù)之間的通信。

為什么要使用 Istio?

隨著架構(gòu)變得越來越復(fù)雜,你將面臨新的挑戰(zhàn)。服務(wù)需要以可靠、安全和高效的方式進(jìn)行通信。Istio 幫助你在三個關(guān)鍵領(lǐng)域做到這一點:

  1. 管理流量: Istio 使你能夠控制流量在服務(wù)之間如何流動。你可以將流量拆分到服務(wù)的不同版本之間,在部署期間重新路由請求,或者設(shè)置重試和超時策略。保護(hù)通信: Istio 使啟用
  2. 雙向 TLS (mTLS)變得容易。這確保了服務(wù)之間所有通信都是加密和經(jīng)過身份驗證的,從而阻止未經(jīng)授權(quán)的服務(wù)。
  3. 可觀測性: Istio 自動收集指標(biāo)、日志和跟蹤,使你能夠?qū)崟r了解你的服務(wù)。這有助于監(jiān)控、故障排除和性能調(diào)整。

這三個領(lǐng)域——流量管理、安全性和可觀測性——是運(yùn)行健康微服務(wù)架構(gòu)的關(guān)鍵,Istio 可以輕松地處理它們。

使用 Istio 管理流量

Istio 的主要功能之一是管理服務(wù)之間的流量。在微服務(wù)設(shè)置中,你可能有多個版本的同一個服務(wù)同時運(yùn)行。例如,你可能正在測試支付服務(wù)的最新版本,并希望將大部分流量發(fā)送到版本 1,但將一些流量路由到版本 2。

以下是如何使用 Istio 將流量拆分到服務(wù)的兩個版本之間的示例:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: payments
spec:
  hosts:
  - payments.myapp.com
  http:
  - route:
    - destination:
        host: payments
        subset: v1
        weight: 90
    - destination:
        host: payments
        subset: v2
        weight: 10

在這個例子中:

  • 90% 的流量被發(fā)送到payments服務(wù)的版本 1,而10%被發(fā)送到版本 2。
  • hosts字段指定虛擬服務(wù)適用的域——在本例中為payments.myapp.com。
  • route塊定義了流量如何在服務(wù)的兩個子集中進(jìn)行拆分:v1(版本 1)和v2(版本 2)。weight字段控制流量分配。

這對于金絲雀部署非常有用,在金絲雀部署中,你可以使用一小部分用戶測試新功能,然后再完全推出。

Envoy 代理和 Sidecar 容器

Istio 的數(shù)據(jù)平面依賴于Envoy 代理,Envoy 代理是一個第 7 層代理,它管理服務(wù)之間所有流量。網(wǎng)格中的每個服務(wù)都有自己的Sidecar 代理,它位于服務(wù)旁邊,并管理其所有入站和出站流量。

Envoy 允許你應(yīng)用流量策略,例如重試、超時和斷路器,所有這些都無需更改應(yīng)用程序代碼。它還收集有關(guān)流量流的詳細(xì)指標(biāo),有助于監(jiān)控和調(diào)試。

由于 Envoy 作為Sidecar 容器運(yùn)行,因此它可以在不干擾應(yīng)用程序邏輯的情況下執(zhí)行這些規(guī)則并收集數(shù)據(jù)。簡而言之,Envoy 充當(dāng)服務(wù)網(wǎng)格中所有通信的“交通警察”。

可觀測性:了解系統(tǒng)中發(fā)生的事情

運(yùn)行一個包含許多微服務(wù)的系統(tǒng)可能會讓你難以了解正在發(fā)生的事情。Istio 的內(nèi)置可觀測性功能可以幫助你跟蹤服務(wù)之間所有通信的指標(biāo)、日志和跟蹤。這對于監(jiān)控系統(tǒng)的運(yùn)行狀況、發(fā)現(xiàn)性能問題和修復(fù)錯誤至關(guān)重要。

Istio 的可觀測性工具可以讓你清楚地了解系統(tǒng)的工作方式。你可以及早發(fā)現(xiàn)問題,并使你的服務(wù)運(yùn)行得更加順暢。

安全:啟用 mTLS 和訪問控制

安全是管理微服務(wù)時的一大問題。Istio 使實施雙向 TLS (mTLS)變得容易,雙向 TLS (mTLS) 會加密服務(wù)之間的所有通信,并確保服務(wù)在交換數(shù)據(jù)之前相互驗證身份。

Istio 還允許您設(shè)置訪問控制策略,以指定哪些服務(wù)可以進(jìn)行通信。這有助于限制哪些服務(wù)可以交互,從而減少系統(tǒng)的攻擊面。

以下是一個 Istio 策略示例,該策略僅允許billing服務(wù)與payments服務(wù)通信:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: payments-to-billing
spec:
  selector:
    matchLabels:
      app: payments
  rules:
  - from:
    - source:
        principals: ["billing.myapp.com"]

在此策略中:

  • selector指定此規(guī)則適用于payments服務(wù),使用標(biāo)簽app: payments。
  • rules塊僅允許billing服務(wù)(由主體"billing.myapp.com"標(biāo)識)與payments服務(wù)通信。任何其他服務(wù)都不允許向payments服務(wù)發(fā)送流量。

此策略限制除billing服務(wù)之外的所有服務(wù)訪問payments服務(wù),從而加強(qiáng)了微服務(wù)的安全性。

什么是 SPIFFE?

Istio 使用SPIFFE(安全生產(chǎn)身份框架,面向所有人)來管理服務(wù)身份。SPIFFE 提供了一種為服務(wù)分配安全、可驗證身份的方法。網(wǎng)格中的每個服務(wù)都會獲得一個SPIFFE 可驗證身份文檔 (SVID),該文檔與 mTLS 一起使用以確保安全通信。此身份系統(tǒng)是 Istio 安全模型的基礎(chǔ)。

Istio 中的網(wǎng)絡(luò)

微服務(wù)中的網(wǎng)絡(luò)可能很困難,尤其是在控制網(wǎng)格內(nèi)部和外部的流量時。Istio 提供了幾種管理網(wǎng)絡(luò)流量的工具:

  1. 服務(wù)條目: 允許外部服務(wù)與網(wǎng)格內(nèi)部的服務(wù)進(jìn)行通信,反之亦然。
  2. 虛擬服務(wù): 定義流量如何在網(wǎng)格內(nèi)部路由。
  3. 目標(biāo)規(guī)則: 將流量策略(如負(fù)載均衡或 mTLS)應(yīng)用于服務(wù)。
  4. 網(wǎng)關(guān): 管理進(jìn)出網(wǎng)格的流量。

配置示例:網(wǎng)關(guān)、服務(wù)條目、虛擬服務(wù)和目標(biāo)規(guī)則

假設(shè)您在網(wǎng)格中有一個 API 服務(wù)器,它通過負(fù)載均衡器接收來自互聯(lián)網(wǎng)的流量。以下是如何配置網(wǎng)關(guān)、服務(wù)條目、虛擬服務(wù)和目標(biāo)規(guī)則來處理此流量。

網(wǎng)關(guān)配置

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: api-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "api.myapp.com"

這里發(fā)生了什么?網(wǎng)關(guān)在端口 80上監(jiān)聽來自域api.myapp.com的 HTTP 流量。selector字段將此網(wǎng)關(guān)連接到Istio 入口網(wǎng)關(guān),該網(wǎng)關(guān)處理進(jìn)入網(wǎng)格的流量。

服務(wù)條目配置

假設(shè)您的 API 服務(wù)器需要調(diào)用外部身份驗證服務(wù)。以下是如何配置服務(wù)條目:

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: auth-service-entry
spec:
  hosts:
  - "auth.external-service.com"
  location: MESH_EXTERNAL
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS
  endpoints:
  - address: 203.0.113.1

這里發(fā)生了什么?服務(wù)條目告訴 Istio 如何將流量路由到外部服務(wù) (auth.external-service.com),該服務(wù)在端口 443(HTTPS)上運(yùn)行。location: MESH_EXTERNAL指示此服務(wù)存在于 Istio 服務(wù)網(wǎng)格之外。endpoints字段包含外部服務(wù)的 IP 地址,允許網(wǎng)格內(nèi)的 API 服務(wù)器發(fā)送請求。

虛擬服務(wù)配置

以下是如何在網(wǎng)格內(nèi)路由流量:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: api-virtualservice
spec:
  hosts:
  - "api.myapp.com"
  gateways:
  - api-gateway
  http:
  - match:
    - uri:
        prefix: "/v1"
    route:
    - destination:
        host: api-service
        subset: stable

這里發(fā)生了什么?虛擬服務(wù)定義了流量路由規(guī)則。在這種情況下,通過api-gateway到達(dá)api.myapp.com/v1的流量將路由到網(wǎng)格中的api-service。subset: stable指的是api-service的特定版本(您可以擁有同一服務(wù)的多個版本)。

目標(biāo)規(guī)則配置

最后,以下是一個目標(biāo)規(guī)則,用于應(yīng)用負(fù)載均衡和 mTLS:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: api-destination-rule
spec:
  host: api-service
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    tls:
      mode: ISTIO_MUTUAL

這里發(fā)生了什么?目標(biāo)規(guī)則將策略應(yīng)用于路由到api-service的流量。它使用輪詢負(fù)載均衡將請求均勻地分布到實例中。mTLS通過tls.mode: ISTIO_MUTUAL啟用,確保服務(wù)之間加密通信。

彈性:使用重試、超時和斷路器處理故障

在分布式系統(tǒng)中,故障是不可避免的。服務(wù)可能會宕機(jī),網(wǎng)絡(luò)可能會變慢,或者用戶可能會遇到延遲。Istio 可以幫助您使用重試、超時和斷路器來處理這些問題。

  • 重試: 自動重試失敗的請求,以處理臨時故障,而不會影響用戶體驗。
  • 超時: 定義服務(wù)在放棄并繼續(xù)執(zhí)行之前應(yīng)等待響應(yīng)的時間。
  • 斷路器: 如果服務(wù)出現(xiàn)故障,Istio 可以停止向其發(fā)送流量,從而防止可能導(dǎo)致系統(tǒng)其他部分崩潰的級聯(lián)故障。

以下是如何在 Istio 中配置重試和超時的示例:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
  - my-service
  http:
  - route:
    - destination:
        host: my-service
      retries:
        attempts: 3
        perTryTimeout: 2s
      timeout: 5s

這里發(fā)生了什么?如果對my-service的請求失敗,Istio 將最多重試該請求3 次。每次重試嘗試都有2 秒的限制。請求的總允許時間為5 秒。在此之后,Istio 將停止等待響應(yīng)。

對于斷路,您可以使用類似這樣的目標(biāo)規(guī)則:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-service
spec:
  host: my-service
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        http1MaxPendingRequests: 50
    outlierDetection:
      consecutive5xxErrors: 2
      interval: 10s
      baseEjectionTime: 30s
      maxEjectionPercent: 50

這里發(fā)生了什么?如果my-service在10 秒內(nèi)返回兩個連續(xù)的 5xx 錯誤,Istio 將停止向其發(fā)送流量。該服務(wù)將從負(fù)載均衡池中剔除30 秒,然后重新考慮。

總結(jié)

Istio 是一個強(qiáng)大的工具,它簡化了微服務(wù)的流量管理、安全性和可觀測性。為 Istio 做貢獻(xiàn)讓我了解了它如何幫助解決運(yùn)行分布式系統(tǒng)時遇到的一些復(fù)雜挑戰(zhàn)。

如果您正在運(yùn)行微服務(wù)架構(gòu)或計劃進(jìn)行擴(kuò)展,Istio 可以幫助您使系統(tǒng)更具彈性和更易于管理。如果您有任何問題或想了解更多關(guān)于 Istio 的信息,請隨時聯(lián)系我,我很樂意分享我的經(jīng)驗。

責(zé)任編輯:武曉燕 來源: 云云眾生s
相關(guān)推薦

2022-11-24 14:21:27

微服務(wù)ISTIO

2023-05-08 07:05:26

2023-11-01 08:08:22

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

2022-07-01 18:36:17

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

2023-06-18 19:21:04

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

2020-11-04 08:00:57

虛擬機(jī)stio網(wǎng)格

2020-11-15 23:48:57

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

2019-08-29 08:00:00

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

2021-11-08 10:17:48

gRPC Istio網(wǎng)格

2022-05-16 08:00:00

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

2020-01-07 09:25:02

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

2022-08-09 08:00:00

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

2018-08-28 18:11:40

華為云

2020-07-13 07:00:03

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

2020-08-26 05:45:40

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

2021-08-27 11:42:51

Nacos云原生阿里云

2021-04-02 22:00:50

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

2021-04-25 08:48:36

Traefik mes服務(wù)網(wǎng)格Kubernetes集

2020-10-21 13:31:53

服務(wù)網(wǎng)格開源微服務(wù)
點贊
收藏

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