使用服务条目资源(ServiceEntry)可以将条目添加到 Istio 内部维护的服务注册表中。添加服务条目后,Envoy 代理可以将流量发送到该服务,就好像该服务条目是网格中的服务一样。通过配置服务条目,可以管理在网格外部运行的服务的流量。

此外,可以配置虚拟服务和目标规则,以更精细的方式控制到服务条目的流量,就像为网格中的其他任何服务配置流量一样。


服务条目样例

上面的介绍有点晦涩,不如我们直接给一个样例出来,该样例包含两个资源文件:

client.yaml # istio 要注入的客户端资源文件

svc-entry.yaml # 服务条目资源文件

服务条目资源

svc-entry.yaml 内容如下:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: ServiceEntry
  3. metadata:
  4. name: svc-entry
  5. spec:
  6. hosts:
  7. - "www.baidu.com"
  8. ports:
  9. - number: 80
  10. name: http
  11. protocol: HTTP
  12. location: MESH_EXTERNAL
  13. resolution: DNS

该服务条目资源定义了一个外部网站 baidu,并将它纳入到 Istio 内部维护的服务注册表中。执行如下语句创建 service entry 资源:

kubectl apply -f svc-entry.yaml

istio 注入客户端资源

client.yaml 客户端资源文件如下:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: client
  5. spec:
  6. replicas: 1
  7. selector:
  8. matchLabels:
  9. app: client
  10. template:
  11. metadata:
  12. labels:
  13. app: client
  14. spec:
  15. containers:
  16. - name: busybox
  17. image: busybox
  18. imagePullPolicy: IfNotPresent
  19. command: ["/bin/sh", "-c", "sleep 3600"]

编辑完,执行如下语句进行 Istio 注入:

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

执行成功后,查看 pod 发现容器个数为 2 个,说明 istio 注入成功:

Istio 注入后,client 就处于 Istio 服务网格之中。


验证服务条目样例

登录 client

执行如下语句登录 client:

kubectl exec -it $(kubectl get pods | grep -i client | awk '{print $1}') -- sh

登陆 client,访问 www.baidu.com 成功,如下所示:

你可能会迷惑,难道这就是服务条目?不是访问外网吗?

好吧,这还就真是服务条目。为了解除你心中的疑惑,我们现在来对刚才编写的 ServiceEntry 资源做一些手脚。

调整 service entiries 解析类型

调整内容如下所示:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: ServiceEntry
  3. metadata:
  4. name: svc-entry
  5. spec:
  6. hosts:
  7. - "www.baidu.com"
  8. ports:
  9. - number: 80
  10. name: http
  11. protocol: HTTP
  12. location: MESH_EXTERNAL
  13. resolution: STATIC
  14. endpoints:
  15. - address: 172.20.10.10

添加了域名解析类型为 static,同时给出一个自定义 IP:192.168.182.188。再次 kubectl apply 后登陆 client 查看:

再次访问 baidu,发现已经不会成功了,多试验几次,一样不会成功。

出现此问题的原因是,service entry 一直都在发挥作用,前面没报错的原因是默认指定的域名解析是基于 DNS 的。而调整后,我们设置了静态域名解析的方式,并随意给了一个内网 IP 来标识 baidu。kubectl apply service entry 后此配置立刻就被应用在网格内(client)的 envoy,那么在网格内访问 baidu 的时候,流量就被路由到了我们所指定的 192.168.182.188 去了。

​ 执行如下语句删除 service entry,再次登录 client 访问 baidu,发现岁月静好。


总结

​ 使用 service entry 使用场景有哪些?这里给你一个场景,比如工作过程中你需要调用外部合作方服务,该服务跟你的集群毫无关系,甚至对方服务可以布置在美国。但是通过服务条目,你可以将对方服务纳入到自己的 Istio 网格之内,就像它本身存在你的集群之内一样,就好像你做了内网拦截一样。而且服务条目可以结合虚拟服务(virtual service)、目的地规则(destination rule)做更加精细的流量控制,不仅如此,还可以做失败注入、重试等功能。

