ServiceEntry:

用于将未能自动添加至网格中的服务,以手形式使得内发 现机制能够访问或路由到这些服务。
网格外部的服务
       运行于 Kubernetes 上,但却非为 Istio 网格管理的 名称空间中Pod 上,或者是 Kubernetes 集群外部的 VM 或裸服务上
       在ServiceEntry 中,这类服务称为 MESH_EXTERNAL
位于 网格内部但自身并未注册Istio 注册表的服务,也能够手动添加至 Istio 的内部服务注册表中
      运行于 Istio 网格内部,但未能自动注册到 Istio 注册表中
      在ServiceEntry 中,这类服务称为 MESH_INTERNAL

WorkLoadEntry:用于抽象非kubernetes托管的工作负载。例如虚拟机实例和裸服务器等,从而将虚拟机加入到网格中

网格外部的服务:2个nginx服务

10.0.8.101:80 ,10.0.8.111:80

域名使用nginx.myland.com

ServiceEntry实例1:无ServiceEntry时网格内部访问外部服务:

网格内的POD:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: aa
name: aa
spec:
replicas: 1
selector:
matchLabels:
app: aa
template:
metadata:
labels:
app: aa
spec:
containers:
- image: ikubernetes/demoapp:v1.0
name: aa

在pod内/etc/hosts中增加:

10.0.8.101 nginx.myland.com
    10.0.8.111 nginx.myland.com

登录kiali查看:

可以看到,访问外部应用时直接交给了PassthroughCluster集群,没有为外部应用建立Listener

ServiceEntry实例2:有ServiceEntry时网格内部访问外部服务:

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: nginx-external
spec:
hosts:
- nginx.myland.com #虚拟域名
addresses:
- "2.2.2.2" #虚拟地址
ports:
- number: 8091
name: http
protocol: HTTP
location: MESH_EXTERNAL
resolution: STATIC
endpoints: #后端
- address: "10.0.8.101"
ports:
http: 8091
- address: "10.0.8.111"
ports:
http: 8091

注意:由于istio默认不捕获UDP流量,但是DNS解析是UDP协议,解决这个问题有2种方法:

1、通过域名访问需要在pod内/etc/hosts中新增解析记录(只要存在nginx.myland.com的解析记录即可,解析地址随便填,目的是使istio捕获http流量)

2、在istio configmap中新增一下配置,使istio捕获DNS流量

proxyMetadata:
# Enable basic DNS proxying
ISTIO_META_DNS_CAPTURE: "true"
# Enable automatic address allocation, optional
ISTIO_META_DNS_AUTO_ALLOCATE: "true""

可以通过域名或者虚拟地址访问:

kiali上查看:也只是有一个nginx-externel,看不到外部负载信息

可以通过创建hosts为nginx.myland.com的VirtualService和DestinationRule 来做更高级的流量管理

WorkloadEntry实例:

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: nginx-external
spec:
hosts:
- nginx.myland.com
ports:
- number: 8091
name: http
protocol: HTTP
location: MESH_EXTERNAL
resolution: STATIC
workloadSelector:
labels:
app: nginx
---
apiVersion: networking.istio.io/v1beta1
kind: WorkloadEntry
metadata:
name: workload-nginx2001
spec:
address: "10.0.8.101"
ports:
http: 8091
labels:
app: nginx
version: "v1.20"
instance-id: Nginx2001
---
apiVersion: networking.istio.io/v1beta1
kind: WorkloadEntry
metadata:
name: workload-nginx2002
spec:
address: "10.0.8.111"
ports:
http: 8091
labels:
app: nginx
version: "v1.20"
instance-id: Nginx2002

serviceentry定义服务,workloadentry定义端点

可以看到外部更详细的信息,也可以做更高级的流量管理

