ServiceEntry与WorkloadEntry

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
View Code

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

 

 

 

 

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

posted @ 2023-01-29 16:15  西风发财  阅读(272)  评论(0编辑  收藏  举报