天天看點

Istio - crds - Service Entry

> 服務條目(Service Entry)是 Istio 重要的資源對象之一,作用是将外部的資源注冊到 Istio 内部的網格服務中來,以提供網格内對外部資源的更加精細化的控制。

#### 什麼情況下會用到 Service Entry

在服務調用過程中會使用到外部的服務,例如微信、支付寶的付款服務,這個服務和本身叢集内的服務無任何關系,通過服務條目将該服務注冊到 Istio 網格,在叢集内部就好像通路自身的服務一樣,結合虛拟服務、目标規則進而通過一些進階的治理能力,例如限流、重試等等對服務治理能力支援。

#### 通過例子來了解

Istio - crds - Service Entry

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: baidu-se
spec:
  hosts:
  - www.baidu.com
  location: MESH_EXTERNAL
  ports:
  - name: https
    number: 443
    protocol: HTTPS
  resolution: DNS      

将外部服務資源 www.baidu.com 注冊到 Istio 内部網格,通過 DNS 去解析該服務的域名。

通過用戶端容器執行 ``wget -q -O -

http://www.baidu.com``

去測試結果。

#### 為外部服務添加服務重試能力

首先使用 Service Entry 将外部服務注冊到 Istio 叢集内部的網格中來

添加 VirtualService 進行重試規則的定義,以及DestinationRule 聲明流量的路由負載規則

模拟在傳回5xx的狀态碼時,服務可以重試以提高可用性

Istio - crds - Service Entry
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: baidu-se
spec:
  hosts:
  - www.baidu.com
  location: MESH_EXTERNAL
  ports:
  - name: https
    number: 443
    protocol: HTTPS
  resolution: DNS
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: baidu-vs
spec:
  hosts:
  - www.baidu.com
  http:
  - route:
    timeout: 200s
    retries:
      attempts: 15
      perTryTimeout: 5s
      retryOn: 5xx
    - destination:
        host: www.baidu.com
        port:
          number: 443
        subset: tls-origination
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: baidu-dr
spec:
  host: www.baidu.com
  subsets:
  - name: tls-origination
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
      portLevelSettings:
      - port:
          number: 443
        tls:
          mode: SIMPLE      

``kubectl logs [serviceEntryPod] -c istio-proxy``

通過Sidecar日志可以發現,當服務調用失敗時,會自動的嘗試3次。

#### 手動指定錯誤的 DNS 解析值

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: baidu-se
spec:
  hosts:
  - www.baidu.com
  location: MESH_EXTERNAL
  ports:
  - name: http
    number: 80
    protocol: HTTP
  resolution: STATIC
  endpoints:
  - address: 1.2.3.4      

如果在靜态指定了錯誤的解析值後,服務調用會失敗,除非一些特定的場景需要,建議還是通過DNS進行服務的域名解析。

繼續閱讀