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. Educational Codeforces Round 143 (Rated for Div. 2) A-E

    比赛链接 A 题意 有两座塔由红蓝方块组成,分别有 \(n,m\) 个方块,一次操作可以把一座塔塔顶的方块移动到另一座塔的塔顶,问通过操作是否能使每座塔中没有颜色相同的相邻方块. 题解 知识点:贪心. ...

  2. 【TS】接口和接口继承

    接口 接口也相当于语法规范,在使用ts编写的时候,需要注重的就是数据类型以及语法规范,恰好这里提供了一个接口,在进行传值的时候,传值的类型以及字段必须符合我们预期的类型规范才可以,下面是代码演示 语法 ...

  3. Java基础语法:注释、数据类型、字节

    Java基础语法:注释.数据类型.字节 注释 单行注释:// 多行注释:/* 注释 */ 文档注释:/** 注释 */ 数据类型分为两大类:基本类型和引用类型 八大基本数据类型 整数类型 byte(占 ...

  4. python下载图片实现方法

    转载: https://www.jb51.net/article/119178.htm

  5. MySQL数据类型补充

    数据类型 整数数据类型 特殊说明: ​ 对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255).int(M)这个M在字段的属性中指定了u ...

  6. video遇到问题汇总

    1.调取视频自动播放video.play()时报错 Uncaught (in promise) DOMException: play() failed because the user didn't ...

  7. LeetCode算法训练-回溯 491.递增子序列 46.全排列 47.全排列 II

    欢迎关注个人公众号:爱喝可可牛奶 LeetCode算法训练-回溯 491.递增子序列 46.全排列 47.全排列 II LeetCode 491. 递增子序列 分析 找出并返回所有数组中不同的递增子序 ...

  8. Postgresql CTE解析

    一.简介 WITH提供了一种方式来书写在一个大型查询中使用的辅助语句.这些语句通常被称为公共表表达式或CTE(Common Table Expressions),它们可以被看成是定义只在一个查询中存在 ...

  9. element-ui的collapse中嵌套table表格 的 高度跳跃 问题

    <script src="//unpkg.com/vue@2.6.10/dist/vue.js"></script><script src=" ...

  10. 关于vscode 一些配置

    一. 基本操作 1.创建完项目, code .   直接在vscode 中打开 2.设置--首选项  检测 package.json 文件   点击serve 是可以运行 3.常用的vscode 插件 ...