Linkerd 2.10—設(shè)置服務(wù)配置文件
本文轉(zhuǎn)載自微信公眾號「黑客下午茶」,作者為少。轉(zhuǎn)載本文請聯(lián)系黑客下午茶公眾號。
Linkerd 2.10 中文手冊持續(xù)修正更新中:
https://linkerd.hacker-linner.com
Service profiles 為 Linkerd 提供 了關(guān)于服務(wù)以及如何處理服務(wù)請求的附加信息。
當(dāng) Linkerd proxy 接收到 HTTP(非 HTTPS)請求時, 會識別該請求的目標(biāo)服務(wù)(destination service)。如果存在該目標(biāo)服務(wù)的服務(wù)配置文件,則該 service profile 用于 提供每個路由指標(biāo)、重試 和 超時。
請求的 destination service 是通過選擇存在的第一個 header 的值、 l5d-dst-override、:authority 和 Host 來計算的。端口組件(如果包含并包含冒號)將被剝離。該值映射到完全限定的 DNS 名稱。當(dāng) destination service 與發(fā)送方或接收方命名空間中的服務(wù)配置文件名稱匹配時, Linkerd 將使用它來提供 per-route metrics、retries 和 timeouts。
有時您可能需要為駐留在您無法控制的命名空間中的服務(wù)定義服務(wù)配置文件。為此,只需像以前一樣創(chuàng)建一個服務(wù)配置文件,但將服務(wù)配置文件的命名空間編輯為調(diào)用該服務(wù)的 pod 的命名空間。當(dāng) Linkerd 代理對服務(wù)的請求時,源命名空間中的服務(wù)配置文件將優(yōu)先于目標(biāo)命名空間中的服務(wù)配置文件。
您的 destination service 可能是ExternalName service。在這種情況下,請使用 spec.metadata.name 和 spec.metadata.namespace 值來命名您的 ServiceProfile。例如,
- apiVersion: v1
- kind: Service
- metadata:
- name: my-service
- namespace: prod
- spec:
- type: ExternalName
- externalName: my.database.example.com
使用名稱 my-service.prod.svc.cluster.local 作為 ServiceProfile。
請注意,目前您無法在 Web 儀表板中查看針對此 ServiceProfile 中的路由收集的統(tǒng)計信息。您可以使用 CLI 獲取統(tǒng)計信息。
如需完整的演示演練,請查看 books demo。
有幾種不同的方法可以使用 linkerd profile 來創(chuàng)建服務(wù)配置文件。`
與路由關(guān)聯(lián)的請求將有一個 rt_route annotation。要手動驗證請求是否正確關(guān)聯(lián),請在您自己的部署上運行 tap:
- linkerd viz tap -o wide | grep req
輸出將實時流式傳輸 deploy/webapp 正在接收的請求。一個樣本是:
- req id=0:1 proxy=in src=10.1.3.76:57152 dst=10.1.3.74:7000 tls=disabled :met
相反,如果 rt_route 不存在,則請求 未 與任何路由相關(guān)聯(lián)。嘗試運行:
- linkerd viz tap -o wide <target> | grep req | grep -v rt_route
Swagger
如果您的服務(wù)有 OpenAPI (Swagger) 規(guī)范,則可以使用 --open-api 標(biāo)志從 OpenAPI 規(guī)范文件生成服務(wù)配置文件。
- linkerd profile --open-api webapp.swagger webapp
這會從 webapp.swagger OpenAPI 規(guī)范文件為 webapp 服務(wù)生成一個服務(wù)配置文件。生成的服務(wù)配置文件可以直接通過管道傳輸?shù)? kubectl apply,并將安裝到服務(wù)的命名空間中。
- linkerd profile --open-api webapp.swagger webapp | kubectl apply -f -
Protobuf
如果您的服務(wù)具有 protobuf 格式, 則可以使用 --proto 標(biāo)志生成服務(wù)配置文件。
- linkerd profile --proto web.proto web-svc
這將從用于 web-svc 服務(wù)的 web.proto 格式文件生成服務(wù)配置文件。生成的服務(wù)配置文件可以直接通過管道傳輸?shù)?kubectl apply,并將安裝到服務(wù)的命名空間中。
自動創(chuàng)建
沒有 OpenAPI 規(guī)范或 protobuf 格式是很常見的。您還可以通過觀看實時流量生成服務(wù)配置文件。這是基于點擊數(shù)據(jù),是了解服務(wù)配置文件可以為您做什么的好方法。要開始此生成過程,您可以使用 --tap 標(biāo)志:
- linkerd viz profile -n emojivoto web-svc --tap deploy/web --tap-duration 10s
這將在該命令運行的10秒內(nèi)從觀察到的 deploy/web 流量中生成一個服務(wù)配置文件。產(chǎn)生的服務(wù)配置文件可以直接通過管道傳輸?shù)?kubectl apply,并將被安裝到服務(wù)的命名空間中。
模板
除了自動創(chuàng)建服務(wù)配置文件的所有方法外,您還可以獲得一個模板,允許您手動添加路由。要生成模板,請運行:
- linkerd profile -n emojivoto web-svc --template
這會生成一個服務(wù)配置文件模板,其中包含可以手動更新的示例。更新服務(wù)配置文件后,使用 kubectl apply 將其安裝到集群上服務(wù)的命名空間中。