服务条目(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

相关文章
相关标签/搜索