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定义端点

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

最新文章

  1. RedisUtil 工具类
  2. WireShark网络性能分析
  3. win32自绘按钮,使用GDI+(一)
  4. c#操作access,update语句不执行的解决办法
  5. JSON-SCHEMA
  6. Windows下Python工具pip的安装
  7. Windows的拖放操作使用方法
  8. python中的md5加密
  9. oracle操作字符串:拼接、替换、截取、查找
  10. UNIX基础上
  11. mysql-笔记--增删改查
  12. Hadoop环境搭建--Docker完全分布式部署Hadoop环境(菜鸟采坑吐血整理)
  13. JavaScript学习历程03
  14. golang 多个worker正常关闭的示例
  15. [Leetcode 771]宝石和石子 Jewels and Stones HashSet简单应用
  16. linux /Android 平台下使用 i2c-tools
  17. 如何在Windows环境下模拟丢包
  18. CentOS安装php及其扩展
  19. 与数据库连接的页面增删改查 的easyui实现(主要是前端实现)
  20. C/C++ -- Gui编程 -- Qt库的使用 -- 使用小写qDebug调试程序

热门文章

  1. 用Python绘图(数据分析与挖掘实战)
  2. 在 CentOS7 部署 ELK8.0.1
  3. 遥感影像和DEM数据获取处理、GeoServer切片发布并使用Cesium加载
  4. 轻量级CI/CD发布部署环境搭建及使用_03_docker安装harbor
  5. python如何画高光谱立体图像
  6. SQL Server迁移数据库文件(ldf&mdf文件)到其他盘
  7. 电气原理图制图相关GB标准
  8. 13.OpenFeign测试远程调用
  9. OSPF邻居状态
  10. 在IIS上同站点部署多个程序操作步骤