使用服務入口Service Entry
來添加一個入口到 Istio 內部維護的服務註冊中心。添加了服務入口後,Envoy 代理能夠向服務發送流量,就好像它是網格內部的服務同樣。配置服務入口容許您管理運行在網格外的服務的流量,它包括如下幾種能力:html
您不須要爲網格服務要使用的每一個外部服務都添加服務入口。默認狀況下,Istio 配置 Envoy 代理會將請求傳遞給未知服務。可是,您不能使用 Istio 的特性來控制沒有在網格中註冊的目標流量。web
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
字段。可使用徹底限定名或通配符做爲前綴域名。api
您能夠配置虛擬服務和目標規則,以更細粒度的方式控制到服務入口的流量,這與網格中的任何其餘服務配置流量的方式相同。例如,下面的目標規則配置流量路由以使用雙向 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
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 |
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-entrysocket
https://skyao.io/learning-istio/crd/network/serviceentry.htmlide