Istio 服务条目 (Service Entry)

Istio 的 Service Entry 功能允许将外部服务纳入网格进行精细化治理。通过示例展示了如何注册如 www.baidu.com 的外部服务,并实现 DNS 解析、服务重试等高级功能。当设定错误的 DNS 解析值时,服务调用会失败,一般建议依赖 DNS 自动解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务条目(Service Entry)是 Istio 重要的资源对象之一,作用是将外部的资源注册到 Istio 内部的网格服务中来,以提供网格内对外部资源的更加精细化的控制。

什么情况下会用到 Service Entry

在服务调用过程中会使用到外部的服务,例如微信、支付宝的付款服务,这个服务和本身集群内的服务无任何关系,通过服务条目将该服务注册到 Istio 网格,在集群内部就好像访问自身的服务一样,结合虚拟服务、目标规则进而通过一些高级的治理能力,例如限流、重试等等对服务治理能力支持。

通过例子来理解

在这里插入图片描述

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的状态码时,服务可以重试以提高可用性
在这里插入图片描述

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进行服务的域名解析。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值