服務條目(Service Entries)

索引總目錄:istio從入門到放棄系列api

一、介紹
bash

    使用服務條目資源(Service Entries)能夠將條目添加到 Istio  內部維護的服務註冊表中。添加服務條目後,Envoy  代理能夠將流量發送到該服務,就好像該服務條目是網格中的服務同樣。經過配置服務條目,能夠管理在網格外部運行的服務的流量。
app

    此外,能夠配置虛擬服務和目標規則,以更精細的方式控制到服務條目的流量,就像爲網格中的其餘任何服務配置流量同樣。
ide

二、建立資源
網站

2.1 建立服務條目資源
spa

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: test-entry
spec:
  hosts:
  - "www.baidu.com"
  ports:
  - number: 80
    name: http
    protocol: HTTP
  location: MESH_EXTERNAL
  resolution: DNS

該服務條目資源定義了一個外部網站 baidu,並將它歸入到 Istio 內部維護的服務註冊表中.net

kubectl apply -f test-entry.yaml
3d

kubectl get serviceentry.networking.istio.io
代理

image-20200528155324097.png

2.2 建立客戶端資源orm

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: [ "/bin/sh", "-c", "sleep 3600" ]

編輯完,執行以下語句進行 Istio 注入:

istioctl kube-inject -f client.yaml |kubectl apply -f -

執行成功後,查看 pod 發現容器個數爲 2 個,說明 istio 注入成功:

image-20200528160127064.png

三、驗證服務條目

3.1 進入client容器中訪問baidu.com成功

image-20200528161402316.png

3.2 調整 service entiries 解析類型

調整以下

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: test-entry
spec:
  hosts:
  - "www.baidu.com"
  ports:
  - number: 80
    name: http
    protocol: HTTP
  location: MESH_EXTERNAL
  resolution: STATIC
  endpoints:
  - address: 192.168.10.88

image-20200528161800914.png

   再次訪問 baidu,發現已經不會成功了,多試驗幾回,同樣不會成功。

   出現此問題的緣由是,service entry 一直都在發揮做用,前面沒報錯的緣由是默認指定的域名解析是基於 DNS  的。而調整後,咱們設置了靜態域名解析的方式,並隨意給了一個內網 IP 來標識 baidu。修改ServiceEntry配置馬上就被應用在網格內(client)的 envoy,那麼在網格內訪問 baidu 的時候,流量就被路由到了咱們所指定的  192.168.10.88 去了。

   刪除 service entry,再次登陸 client 訪問 baidu,發現一切正常

image-20200528162159286.png

四、service entry 使用場景

好比工做過程當中你須要調用外部合做方服務,該服務跟你的集羣毫無關係,甚至對方服務能夠佈置在美國。可是經過服務條目,你能夠將對方服務歸入到本身的  Istio 網格以內,就像它自己存在你的集羣以內同樣,就好像你作了內網攔截同樣。並且服務條目能夠結合虛擬服務(virtual  service)、目的地規則(destination rule)作更加精細的流量控制,不只如此,還能夠作失敗注入、重試等功能。

參考文章:https://blog.51cto.com/14625168/2496644

相關文章
相關標籤/搜索