ServiceEntry与WorkloadEntry的更多相关文章

  1. Istio ServiceEntry 引入外部服务

    概念及示例 使用服务入口Service Entry来添加一个入口到 Istio 内部维护的服务注册中心.添加了服务入口后,Envoy 代理可以向服务发送流量,就好像它是网格内部的服务一样.配置服务入口 ...

  2. Istio 之ServiceEntry

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

  3. istio服务条目(ServiceEntry)介绍

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

  4. Istio实践(4)- 故障注入、熔断及ServiceEntry

    前言:接上一篇istio多服务应用部署及调用,本文介绍通过流量管理(故障注入.请求超时等)以及ServiceEntry外部服务部署应用 1.设置服务延迟 修改springbootapp-vs-v1.y ...

  5. istio流量管理:非侵入式流量治理

    在服务治理中,流量管理是一个广泛的话题,一般情况下,常用的包括: 动态修改服务访问的负载均衡策略,比如根据某个请求特征做会话保持: 同一个服务有多版本管理,将一部分流量切到某个版本上: 对服务进行保护 ...

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

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

  7. ASP.NET Core 源码阅读笔记(1) ---Microsoft.Extensions.DependencyInjection

    这篇随笔主要记录一下ASP.NET Core团队实现默认的依赖注入容器的过程,我的理解可能并不是正确的. DependencyInjection这个项目不大,但却是整个ASP.NET Core的基础, ...

  8. ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】

    本系列前面的文章我们主要以编程的角度对ASP.NET Core的依赖注入系统进行了详细的介绍,如果读者朋友们对这些内容具有深刻的理解,我相信你们已经可以正确是使用这些与依赖注入相关的API了.如果你还 ...

  9. ASP.NET Core中的依赖注入(5):ServicePrvider实现揭秘【补充漏掉的细节】

    到目前为止,我们定义的ServiceProvider已经实现了基本的服务提供和回收功能,但是依然漏掉了一些必需的细节特性.这些特性包括如何针对IServiceProvider接口提供一个Service ...

  10. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)

    Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableSer ...

随机推荐

  1. C++练习8 常量的说明

    const用来声明常量,const的位置可以看出其修饰的是哪一部分 1 #include <iostream> 2 using namespace std; 3 int main() 4 ...

  2. ES6的Set详解

    数组去重 let arr = [ 1,2,3,4,5,3,2 ] // 数组去重 // 方法一 let newArr = [new Set(arr)] console.log(newArr); // ...

  3. ctf命令执行刷题

    web29 error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i" ...

  4. Tomcat修改端口号问题

    今日面试问到如何修改Tomcat的问题 懵了 1.第一种就是我们常用的编辑器中 如:Idea中 一键式修改端口号(我只知道这个) 在下面的图 Http port后处修改即可,默认为8080端口 2.第 ...

  5. .Net 调用 sqlserver 存储过程实例

    1.输出datatable 存储过程: create proc inparamS @inpar varchar(20) as begin select top 1 * from Address whe ...

  6. 07#Web 实战:仿 GitHub 个人主页项目拖拽排序

    实现效果图 GitHub 和 Gitee 个人主页中可以对自己的项目进行拖拽排序,于是我就想自己实现一个.本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程. ...

  7. Spring AOP 报错:Error creating bean with name 'student' defined in file

    问题概述 Spring AOP 报错,一直显示:Error creating bean with name 'student' defined in file 的报错.从五个方向排查:第一,aspec ...

  8. 02#Web 实战:实现树形控件

    前言 这是一篇个人练习 Web 前端各种常见的控件.组件的实战系列文章.本篇文章将介绍个人通过 JQuery + 无序列表 + CSS 动画完成一个简易的树形控件. 最终实现的效果是: 这样结构比较复 ...

  9. Apache Maven Assembly自定义打包插件的使用

    前言 本文主要记录在SpringBoot项目中使用Apache Maven Assembly插件进行打包的相关内容: 官网说明:https://maven.apache.org/plugins/mav ...

  10. python去重的几种方法

    from collections import OrderedDict list1 = [1,5,2,1,10] print(list(set(list1))) #[1, 2, 10, 5] 这种方式 ...