概念及示例
使用服務入口Service Entry來添加一個入口到 Istio 內部維護的服務注冊中心,添加了服務入口后,Envoy 代理可以向服務發送流量,就好像它是網格內部的服務一樣,配置服務入口允許您管理運行在網格外的服務的流量,它包括以下幾種能力:
- 為外部目標 redirect 和轉發請求,例如來自 web 端的 API 呼叫,或者流向遺留老系統的服務,
- 為外部目標定義重試、超時和故障注入策略,
- 添加一個運行在虛擬機的服務來擴展您的網格,
- 從邏輯上添加來自不同集群的服務到網格,在 Kubernetes 上實作一個多集群 Istio 網格,
您不需要為網格服務要使用的每個外部服務都添加服務入口,默認情況下,Istio 配置 Envoy 代理會將請求傳遞給未知服務,但是,您不能使用 Istio 的特性來控制沒有在網格中注冊的目標流量,
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: svc-entry
spec:
hosts:
- ext-svc.example.com
ports:
- number: 443
name: https
protocol: HTTPS
location: MESH_EXTERNAL
resolution: DNS
您指定的外部資源使用 hosts 欄位,可以使用完全限定名或通配符作為前綴域名,
您可以配置虛擬服務和目標規則,以更細粒度的方式控制到服務入口的流量,這與網格中的任何其他服務配置流量的方式相同,例如,下面的目標規則配置流量路由以使用雙向 TLS 來保護到 ext-svc.example.com 外部服務的連接,我們使用服務入口配置了該外部服務:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: external-svc-httpbin
namespace : egress
spec:
hosts:
- httpbin.com
exportTo:
- "."
location: MESH_EXTERNAL
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
ServiceEntry配置
| Field | Type | Description | Required |
|---|---|---|---|
| hosts | string[] | 系結到 ServiceEntry 上的主機名,可以是一個帶有通配符前綴的 DNS 名稱,如果服務不是 HTTP 協議的,例如 mongo、TCP 以及 HTTPS 中,hosts 中的 DNS 名稱會被忽略,這種情況下會使用 endpoints 中的 address 以及 port 來甄別呼叫目標, |
Yes |
| addresses | string[] | 服務相關的虛擬 IP,可以是 CIDR 前綴,對 HTTP 服務來說,這一欄位會被忽略,而會使用 HTTP 的 HOST/Authority Header,而對于非 HTTP 服務,例如 mongo、TCP 以及 HTTPS 中,這些主機會被忽略,如果指定了一個或者多個 IP 地址,對于在串列范圍內的 IP 的訪問會被判定為屬于這一服務,如果地址欄位為空,服務的鑒別就只能靠目標埠了,在這種情況下,被訪問服務的埠一定不能和其他網格內的服務進行共享,換句話說,這里的 Sidecar 會簡單的做為 TCP 代理,將特定埠的訪問轉發到指定目標端點的 IP、主機上去,就無法支持 Unix socket 了, |
No |
| ports | Port[] | 和外部服務關聯的埠,如果 endpoints 是 Unix socket 地址,這里必須只有一個埠, |
Yes |
| location | Location | 用于指定該服務的位置,屬于網格內部還是外部, | No |
| resolution | Resolution | 主機的服務發現模式,在沒有附帶 IP 地址的情況下,為 TCP 埠設定決議模式為 NONE 時必須小心,在這種情況下,對任何 IP 的指定埠的流量都是允許的(例如 0.0.0.0:), |
Yes |
| endpoints | Endpoint[] | 一個或者多個關聯到這一服務的 endpoint |
No |
| exportTo | string[] | 此服務匯出到的名稱空間串列,匯出服務允許它被其他名稱空間中定義的邊車,網關和虛擬服務使用,此功能為服務所有者和網格管理員提供了一種機制,可以控制跨名稱空間邊界的服務的可見性, 如果未指定名稱空間,則默認情況下會將服務匯出到所有名稱空間 | No |
| subjectAltNames | string[] | 實施此服務的作業負載實體允許使用的使用者備用名稱串列,此資訊用于強制執行安全命名,如果指定,則代理將驗證服務器證書的使用者備用名稱是否與指定值之一匹配, | No |
ServiceEntry.Location
| Name | Description |
|---|---|
| MESH_EXTERNAL | 表示服務在網格外部,通常用于指示通過API使用的外部服務, |
| MESH_INTERNAL | 表示服務是網格的一部分,通常用于指示在擴展服務網格以包括不受管理的基礎架構時顯式添加的服務 |
具體細節的引數明細可查閱: https://preliminary.istio.io/zh/docs/reference/config/networking/service-entry
參考文獻
https://preliminary.istio.io/zh/docs/concepts/traffic-management/#service-entries
https://preliminary.istio.io/zh/docs/reference/config/networking/service-entry
https://skyao.io/learning-istio/crd/network/serviceentry.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/10001.html
標籤:Go
