天天看點

Istio 之ServiceEntry

使用服務條目資源(ServiceEntry)可以将條目添加到 Istio 内部維護的服務系統資料庫中。添加服務條目後,Envoy 代理可以将流量發送到該服務,就好像該服務條目是網格中的服務一樣。通過配置服務條目,可以管理在網格外部運作的服務的流量。

此外,可以配置虛拟服務和目标規則,以更精細的方式控制到服務條目的流量,就像為網格中的其他任何服務配置流量一樣。

client.yaml # istio 要注入的用戶端資源檔案 baidu-se.yaml # baidu ServiceEntry baidu-dr.yaml # baidu DestinationRule baidu-vs.yaml # baidu VirtualService

Sidercar 注入

client.yaml

baidu-se.yaml

hosts:DNS名稱。可以具有通配符字首。 ports:關聯的端口。 ports.protocol: 以下之一:HTTP,HTTPS,HTTP2,GRPC,MONGO,TCP或TLS。 exportTo:預設情況下使用“*”,這意味着該ServiceEntry公開給每個命名空間。 “.”僅将其限制為目前命名空間。目前,exportTo值僅限于這兩個。 resolution:主機的服務發現模式 location:從網格的角度來看,應将此服務視為内部或外部服務。

對剛才編寫的 ServiceEntry 資源做一些改動

baidu-se-gai.yaml

驗證

出現此問題的原因是,serviceentry 一直都在發揮作用,前面沒報錯的原因是預設指定的域名解析是基于DNS的。而調整後,設定了靜态域名解析的方式,并随意給了一個内網IP來辨別baidu。kubectl apply serviceentry後此配置立刻就被應用在網格内(client)的 envoy,那麼在網格内通路baidu的時候,流量就被路由到了所指定的 10.10.10.10去了。

使用 service entry 使用場景有哪些?這裡假設一個場景,比如工作過程中需要調用外部合作方服務,該服務跟你的叢集毫無關系,甚至對方服務可以布置在美國。但是通過服務條目,你可以将對方服務納入到自己的 Istio 網格之内,就像它本身存在你的叢集之内一樣,就好像你做了内網攔截一樣。而且服務條目可以結合虛拟服務(virtual service)、目的地規則(destination rule)做更加精細的流量控制,不僅如此,還可以做失敗注入、重試等功能。

baidu-dr.yaml

baidu-vs.yaml

再次測試

👌!經過簡單的測試可以對網格外部服務進行精細的流控

過手如登山,一步一重天