istio服务条目(ServiceEntry)介绍的更多相关文章

  1. lms框架应用服务接口和服务条目详解

    目录 应用接口的定义 服务路由特性 服务条目 根据服务条目生成webAPI 服务条目的治理特性 缓存拦截 服务条目的例子 应用接口的实现 开源地址与文档 应用接口的定义 服务应用接口是微服务定义web ...

  2. silky微服务的应用服务和服务条目

    目录 服务的定义 服务条目 根据服务条目生成WebAPI 服务条目的治理特性 缓存拦截 服务条目的例子 服务的实现 开源地址 在线文档 服务的定义 服务接口是微服务定义服务的基本单位,定义的应用服务接 ...

  3. 【译文连载】 理解Istio服务网格(第七章 安全)

    全书目录 第一章 概述 第二章 安装 第三章 流控 第四章 服务弹性 第五章 混沌测试 第六章 可观测性 本文目录 第7章 安全 7.1 身份认证 7.1.1 Kubernetes上的Istio的身份 ...

  4. Istio(十一):向istio服务网格中引入虚拟机

    目录 一.模块概览 二.系统环境 三.虚拟机负载 3.1 虚拟机负载 3.2 单网络架构 3.3 多网络架构 3.4 Istio 中如何表示虚拟机工作负载? 四.实战:向istio Mesh中引入虚拟 ...

  5. java框架之SpringCloud(1)-微服务及SpringCloud介绍

    微服务概述 是什么 业界大牛 Martin Fowler 这样描述微服务: 参考[微服务(Microservices)-微服务原作者Martin Flower博客翻译]. 下面是关于上述博客中的部分重 ...

  6. 【译文连载】 理解Istio服务网格(第一章 概述)

    书籍英文版下载链接为 https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/,作者 Burr ...

  7. 【译文连载】 理解Istio服务网格(第六章 可观测性)

    全书目录 第一章 概述 第二章 安装 第三章 流控 第四章 服务弹性 第五章 混沌测试 ​本文目录 第6章 可观测性 6.1 分布式调用链跟踪(tracing) 6.1.1 基本概念 6.1.2 Ja ...

  8. lms微服务框架主机介绍

    目录 概念 .net的通用主机 .net的web主机 lms的业务主机类型 用于托管业务应用的普通主机 1. 创建一个应用台程序 2. 安装Silky.Lms.NormHost包 3. 注册LMS服务 ...

  9. [推荐]dubbo分布式服务框架知识介绍

    [推荐]dubbo分布式服务框架知识介绍 CentOS+Jdk+Jboss+dubbo+zookeeper集群配置教程    http://wenku.baidu.com/view/20e8f36bf ...

随机推荐

  1. node.js 中间件

    node.js 中间件 node.js middleware Express middleware body-parser cookie-parser cookie-session cors csur ...

  2. free online code editor

    free online code editor online vscode https://stackblitz.com/ https://codesandbox.io/ https://codesh ...

  3. nodejs 简单的模拟代理服务器

    https://nodejs.org/api/net.html#net_net_createconnection 代理前:client -> server 代理后:client -> pr ...

  4. NGK全球启动大会圆满落幕

    加州时间2020年11月25日,NGK全球启动大会在美国硅谷圆满落幕.本次NGK全球启动大会为NGK正式在全球上线拉开了序幕. 百余位受邀嘉宾出席了本次NGK全球启动大会,其中包括NGK创始人.星盟投 ...

  5. MySQL的简单使用方法备忘

    这只是一篇我的个人备忘录,写的是我常用的命令.具体可以参考"菜鸟教程" https://www.runoob.com/mysql/mysql-tutorial.html 登录(用户 ...

  6. 010_HTML5

    目录 初识HTML 什么是HTML HTML发展史 HTML5的优势 W3C标准 常见IDE IDEA开发HTML IDEA创建HTML文件,并用浏览器打开 配置浏览器 HTML基础 HTML基本结构 ...

  7. Vue学习笔记-API调试工具--->国产apipost按装(比postman好按装好用)

    一  使用环境: windows 7 64位操作系统 二   Vue学习笔记-API调试工具--->apipost按装 1.下载: https://www.apipost.cn/ (比postm ...

  8. springMvc+AJAX+JSON的增删改查

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  9. C# 处理PPT水印(三)—— 在PPT中添加多行(平铺)文本水印效果

    在PPT幻灯片中,可通过添加形状的方式,来实现类似水印的效果,可添加单一文本水印效果,即幻灯片中只有一个文本水印:也可以添加多行(平铺)文本水印效果,即幻灯片中以一定方式平铺排列多个文本水印效果.本文 ...

  10. ElasticSearch 集群安全

    公号:码农充电站pro 主页:https://codeshellme.github.io 在安装完 ES 后,ES 默认是没有任何安全防护的. ES 的安全管理主要包括以下内容: 身份认证:鉴定访问用 ...