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. 树莓派4B安装OPENCV4.0

    参考 : https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/ Step #1: Expand ...

  2. 一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。

    前言 秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景.欢迎大家参与我们的开源项目,提交PR,提高竞争力.早日上岸,升职加薪. 知识点详解 秒杀系统架构图 秒杀流程图 秒杀系统设计 这篇 ...

  3. JZOJ 2020.07.28【NOIP提高组】模拟

    2020.07.28[NOIP提高组]模拟 考试时状态不好,暴力不想打 结束前勉勉强强骗点分 已经不想说什么了······ \(T1\) 复制&粘贴2 逆推答案,枚举 \(k\),分类讨论 \ ...

  4. 东方CannonBall

    代码 #include<cstdio> using namespace std; const int N = 1e5; double fx[N + 5] , fy[N + 5] , g[N ...

  5. 看完这一篇,ShardingSphere-jdbc 实战再也不怕了

    谈到分库分表中间件时,我们自然而然的会想到 ShardingSphere-JDBC . 这篇文章,我们聊聊 ShardingSphere-JDBC 相关知识点,并实战演示一番. 1 ShardingS ...

  6. VSCode 自动编译 typescript 为 javascript

    1.我们默认你已经安装了node.js通过npm安装typescript npm install -g typescript 2.VSCode 里,点击"终端" "新建终 ...

  7. 第五周作业-N67044-张铭扬

    1.  搭建chrony服务完成多个主机的时间同步. [root@centos8 ~]# yum -y install chrony [root@centos8 ~]# vim /etc/chrony ...

  8. VMware 关于mininet

    1.mininet安装是git clone git://github.com/mininet/mininet.git       (git clone http://github.com/minine ...

  9. 微信小程序tabBar不显示的问题

    刚刚入门 随便试吧了几个小功能.在用到tabBar时,在未出现代码错误的情况下,tabBar不显示 后来改了改发现是打开的首页并没有包含在tabBar列表里.

  10. S-HR常用源码

    1.public static String getUserId(Context ctx) {        UserInfo userInfo = ContextUtil.getCurrentUse ...